diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000000..ba365bfe4f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,7 @@
+## Version of OpenTTD
+
+## Expected result
+
+## Actual result
+
+## Steps to reproduce
diff --git a/.github/stale.yml b/.github/stale.yml
new file mode 100644
index 0000000000..57d42d6921
--- /dev/null
+++ b/.github/stale.yml
@@ -0,0 +1,34 @@
+daysUntilClose: 7
+staleLabel: stale
+closeComment: false
+exemptMilestones: true
+exemptAssignees: true
+
+issues:
+ daysUntilStale: 60
+ exemptLabels:
+ - pinned
+ - security
+ - "good first issue"
+ - regression
+ markComment: >
+ This issue has been automatically marked as stale because it has not had any activity in the last two months.
+
+ If you believe the issue is still relevant, please test on the latest nightly and report back.
+
+ It will be closed if no further activity occurs within 7 days.
+
+ Thank you for your contributions.
+
+pulls:
+ daysUntilStale: 30
+ exemptLabels:
+ - pinned
+ markComment: >
+ This pull request has been automatically marked as stale because it has not had any activity in the last month.
+
+ Please feel free to give a status update now, ping for review, or re-open when it's ready.
+
+ It will be closed if no further activity occurs within 7 days.
+
+ Thank you for your contributions.
diff --git a/Makefile.grf.in b/Makefile.grf.in
index 1625b9e4c0..8e8113a033 100644
--- a/Makefile.grf.in
+++ b/Makefile.grf.in
@@ -42,11 +42,22 @@ MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum")
NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo
PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png
+# List of target files.
+OBT_FILES := $(BIN_DIR)/orig_dos.obg
+OBT_FILES += $(BIN_DIR)/orig_dos_de.obg
+OBT_FILES += $(BIN_DIR)/orig_win.obg
+OBT_FILES += $(BIN_DIR)/orig_dos.obs
+OBT_FILES += $(BIN_DIR)/orig_win.obs
+OBT_FILES += $(BIN_DIR)/no_sound.obs
+OBT_FILES += $(BIN_DIR)/orig_dos.obm
+OBT_FILES += $(BIN_DIR)/orig_win.obm
+OBT_FILES += $(BIN_DIR)/no_music.obm
+OBT_FILES += $(BIN_DIR)/orig_tto.obm
+
# Build the GRF.
+all: $(OBT_FILES)
ifdef GRFCODEC
-all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm
-else
-all:
+all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf
endif
$(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt
@@ -67,6 +78,10 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/
$(E) '$(STAGE) Updating $(notdir $@)'
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@
+# Guard against trying to run GRFCODEC/NFORENUM without either being set.
+ifdef GRFCODEC
+ifdef NFORENUM
+
# Compile extra grf
$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk
$(E) '$(STAGE) Assembling openttd.nfo'
@@ -89,9 +104,12 @@ $(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk
$(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf
$(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf
+endif
+endif
+
# Clean up temporary files.
clean:
- $(Q)rm -f *.bak *.grf
+ $(Q)rm -f *.bak *.grf $(OBT_FILES)
# Clean up temporary files
mrproper: clean
diff --git a/Makefile.src.in b/Makefile.src.in
index 0589ba69a6..9cf3557c56 100644
--- a/Makefile.src.in
+++ b/Makefile.src.in
@@ -90,6 +90,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
# Use autodetected revisions
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
+GITHASH := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
# Make sure we have something in VERSION and ISODATE
ifeq ($(VERSION),)
@@ -159,6 +160,19 @@ $(SRC_OBJS_DIR)/$(DEPEND): $(SRC_DIR)/depend/depend.cpp
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) -o $@ $<
endif
+# Macro for invoking a command on groups of 100 words at a time
+# (analogous to xargs(1)). The macro invokes itself recursively
+# until the list of words is depleted.
+#
+# Usage: $(call xargs,COMMAND,LIST)
+#
+# COMMAND should be a shell command to which the words will be
+# appended as arguments in groups of 100.
+define xargs
+$(1) $(wordlist 1,100,$(2))
+$(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2))))
+endef
+
# Make sure that only 'make depend' ALWAYS triggers a recheck
ifeq ($(filter depend, $(MAKECMDGOALS)),)
Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) $(DEP)
@@ -170,14 +184,7 @@ endif
$(Q)touch Makefile.dep.tmp
# Calculate the deps via makedepend
- $(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -- $(CFLAGS_MAKEDEP) -- $(SRCS:%=$(SRC_DIR)/%) 2>/dev/null
-
-# Convert x:/... paths to /x/... for mingw
-ifeq ($(OS), MINGW)
- @cat Makefile.dep.tmp | sed 's@/\([a-zA-Z]\):\/@\/\1\/@g' > Makefile.dep.tmp.mingw
- @cp Makefile.dep.tmp.mingw Makefile.dep.tmp
- @rm -f Makefile.dep.tmp.mingw
-endif
+ $(call xargs,$(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -a -- $(CFLAGS_MAKEDEP) -- 2>/dev/null,$(SRCS:%=$(SRC_DIR)/%))
# Remove all comments and includes that don't start with $(SRC_DIR)
# Remove $(SRC_DIR) from object-file-name
@@ -244,7 +251,7 @@ $(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP)
$(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP)
$(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)'
- $(Q)$(WINDRES) -o $@ -I `basename $<` $<
+ $(Q)$(WINDRES) -o $@ $<
$(BIN_DIR)/$(TTD): $(TTD)
$(Q)cp $(TTD) $(BIN_DIR)/$(TTD)
@@ -269,10 +276,10 @@ endif
# Revision files
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
- $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp
+ $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/rev.cpp
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
- $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc
+ $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/os/windows/ottdres.rc
FORCE:
diff --git a/README.md b/README.md
index 6004bdc7f5..7c842a1f86 100644
--- a/README.md
+++ b/README.md
@@ -593,8 +593,7 @@ no graphical user interface; you would be building a dedicated server.
The following compilers are known to compile OpenTTD:
-- Microsoft Visual C++ (MSVC) 2005, 2008 and 2010.
- Version 2005 gives bogus warnings about scoping issues.
+- Microsoft Visual C++ (MSVC) 2015, 2017 and 2019.
- GNU Compiler Collection (GCC) 3.3 - 4.4, 4.6 - 4.8.
- Versions 4.1 and earlier give bogus warnings about uninitialised variables.
- Versions 4.4, 4.6 give bogus warnings about freeing non-heap objects.
@@ -605,7 +604,8 @@ The following compilers are known to compile OpenTTD:
The following compilers are known not to compile OpenTTD:
-- Microsoft Visual C++ (MSVC) 2003 and earlier.
+- Microsoft Visual C++ (MSVC) 2013 and earlier.
+ These old versions do not support modern C++ language features.
- GNU Compiler Collection (GCC) 3.2 and earlier.
These old versions fail due to OpenTTD's template usage.
- GNU Compiler Collection (GCC) 4.5. It optimizes enums too aggressively.
diff --git a/azure-pipelines/templates/windows-dependencies.yml b/azure-pipelines/templates/windows-dependencies.yml
index 06f56e626b..c6fc6e407c 100644
--- a/azure-pipelines/templates/windows-dependencies.yml
+++ b/azure-pipelines/templates/windows-dependencies.yml
@@ -1,7 +1,7 @@
steps:
- bash: |
set -ex
- curl -L https://github.com/OpenTTD/OpenTTD-CF/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip
+ curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip
unzip windows-dependencies.zip
rm -f windows-dependencies.zip
displayName: 'Download dependencies'
diff --git a/bin/ai/compat_0.7.nut b/bin/ai/compat_0.7.nut
index 44e6acff9d..98c03c6731 100644
--- a/bin/ai/compat_0.7.nut
+++ b/bin/ai/compat_0.7.nut
@@ -367,3 +367,10 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS
AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS
AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS
AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.0.nut b/bin/ai/compat_1.0.nut
index 5e7dd441f6..627c949cc3 100644
--- a/bin/ai/compat_1.0.nut
+++ b/bin/ai/compat_1.0.nut
@@ -119,3 +119,10 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS
AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS
AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS
AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.1.nut b/bin/ai/compat_1.1.nut
index 32127b438a..a47f3d5b16 100644
--- a/bin/ai/compat_1.1.nut
+++ b/bin/ai/compat_1.1.nut
@@ -56,3 +56,10 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS
AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS
AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS
AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.2.nut b/bin/ai/compat_1.2.nut
index 0082415e49..95ccabda24 100644
--- a/bin/ai/compat_1.2.nut
+++ b/bin/ai/compat_1.2.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.2 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.3.nut b/bin/ai/compat_1.3.nut
index 036f3b5c34..fc8e06bf5e 100644
--- a/bin/ai/compat_1.3.nut
+++ b/bin/ai/compat_1.3.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.3 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.4.nut b/bin/ai/compat_1.4.nut
index 3829bcc8e0..169ead959d 100644
--- a/bin/ai/compat_1.4.nut
+++ b/bin/ai/compat_1.4.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.4 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.5.nut b/bin/ai/compat_1.5.nut
index 71a46ff7a0..681a708bee 100644
--- a/bin/ai/compat_1.5.nut
+++ b/bin/ai/compat_1.5.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.5 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.6.nut b/bin/ai/compat_1.6.nut
index 8fb518e1b5..5242821d1d 100644
--- a/bin/ai/compat_1.6.nut
+++ b/bin/ai/compat_1.6.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.6 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut
index 6eb0c980ea..93884e6637 100644
--- a/bin/ai/compat_1.7.nut
+++ b/bin/ai/compat_1.7.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.7 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut
index 95ab6a76dd..f3fa1bc0a6 100644
--- a/bin/ai/compat_1.8.nut
+++ b/bin/ai/compat_1.8.nut
@@ -8,3 +8,10 @@
*/
AILog.Info("1.8 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+AIBridge._GetName <- AIBridge.GetName;
+AIBridge.GetName <- function(bridge_id)
+{
+ return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
+}
diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut
index d36db03da7..8b92b6f881 100644
--- a/bin/ai/regression/tst_regression/main.nut
+++ b/bin/ai/regression/tst_regression/main.nut
@@ -253,7 +253,11 @@ function Regression::Bridge()
if (AIBridge.IsValidBridge(i)) j++;
print(" Bridge " + i);
print(" IsValidBridge(): " + AIBridge.IsValidBridge(i));
- print(" GetName(): " + AIBridge.GetName(i));
+ print(" GetName():");
+ print(" VT_RAIL: " + AIBridge.GetName(i, AIVehicle.VT_RAIL));
+ print(" VT_ROAD: " + AIBridge.GetName(i, AIVehicle.VT_ROAD));
+ print(" VT_WATER: " + AIBridge.GetName(i, AIVehicle.VT_WATER));
+ print(" VT_AIR: " + AIBridge.GetName(i, AIVehicle.VT_AIR));
print(" GetMaxSpeed(): " + AIBridge.GetMaxSpeed(i));
print(" GetPrice(): " + AIBridge.GetPrice(i, 5));
print(" GetMaxLength(): " + AIBridge.GetMaxLength(i));
diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt
index 210cf2696a..e93b2e2343 100644
--- a/bin/ai/regression/tst_regression/result.txt
+++ b/bin/ai/regression/tst_regression/result.txt
@@ -867,105 +867,165 @@ ERROR: IsEnd() is invalid as Begin() is never called
--Bridge--
Bridge -1
IsValidBridge(): false
- GetName(): (null : 0x00000000)
+ GetName():
+ VT_RAIL: (null : 0x00000000)
+ VT_ROAD: (null : 0x00000000)
+ VT_WATER: (null : 0x00000000)
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1
GetPrice(): -1
GetMaxLength(): -1
GetMinLength(): -1
Bridge 0
IsValidBridge(): true
- GetName(): Wooden rail bridge
+ GetName():
+ VT_RAIL: Wooden rail bridge
+ VT_ROAD: Wooden road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 32
GetPrice(): 450
GetMaxLength(): 66
GetMinLength(): 2
Bridge 1
IsValidBridge(): true
- GetName(): Concrete rail bridge
+ GetName():
+ VT_RAIL: Concrete rail bridge
+ VT_ROAD: Concrete road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 48
GetPrice(): 630
GetMaxLength(): 4
GetMinLength(): 2
Bridge 2
IsValidBridge(): true
- GetName(): Steel girder rail bridge
+ GetName():
+ VT_RAIL: Steel girder rail bridge
+ VT_ROAD: Steel girder road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 64
GetPrice(): 811
GetMaxLength(): 7
GetMinLength(): 2
Bridge 3
IsValidBridge(): true
- GetName(): Reinforced concrete suspension rail bridge
+ GetName():
+ VT_RAIL: Reinforced concrete suspension rail bridge
+ VT_ROAD: Reinforced concrete suspension road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 80
GetPrice(): 946
GetMaxLength(): 12
GetMinLength(): 4
Bridge 4
IsValidBridge(): true
- GetName(): Steel suspension rail bridge
+ GetName():
+ VT_RAIL: Steel suspension rail bridge
+ VT_ROAD: Steel suspension road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 96
GetPrice(): 1042
GetMaxLength(): 66
GetMinLength(): 5
Bridge 5
IsValidBridge(): true
- GetName(): Steel suspension rail bridge
+ GetName():
+ VT_RAIL: Steel suspension rail bridge
+ VT_ROAD: Steel suspension road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 112
GetPrice(): 1081
GetMaxLength(): 66
GetMinLength(): 5
Bridge 6
IsValidBridge(): true
- GetName(): Steel cantilever rail bridge
+ GetName():
+ VT_RAIL: Steel cantilever rail bridge
+ VT_ROAD: Steel cantilever road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 160
GetPrice(): 1261
GetMaxLength(): 9
GetMinLength(): 5
Bridge 7
IsValidBridge(): true
- GetName(): Steel cantilever rail bridge
+ GetName():
+ VT_RAIL: Steel cantilever rail bridge
+ VT_ROAD: Steel cantilever road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 208
GetPrice(): 1306
GetMaxLength(): 10
GetMinLength(): 5
Bridge 8
IsValidBridge(): true
- GetName(): Steel cantilever rail bridge
+ GetName():
+ VT_RAIL: Steel cantilever rail bridge
+ VT_ROAD: Steel cantilever road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 240
GetPrice(): 1396
GetMaxLength(): 11
GetMinLength(): 5
Bridge 9
IsValidBridge(): true
- GetName(): Steel girder rail bridge
+ GetName():
+ VT_RAIL: Steel girder rail bridge
+ VT_ROAD: Steel girder road bridge
+ VT_WATER: Aqueduct
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 256
GetPrice(): 1351
GetMaxLength(): 4
GetMinLength(): 2
Bridge 10
IsValidBridge(): false
- GetName(): (null : 0x00000000)
+ GetName():
+ VT_RAIL: (null : 0x00000000)
+ VT_ROAD: (null : 0x00000000)
+ VT_WATER: (null : 0x00000000)
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1
GetPrice(): -1
GetMaxLength(): -1
GetMinLength(): -1
Bridge 11
IsValidBridge(): false
- GetName(): (null : 0x00000000)
+ GetName():
+ VT_RAIL: (null : 0x00000000)
+ VT_ROAD: (null : 0x00000000)
+ VT_WATER: (null : 0x00000000)
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1
GetPrice(): -1
GetMaxLength(): -1
GetMinLength(): -1
Bridge 12
IsValidBridge(): false
- GetName(): (null : 0x00000000)
+ GetName():
+ VT_RAIL: (null : 0x00000000)
+ VT_ROAD: (null : 0x00000000)
+ VT_WATER: (null : 0x00000000)
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1
GetPrice(): -1
GetMaxLength(): -1
GetMinLength(): -1
Bridge 13
IsValidBridge(): false
- GetName(): (null : 0x00000000)
+ GetName():
+ VT_RAIL: (null : 0x00000000)
+ VT_ROAD: (null : 0x00000000)
+ VT_WATER: (null : 0x00000000)
+ VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1
GetPrice(): -1
GetMaxLength(): -1
diff --git a/bin/baseset/no_music.obm b/bin/baseset/no_music.obm
deleted file mode 100644
index 7a70e3b55d..0000000000
--- a/bin/baseset/no_music.obm
+++ /dev/null
@@ -1,103 +0,0 @@
-; $Id$
-;
-; This represents more or less nothingness
-;
-[metadata]
-name = NoMusic
-shortname = NULL
-version = 0
-fallback = true
-description = A music pack without actual music.
-description.af_ZA = 'n Musiek stel sonder enige musiek.
-description.ar_EG = مجموعة موسيقى بدون موسيقى
-description.be_BY = "Пусты" набор музычнага афармлення, які не зьмяшчае ніякай музыкі.
-description.bg_BG = Празен музикален пакет.
-description.ca_ES = Una llista de música sense cap peça.
-description.cs_CZ = Prázná hudební sada.
-description.cy_GB = Pecyn cerddoriaeth heb unrhyw gerddoriaeth ynddo.
-description.da_DK = En musikpakke uden musik.
-description.de_DE = Ein Musikset ohne Musik.
-description.el_GR = Ένα πάκετο μουσικής χωρίς πραγματική μουσική.
-description.en_AU = A music pack without actual music.
-description.en_US = A music pack without actual music.
-description.es_ES = Un conjunto de música vacío.
-description.es_MX = Paquete de música vacío
-description.et_EE = Muusikakogu ilma muusikata.
-description.eu_ES = Musika gabeko musika paketea.
-description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia.
-description.fr_FR = Un pack de musiques sans musiques.
-description.ga_IE = Pacáiste ceoil gan aon cheol iarbhír ann.
-description.gd_GB = Pacaid ciùil anns nach eil fonn sam bith.
-description.gl_ES = Un conxunto de músicas sen ningunha música.
-description.he_IL = אוסף מנגינות ללא מנגינות.
-description.hr_HR = Glazbeni paket bez ikakve glazbe.
-description.hu_HU = Zenei alapcsomag zene nélkül.
-description.id_ID = Paket musik tanpa musik sungguhan.
-description.is_IS = Tónlistarpakki sem er í raun án tónlistar.
-description.it_IT = Un pacchetto musicale non contenente alcuna musica.
-description.ja_JP = 空の音楽パック
-description.ko_KR = 실제 음악이 없는 음악 목록입니다.
-description.la_VA = Sarcina musicae sine ulla musica.
-description.lb_LU = E Musikpack ouni aktuell Musik.
-description.lt_LT = Muzikos pakas be muzikos.
-description.lv_LV = Mūzikas kopa bez mūzikas
-description.ms_MY = Pek muzik tanpa muzik sebenar.
-description.nb_NO = En musikkpakke uten noe musikk.
-description.nl_NL = Een muziekset zonder muziek.
-description.nn_NO = Ei musikkpakke utan noko musikk.
-description.pl_PL = Zestaw utworów muzycznych nie zawierający żadnej muzyki.
-description.pt_BR = Um pacote de músicas sem músicas.
-description.pt_PT = Um conjunto de música vazio.
-description.ro_RO = Un set de muzică fără muzică inclusă.
-description.ru_RU = "Пустой" набор музыкального оформления, не содержащий никакой музыки.
-description.sk_SK = Sada hudby neobsahujúca hudbu.
-description.sl_SI = Glasbeni paket z vključeno glasbo.
-description.sr_RS = Prazan skup muzičkih numera.
-description.sv_SE = Ett musikpaket utan någon musik.
-description.ta_IN = இசை இல்லாத இசைத்தொகுப்பு.
-description.th_TH = ชุดเพลงประกอบแบบไม่มีเสียงเพลง
-description.tr_TR = Müzik içermeyen boş bir müzik paketi.
-description.uk_UA = Порожній набір музики.
-description.vi_VN = Gói âm nhạc này không có nhạc nào.
-description.zh_CN = 一个没有实际内容的音乐包.
-description.zh_TW = 不含任何音樂的音樂集。
-
-[files]
-theme =
-old_0 =
-old_1 =
-old_2 =
-old_3 =
-old_4 =
-old_5 =
-old_6 =
-old_7 =
-old_8 =
-old_9 =
-new_0 =
-new_1 =
-new_2 =
-new_3 =
-new_4 =
-new_5 =
-new_6 =
-new_7 =
-new_8 =
-new_9 =
-ezy_0 =
-ezy_1 =
-ezy_2 =
-ezy_3 =
-ezy_4 =
-ezy_5 =
-ezy_6 =
-ezy_7 =
-ezy_8 =
-ezy_9 =
-
-[md5s]
-
-[names]
-
-[origin]
-default = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/no_sound.obs b/bin/baseset/no_sound.obs
deleted file mode 100644
index 8bd8d30fe0..0000000000
--- a/bin/baseset/no_sound.obs
+++ /dev/null
@@ -1,70 +0,0 @@
-; $Id$
-;
-; This represents more or less nothingness
-;
-[metadata]
-name = NoSound
-shortname = NULL
-version = 2
-fallback = true
-description = A sound pack without any sounds.
-description.af_ZA = 'n Klank stel sonder enige klanke.
-description.ar_EG = مجموعة صوت بدوت اصوات مضافة
-description.be_BY = "Пусты" набор гукавога афармленьня, які не зьмяшчае ніякіх гукаў.
-description.bg_BG = Празен звуков пакет.
-description.ca_ES = Una llista de sons buida.
-description.cs_CZ = Prázdná sada zvuků.
-description.cy_GB = Pecyn sain heb unrhyw effeithiau sain ynddo.
-description.da_DK = En lydpakke uden lyde.
-description.de_DE = Basissounds ohne Sound.
-description.el_GR = Ένα πάκετο ήχων χώρις ήχους.
-description.en_AU = A sound pack without any sounds.
-description.en_US = A sound pack without any sounds.
-description.es_ES = Un conjunto de sonidos vacío.
-description.es_MX = Paquete de sonidos vacío
-description.et_EE = Helikogu ilma helideta.
-description.eu_ES = Soinurik gabeko soinu pakete bat
-description.fi_FI = Äänipaketti, jossa ei ole ääniä.
-description.fr_FR = Un pack de sons sans sons.
-description.ga_IE = Pacáiste fuaimeanna gan aon fhuaimeanna ann.
-description.gd_GB = Pacaid fhuaimean anns nach eil fuaim sam bith.
-description.gl_ES = Un conxunto de sons sen ningún son
-description.he_IL = אוסף צלילים ללא צלילים.
-description.hr_HR = Zvučni paket bez ikakvih zvukova.
-description.hu_HU = Hang alapcsomag hangok nélkül.
-description.id_ID = Paket efek suara tanpa suara apapun.
-description.is_IS = Hljóðpakki án hljóðs.
-description.it_IT = Un pacchetto sonoro non contenente alcun suono.
-description.ja_JP = 空の効果音パック
-description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다.
-description.la_VA = Sarcina sonorum sine ullis sonis.
-description.lb_LU = E Soundpack ouni iergendee Sound.
-description.lt_LT = Garsų pakas be jokių garsų.
-description.lv_LV = Skaņu kopa bez skaņas.
-description.nb_NO = En lydpakke uten noen lyder.
-description.nl_NL = Een geluidset zonder geluid.
-description.nn_NO = Ei lydpakke utan nokon lydar.
-description.pl_PL = Zestaw dźwięków nie zawierający żadnych dźwięków.
-description.pt_BR = Um pacote de sons sem sons.
-description.pt_PT = Um conjunto de sons vazio.
-description.ro_RO = Un set de sunete fără nici un sunet inclus.
-description.ru_RU = "Пустой" набор звукового оформления, не содержащий никаких звуков.
-description.sk_SK = Zvuková sada neobsahujúca zvuky.
-description.sl_SI = Zvočni paket brez zvoka.
-description.sr_RS = Prazan skup zvukova.
-description.sv_SE = Ett ljudpaket utan några ljud.
-description.ta_IN = ஒலிகள் இல்லாத ஒலி தொகுப்பு.
-description.th_TH = ชุดเสียงแบบไร้เสียง
-description.tr_TR = Ses içermeyen boş bir ses kümesi.
-description.uk_UA = Порожній набір звуків.
-description.vi_VN = Gói âm thanh này không có âm thanh nào.
-description.zh_CN = 一个空的音效包.
-description.zh_TW = 不含任何音效的音效集。
-
-[files]
-samples =
-
-[md5s]
-
-[origin]
-default = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/openttd.grf b/bin/baseset/openttd.grf
index 6c9afef2ab..ea5f55ce1d 100644
Binary files a/bin/baseset/openttd.grf and b/bin/baseset/openttd.grf differ
diff --git a/bin/baseset/orig_dos.obg b/bin/baseset/orig_dos.obg
deleted file mode 100644
index 9d0db3e2af..0000000000
--- a/bin/baseset/orig_dos.obg
+++ /dev/null
@@ -1,84 +0,0 @@
-; $Id$
-;
-; This represents the original graphics as on the non-German Transport
-; Tycoon Deluxe DOS CD.
-;
-[metadata]
-name = original_dos
-shortname = TTDD
-version = 1
-palette = DOS
-description = Original Transport Tycoon Deluxe DOS edition graphics.
-description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe grafieke.
-description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة الدوس
-description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для DOS.
-description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS.
-description.ca_ES = Gràfics originals del Transport Tycoon Deluxe pel DOS.
-description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro DOS).
-description.cy_GB = Graffeg gwreiddiol fersiwn DOS o Transport Tycoon Deluxe.
-description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS-version.
-description.de_DE = Original Transport Tycoon Deluxe DOS Basisgrafiken.
-description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS.
-description.en_AU = Original Transport Tycoon Deluxe DOS edition graphics.
-description.en_US = Original Transport Tycoon Deluxe DOS edition graphics.
-description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS.
-description.es_MX = Gráficos originales de Transport Tycoon Deluxe para DOS.
-description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni graafika.
-description.eu_ES = Transport Tycoon Deluxe originaleko DOS edizioko grafikoak.
-description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version grafiikat.
-description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS).
-description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS.
-description.gd_GB = Grafaigeachd aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
-description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para DOS.
-description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת DOS.
-description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje.
-description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának grafikája.
-description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS.
-description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS útgáfunni.
-description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS.
-description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS)
-description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 그래픽입니다.
-description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS.
-description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Grafik.
-description.lt_LT = Originali Transport Tycoon Deluxe DOS leidimo grafika.
-description.lv_LV = Oriģinālā Transport Tycoon Deluxe DOS izdevuma grafika.
-description.ms_MY = Grafik asal Transport Tycoon Deluxe DOS edition.
-description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS.
-description.nl_NL = Originele graphics van de Transport Tycoon Deluxe DOS-versie.
-description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS.
-description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS.
-description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS.
-description.pt_PT = Gráficos originais da edição DOS de Transport Tycoon Deluxe.
-description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS.
-description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для DOS.
-description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS).
-description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico DOS.
-description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe DOS izdanja.
-description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan.
-description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு அசைவூட்டங்கள்.
-description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS edition
-description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü grafikleri.
-description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition.
-description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS
-description.zh_CN = 运输大亨DOS豪华版原版图形包.
-description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的圖形。
-
-[files]
-base = TRG1.GRF
-logos = TRGI.GRF
-arctic = TRGC.GRF
-tropical = TRGH.GRF
-toyland = TRGT.GRF
-extra = ORIG_EXTRA.GRF
-
-[md5s]
-TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
-TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
-TRGC.GRF = ed446637e034104c5559b32c18afe78d
-TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
-TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
-ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/orig_dos.obm b/bin/baseset/orig_dos.obm
deleted file mode 100644
index cdacc8e7f5..0000000000
--- a/bin/baseset/orig_dos.obm
+++ /dev/null
@@ -1,76 +0,0 @@
-; $Id$
-;
-; This represents the original music as on the Transport
-; Tycoon Deluxe for DOS CD.
-;
-[metadata]
-name = original_dos
-shortname = TTDD
-version = 1
-description = Original Transport Tycoon Deluxe DOS edition music.
-
-[files]
-theme = gm.cat
-old_0 = gm.cat
-old_1 = gm.cat
-old_2 = gm.cat
-old_3 = gm.cat
-old_4 = gm.cat
-old_5 = gm.cat
-old_6 = gm.cat
-old_7 = gm.cat
-old_8 =
-old_9 =
-new_0 = gm.cat
-new_1 = gm.cat
-new_2 = gm.cat
-new_3 = gm.cat
-new_4 = gm.cat
-new_5 = gm.cat
-new_6 = gm.cat
-new_7 =
-new_8 =
-new_9 =
-ezy_0 = gm.cat
-ezy_1 = gm.cat
-ezy_2 = gm.cat
-ezy_3 = gm.cat
-ezy_4 = gm.cat
-ezy_5 = gm.cat
-ezy_6 =
-ezy_7 =
-ezy_8 =
-ezy_9 =
-
-[md5s]
-gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb
-
-[catindex]
-theme = 0
-old_0 = 1
-old_1 = 8
-old_2 = 2
-old_3 = 9
-old_4 = 14
-old_5 = 15
-old_6 = 19
-old_7 = 13
-new_0 = 6
-new_1 = 11
-new_2 = 10
-new_3 = 17
-new_4 = 21
-new_5 = 18
-new_6 = 5
-ezy_0 = 12
-ezy_1 = 7
-ezy_2 = 16
-ezy_3 = 3
-ezy_4 = 20
-ezy_5 = 4
-
-[names]
-; Names get read from the CAT file
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
diff --git a/bin/baseset/orig_dos.obs b/bin/baseset/orig_dos.obs
deleted file mode 100644
index ce2d6d22e6..0000000000
--- a/bin/baseset/orig_dos.obs
+++ /dev/null
@@ -1,70 +0,0 @@
-; $Id$
-;
-; This represents the original sounds as on the Transport
-; Tycoon Deluxe DOS CD.
-;
-[metadata]
-name = original_dos
-shortname = TTDO
-version = 0
-description = Original Transport Tycoon Deluxe DOS edition sounds.
-description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe klanke.
-description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة الدوس
-description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для DOS.
-description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за DOS.
-description.ca_ES = Sons originals del Transport Tycoon Deluxe pel DOS.
-description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro DOS).
-description.cy_GB = Effeithiau sain gwreiddiol fersiwn DOS o Transport Tycoon Deluxe.
-description.da_DK = Originallyd fra Transport Tycoon Deluxe DOS-version.
-description.de_DE = Original Transport Tycoon Deluxe DOS Basissounds.
-description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση DOS.
-description.en_AU = Original Transport Tycoon Deluxe DOS edition sounds.
-description.en_US = Original Transport Tycoon Deluxe DOS edition sounds.
-description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión DOS.
-description.es_MX = Sonidos originales de Transport Tycoon Deluxe para DOS.
-description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni helid.
-description.eu_ES = Transport Tycoon Deluxe originaleko DOS edizioko soinuak.
-description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version äänet.
-description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version DOS).
-description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán DOS.
-description.gd_GB = Fuaimean aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
-description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para DOS.
-description.he_IL = צלילי Transport Tycoon Deluxe המקורי בגרסת DOS.
-description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje.
-description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának hangjai.
-description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi DOS.
-description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe DOS útgáfunni.
-description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS.
-description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (DOS)
-description.ko_KR = 오리지널 트랜스포트 타이쿤 도스 에디션의 효과음입니다.
-description.la_VA = Soni ex editione originale Transport Tycoon Deluxe DOS.
-description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Sound.
-description.lt_LT = Originalūs Transport Tycoon Deluxe DOS leidimo garsai.
-description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS.
-description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe DOS-versie.
-description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for DOS.
-description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe DOS.
-description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição DOS.
-description.pt_PT = Sons originais da edição DOS de Transport Tycoon Deluxe.
-description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru DOS.
-description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для DOS.
-description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (DOS).
-description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice DOS.
-description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe DOS izdanja.
-description.sv_SE = Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan.
-description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு ஒலிகள்.
-description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe DOS edition
-description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü sesleri.
-description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe DOS edition.
-description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên DOS
-description.zh_CN = 运输大亨DOS豪华版原版音效包.
-description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的音效。
-
-[files]
-samples = SAMPLE.CAT
-
-[md5s]
-SAMPLE.CAT = 422ea3dd074d2859bb51639a6e0e85da
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
diff --git a/bin/baseset/orig_dos_de.obg b/bin/baseset/orig_dos_de.obg
deleted file mode 100644
index 754ab5a2d4..0000000000
--- a/bin/baseset/orig_dos_de.obg
+++ /dev/null
@@ -1,82 +0,0 @@
-; $Id$
-;
-; This represents the original graphics as on the German Transport
-; Tycoon Deluxe DOS CD. It contains one broken sprite.
-;
-[metadata]
-name = original_dos_de
-shortname = TTDD
-version = 0
-palette = DOS
-description = Original Transport Tycoon Deluxe DOS (German) edition graphics.
-description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS (German) uitgawe grafieke.
-description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الالمانية نسخة الدوس
-description.be_BY = Арыґінальная ґрафіка зь нямецкай версіі Transport Tycoon Deluxe для DOS.
-description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS (немски) .
-description.ca_ES = Gràfics originals del Transport Tycoon Deluxe (alemany) pel DOS.
-description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (německá verze pro DOS).
-description.cy_GB = Graffeg gwreiddiol fersiwn DOS (Almaenig) o Transport Tycoon Deluxe.
-description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS (Tysk) version.
-description.de_DE = Original Transport Tycoon Deluxe DOS (Deutsch) Basisgrafiken.
-description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS (Γερμανικό).
-description.en_AU = Original Transport Tycoon Deluxe DOS (German) edition graphics.
-description.en_US = Original Transport Tycoon Deluxe DOS (German) edition graphics.
-description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS (Alemán).
-description.es_MX = Gráficos originales de Transport Tycoon Deluxe para DOS (en alemán).
-description.et_EE = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika.
-description.fi_FI = Alkuperäiset Saksassa julkaistun Transport Tycoon Deluxen DOS-version grafiikat.
-description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande).
-description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS (Gearmánach).
-description.gd_GB = Grafaigeachd aig an deasachadh DOS (Gearmailteach) tùsail aig Transport Tycoon Deluxe.
-description.gl_ES = Graficos da edición orixinal (alemá) de Transport Tycoon Deluxe para DOS.
-description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת DOS (גרמנית).
-description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje.
-description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS (német) verziójának grafikája.
-description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS (Jerman).
-description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS (þýsku) útgáfunni.
-description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), edizione DOS.
-description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS・ドイツ版)
-description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션(독일)의 그래픽입니다.
-description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS (Germanica).
-description.lb_LU = Original Transport Tycoon Deluxe DOS (Däitsch) Editioun Grafik.
-description.lt_LT = Originali Transport Tycoon Deluxe DOS (Vokiečių) leidimo grafika.
-description.lv_LV = Oriģinālā Transport Tycoon Deluxe DOS (vācu) izdevuma grafika.
-description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk).
-description.nl_NL = Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie.
-description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS (tysk).
-description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS (German).
-description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS alemã.
-description.pt_PT = Gráficos originais da edição DOS (Alemã) de Transport Tycoon Deluxe.
-description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS (ediţia germană).
-description.ru_RU = Оригинальная графика из немецкой версии Transport Tycoon Deluxe для DOS.
-description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS) (v jazyku nemčina).
-description.sl_SI = Originalna grafika Transport Tycoon Deluxe za nemško različico DOS.
-description.sr_RS = Originalni skup grafika nemačkog Transport Tycoon Deluxe DOS izdanja.
-description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska).
-description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS (செருமன்) பதிப்பு அசைவூட்டங்கள்.
-description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS (German) edition
-description.tr_TR = Özgün Transport Tycoon Deluxe DOS (Almanca) sürümü grafikleri.
-description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition (німецького).
-description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS (tiếng Đức)
-description.zh_CN = 运输大亨DOS豪华德语版原版图形包.
-description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版 (德國版) 的圖形。
-
-[files]
-base = TRG1.GRF
-logos = TRGI.GRF
-arctic = TRGC.GRF
-tropical = TRGH.GRF
-toyland = TRGT.GRF
-extra = ORIG_EXTRA.GRF
-
-[md5s]
-TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
-TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
-TRGC.GRF = ed446637e034104c5559b32c18afe78d
-TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
-TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
-ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/orig_tto.obm b/bin/baseset/orig_tto.obm
deleted file mode 100644
index 13b3efb110..0000000000
--- a/bin/baseset/orig_tto.obm
+++ /dev/null
@@ -1,71 +0,0 @@
-; $Id$
-;
-; This represents the original music as on the Transport
-; Tycoon (with World Editor) for DOS CD.
-;
-[metadata]
-name = original_tto
-shortname = TTOD
-version = 1
-description = Original Transport Tycoon (Original/World Editor) music.
-
-[files]
-theme = gm-tto.cat
-old_0 = gm-tto.cat
-old_1 = gm-tto.cat
-old_2 = gm-tto.cat
-old_3 = gm-tto.cat
-old_4 = gm-tto.cat
-old_5 = gm-tto.cat
-old_6 = gm-tto.cat
-old_7 = gm-tto.cat
-old_8 =
-old_9 =
-new_0 = gm-tto.cat
-new_1 = gm-tto.cat
-new_2 = gm-tto.cat
-new_3 = gm-tto.cat
-new_4 = gm-tto.cat
-new_5 = gm-tto.cat
-new_6 = gm-tto.cat
-new_7 = gm-tto.cat
-new_8 =
-new_9 =
-ezy_0 =
-ezy_1 =
-ezy_2 =
-ezy_3 =
-ezy_4 =
-ezy_5 =
-ezy_6 =
-ezy_7 =
-ezy_8 =
-ezy_9 =
-
-[catindex]
-theme = 0
-old_0 = 1
-old_1 = 6
-old_2 = 2
-old_3 = 7
-old_4 = 11
-old_5 = 12
-old_6 = 15
-old_7 = 10
-new_0 = 4
-new_1 = 5
-new_2 = 9
-new_3 = 8
-new_4 = 13
-new_5 = 16
-new_6 = 14
-new_7 = 3
-
-[md5s]
-gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e
-
-[names]
-; Names get read from the CAT file
-
-[origin]
-default = You can find it on your Transport Tycoon CD-ROM.
diff --git a/bin/baseset/orig_win.obg b/bin/baseset/orig_win.obg
deleted file mode 100644
index ec00781488..0000000000
--- a/bin/baseset/orig_win.obg
+++ /dev/null
@@ -1,83 +0,0 @@
-; $Id$
-;
-; This represents the original graphics as on the Transport
-; Tycoon Deluxe for Windows CD.
-;
-[metadata]
-name = original_windows
-shortname = TTDW
-version = 0
-palette = Windows
-description = Original Transport Tycoon Deluxe Windows edition graphics.
-description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe grafieke.
-description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة وندوز
-description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для Windows.
-description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за Windows.
-description.ca_ES = Gràfics originals del Transport Tycoon Deluxe pel Windows.
-description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro Windows).
-description.cy_GB = Graffeg gwreiddiol fersiwn Windows o Transport Tycoon Deluxe.
-description.da_DK = Originalgrafik fra Transport Tycoon Deluxe Windows-version.
-description.de_DE = Original Transport Tycoon Deluxe Windows Basisgrafiken.
-description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση Windows.
-description.en_AU = Original Transport Tycoon Deluxe Windows edition graphics.
-description.en_US = Original Transport Tycoon Deluxe Windows edition graphics.
-description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión Windows.
-description.es_MX = Gráficos originales de Transport Tycoon Deluxe para Windows.
-description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni graafika.
-description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version grafiikat.
-description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows).
-description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán Windows.
-description.gd_GB = Grafaigeachd aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
-description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para Windows.
-description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת Windows.
-description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje.
-description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának grafikája.
-description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi Windows.
-description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe Windows útgáfunni.
-description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windows.
-description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (Windows)
-description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 그래픽입니다.
-description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe Windows.
-description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Grafik.
-description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo grafika.
-description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma grafika.
-description.ms_MY = Grafik asal Transport Tycoon Deluxe edisi Windows.
-description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows.
-description.nl_NL = Originele graphics van de Transport Tycoon Deluxe Windows-versie.
-description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for Windows.
-description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe Windows.
-description.pt_BR = Gráficos Originais do Transport Tycoon, Edição Windows.
-description.pt_PT = Gráficos originais da edição Windows de Transport Tycoon Deluxe.
-description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru Windows.
-description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для Windows.
-description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (Windows).
-description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico oken(windows).
-description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe Windows izdanja.
-description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan.
-description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு அசைவூட்டங்கள்.
-description.th_TH = กราฟฟิกต้ำตำหรับของ Transport Tycoon Deluxe Windows edition
-description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü grafikleri.
-description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe Windows edition.
-description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên Windows
-description.zh_CN = 运输大亨Windows豪华版原版图形包.
-description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的圖形。
-
-[files]
-base = TRG1R.GRF
-logos = TRGIR.GRF
-arctic = TRGCR.GRF
-tropical = TRGHR.GRF
-toyland = TRGTR.GRF
-extra = ORIG_EXTRA.GRF
-
-[md5s]
-TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
-TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
-TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
-TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
-TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
-ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/orig_win.obm b/bin/baseset/orig_win.obm
deleted file mode 100644
index c8c4923e0e..0000000000
--- a/bin/baseset/orig_win.obm
+++ /dev/null
@@ -1,158 +0,0 @@
-; $Id$
-;
-; This represents the original music as on the Transport
-; Tycoon Deluxe for Windows CD.
-;
-[metadata]
-name = original_windows
-shortname = TTDW
-version = 1
-description = Original Transport Tycoon Deluxe Windows edition music.
-description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe musiek.
-description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الموسيقية نسخة وندوز
-description.be_BY = Арыґінальны набор музычнага афармленьня з гульні Transport Tycoon Deluxe для Windows.
-description.bg_BG = Оригинална музика на Transport Tycoon Deluxe за Windows.
-description.ca_ES = Música original del Transport Tycoon Deluxe pel Windows.
-description.cs_CZ = Původní hudba Transport Tycoon Deluxe (verze pro Windows).
-description.cy_GB = Cerddoriaeth gwreiddiol fersion Windows o Transport Tycoon Deluxe.
-description.da_DK = Originalmusik fra Transport Tycoon Deluxe Windows-version.
-description.de_DE = Original Transport Tycoon Deluxe Windows Musikset.
-description.el_GR = Αρχική μουσική από το Transport Tycoon Deluxe έκδοση Windows.
-description.en_AU = Original Transport Tycoon Deluxe Windows edition music.
-description.en_US = Original Transport Tycoon Deluxe Windows edition music.
-description.es_ES = Música original de Transport Tycoon Deluxe versión Windows.
-description.es_MX = Música original de Transport Tycoon Deluxe para Windows.
-description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni muusika.
-description.fi_FI = Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki.
-description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows).
-description.ga_IE = Ceol bunaidh Transport Tycoon Deluxe, eagrán Windows.
-description.gd_GB = Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
-description.gl_ES = Música da edición orixinal de Transport Tycoon Deluxe para Windows.
-description.he_IL = מנגינות Transport Tycoon Deluxe המקורי בגרסת Windows.
-description.hr_HR = Originalna glazba za Transport Tycoon Deluxe Windows izdanje.
-description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának zenéje.
-description.id_ID = Musik pengiring orisinil Transport Tycoon Deluxe versi Windows.
-description.is_IS = Upprunalega tónlistin úr Transport Tycoon Deluxe Windows útgáfunni.
-description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Windows.
-description.ja_JP = Transport Tycoon Deluxe オリジナル版 音楽 (Windows)
-description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 음악입니다.
-description.la_VA = Musica ex editione originale Transport Tycoon Deluxe Windows.
-description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Musik.
-description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo muzika.
-description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika.
-description.ms_MY = Muzik asal Transport Tycoon Deluxe edisi Windows.
-description.nb_NO = Original musikk fra Transport Tycoon Deluxe for Windows.
-description.nl_NL = Originele muziek van de Transport Tycoon Deluxe Windows-versie.
-description.nn_NO = Original musikk frå Transport Tycoon Deluxe for Windows.
-description.pl_PL = Oryginalna edycja utworów muzycznych w Transport Tycoon Deluxe Windows.
-description.pt_BR = Música Original do Transport Tycoon Deluxe, Edição Windows
-description.pt_PT = Música original da edição Windows de Transport Tycoon Deluxe.
-description.ro_RO = Setul de muzică original al Transport Tycoon Deluxe pentru Windows.
-description.ru_RU = Оригинальный набор музыкального оформления из игры Transport Tycoon Deluxe для Windows.
-description.sk_SK = Pôvodná hudba z Transport Tycoon Deluxe (Windows).
-description.sl_SI = Originalna glasba Transport Tycoon Deluxe različice oken(windows).
-description.sr_RS = Originalni skup muzičkih numera Transport Tycoon Deluxe Windows izdanja.
-description.sv_SE = Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan.
-description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு இசை.
-description.th_TH = เพลงต้นตำหรับชอง Transport Tycoon Deluxe Windows edition
-description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü müzikleri.
-description.uk_UA = Оригінальна музика з Transport Tycoon Deluxe Windows edition.
-description.vi_VN = Nhạc gốc từ phiên bản Transport Tycoon Deluxe trên Windows
-description.zh_CN = Transport Tycoon Deluxe(运输大亨Windows豪华版)的原版音乐包
-description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音樂。
-
-[files]
-theme = GM_TT00.GM
-old_0 = GM_TT02.GM
-old_1 = GM_TT06.GM
-old_2 = GM_TT03.GM
-old_3 = GM_TT12.GM
-old_4 = GM_TT08.GM
-old_5 = GM_TT13.GM
-old_6 = GM_TT14.GM
-old_7 = GM_TT10.GM
-old_8 =
-old_9 =
-new_0 = GM_TT04.GM
-new_1 = GM_TT01.GM
-new_2 = GM_TT05.GM
-new_3 = GM_TT15.GM
-new_4 = GM_TT11.GM
-new_5 = GM_TT16.GM
-new_6 = GM_TT09.GM
-new_7 =
-new_8 =
-new_9 =
-ezy_0 = GM_TT18.GM
-ezy_1 = GM_TT19.GM
-ezy_2 = GM_TT21.GM
-ezy_3 = GM_TT17.GM
-ezy_4 = GM_TT20.GM
-ezy_5 = GM_TT07.GM
-ezy_6 =
-ezy_7 =
-ezy_8 =
-ezy_9 =
-
-[md5s]
-GM_TT00.GM = 45cfec1b9d8c7a0ad45e755833cbf221
-GM_TT01.GM = ab14ed3392d848abd2a2e90a9d75d121
-GM_TT02.GM = dd4f696e4be5987ce738257b08b50171
-GM_TT03.GM = a1bfde23343df9e4063419bf29c166b8
-GM_TT04.GM = 4e6943aa0c455203d76c79389054747d
-GM_TT05.GM = cee281cb85a2e2343552d97640545a47
-GM_TT06.GM = 26d1de5efa8675f94065784e9d539e49
-GM_TT07.GM = 6f2691e17558f552ec4c565e4ab7139c
-GM_TT08.GM = a42bf2cb3340a822f1a69646fc7a487d
-GM_TT09.GM = eb35761a58a8df3c59ed8929cce13916
-GM_TT10.GM = 42fecd686720a785d20a78590c466a82
-GM_TT11.GM = 50ef1ef02e49d2112786dd45e69dc3ee
-GM_TT12.GM = 4ce707a0e0e72419f0681dd9bd95271b
-GM_TT13.GM = e765753be29d889ec818f38009103619
-GM_TT14.GM = 270e2d63bd32b95a4d007ce15a6ce45f
-GM_TT15.GM = 89e116a1c0c69f1845cc903a9bfbe460
-GM_TT16.GM = f824e2371b3bedfe61aad4b9c62dd6be
-GM_TT17.GM = 1b23eebb0796c1ab99cd97fa7082cf7b
-GM_TT18.GM = 15650de3bad645d0e88c4f5c7a2df92a
-GM_TT19.GM = 7aec079e15bd09588660b85545ac4dfc
-GM_TT20.GM = 1509097889dee617aa1e9a1738a5a930
-GM_TT21.GM = a8d0aaad02e1a762d8d54cf81da56bab
-
-[names]
-GM_TT00.GM = Tycoon DELUXE Theme
-GM_TT01.GM = Snarl Up
-GM_TT02.GM = Easy Driver
-GM_TT03.GM = Little Red Diesel
-GM_TT04.GM = City Groove
-GM_TT05.GM = Aliens Ate My Railway
-GM_TT06.GM = Stoke It
-GM_TT07.GM = Don't Walk!
-GM_TT08.GM = Sawyer's Tune
-GM_TT09.GM = Fell Apart On Me
-GM_TT10.GM = Can't Get There From Here
-GM_TT11.GM = Hard Drivin'
-GM_TT12.GM = Road Hog
-GM_TT13.GM = Hold That Train!
-GM_TT14.GM = Broomer's Oil Rag
-GM_TT15.GM = Goss Groove
-GM_TT16.GM = Small Town
-GM_TT17.GM = Cruise Control
-GM_TT18.GM = Stroll On
-GM_TT19.GM = Funk Central
-GM_TT20.GM = Jammit
-GM_TT21.GM = Movin' On
-
-; MIDI timecodes where the playback should attemp to start and stop short.
-; This is to allow fixing undesired silences in original MIDI files.
-; However not all music drivers may support this.
-[timingtrim]
-; Theme has two beats silence at the beginning which prevents clean looping.
-GM_TT00.GM = 768:53760
-; Can't Get There From Here from the Windows version has a long silence at the end,
-; followed by a solo repeat. This isn't in the original DOS version music and is likely
-; unintentional from the people who converted the music from the DOS version.
-; Actual song ends after measure 152.
-GM_TT10.GM = 0:235008
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
diff --git a/bin/baseset/orig_win.obs b/bin/baseset/orig_win.obs
deleted file mode 100644
index c3e5fb7693..0000000000
--- a/bin/baseset/orig_win.obs
+++ /dev/null
@@ -1,70 +0,0 @@
-; $Id$
-;
-; This represents the original sounds as on the Transport
-; Tycoon Deluxe for Windows CD.
-;
-[metadata]
-name = original_windows
-shortname = TTDO
-version = 0
-description = Original Transport Tycoon Deluxe Windows edition sounds.
-description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe klanke.
-description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة وندوز
-description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для Windows.
-description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за Windows.
-description.ca_ES = Sons originals del Transport Tycoon Deluxe pel Windows.
-description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro Windows).
-description.cy_GB = Effeithiau sain gwreiddiol fersiwn Windows o Transport Tycoon Deluxe.
-description.da_DK = Originallyd fra Transport Tycoon Deluxe Windows-version.
-description.de_DE = Original Transport Tycoon Deluxe Windows Basissounds.
-description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση Windows.
-description.en_AU = Original Transport Tycoon Deluxe Windows edition sounds.
-description.en_US = Original Transport Tycoon Deluxe Windows edition sounds.
-description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión Windows.
-description.es_MX = Sonidos originales de Transport Tycoon Deluxe para Windows.
-description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni helid.
-description.eu_ES = Transport Tycoon Deluxe originaleko Windows edizioko grafikoak.
-description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version äänet.
-description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version Windows).
-description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán Windows.
-description.gd_GB = Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
-description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para Windows.
-description.he_IL = צלילי Transport Tycoon Deluxe המקורי בגרסת Windows.
-description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje.
-description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának hangjai.
-description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi Windows.
-description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe Windows útgáfunni.
-description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows.
-description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (Windows)
-description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 효과음입니다.
-description.la_VA = Soni ex editione originale Transport Tycoon Deluxe Windows.
-description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Sound.
-description.lt_LT = Originalūs Transport Tycoon Deluxe Windows leidimo garsai.
-description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows.
-description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe Windows-versie.
-description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for Windows.
-description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe Windows.
-description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição Windows.
-description.pt_PT = Sons originais da edição Windows de Transport Tycoon Deluxe.
-description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru Windows.
-description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для Windows.
-description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (Windows).
-description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice oken(windows).
-description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe Windows izdanja.
-description.sv_SE = Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan.
-description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு ஒலிகள்.
-description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe Windows edition
-description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü sesleri.
-description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe Windows edition.
-description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên Windows
-description.zh_CN = Transport Tycoon Deluxe Windows (运输大亨Windows豪华版)的原版音效包.
-description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音效。
-
-[files]
-samples = SAMPLE.CAT
-
-[md5s]
-SAMPLE.CAT = 9212e81e72badd4bbe1eaeae66458e10
-
-[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
diff --git a/bin/game/compat_1.2.nut b/bin/game/compat_1.2.nut
index aa5d48c3a3..7822a44d01 100644
--- a/bin/game/compat_1.2.nut
+++ b/bin/game/compat_1.2.nut
@@ -23,3 +23,10 @@ GSNews.Create <- function(type, text, company)
{
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
}
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/bin/game/compat_1.3.nut b/bin/game/compat_1.3.nut
index 78a03534df..0d7a2afb60 100644
--- a/bin/game/compat_1.3.nut
+++ b/bin/game/compat_1.3.nut
@@ -23,3 +23,10 @@ GSNews.Create <- function(type, text, company)
{
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
}
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/bin/game/compat_1.4.nut b/bin/game/compat_1.4.nut
index a00431ed64..3ff887727e 100644
--- a/bin/game/compat_1.4.nut
+++ b/bin/game/compat_1.4.nut
@@ -15,3 +15,10 @@ GSNews.Create <- function(type, text, company)
{
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
}
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/bin/game/compat_1.5.nut b/bin/game/compat_1.5.nut
index 96a7647ff6..b29a8ed2f3 100644
--- a/bin/game/compat_1.5.nut
+++ b/bin/game/compat_1.5.nut
@@ -8,3 +8,10 @@
*/
GSLog.Info("1.5 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/bin/game/compat_1.6.nut b/bin/game/compat_1.6.nut
index d25189db2a..a3f5975287 100644
--- a/bin/game/compat_1.6.nut
+++ b/bin/game/compat_1.6.nut
@@ -8,3 +8,10 @@
*/
GSLog.Info("1.6 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/bin/game/compat_1.7.nut b/bin/game/compat_1.7.nut
index 1290443c4d..b4c4d1bb35 100644
--- a/bin/game/compat_1.7.nut
+++ b/bin/game/compat_1.7.nut
@@ -8,3 +8,10 @@
*/
GSLog.Info("1.7 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut
index 6acdbc0609..5aac3f8c1d 100644
--- a/bin/game/compat_1.8.nut
+++ b/bin/game/compat_1.8.nut
@@ -8,3 +8,10 @@
*/
GSLog.Info("1.8 API compatibility in effect.");
+
+/* 1.9 adds a vehicle type parameter. */
+GSBridge._GetName <- GSBridge.GetName;
+GSBridge.GetName <- function(bridge_id)
+{
+ return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
+}
diff --git a/config.lib b/config.lib
index 3fda9727bc..6154f3822d 100644
--- a/config.lib
+++ b/config.lib
@@ -376,6 +376,7 @@ detect_params() {
--with-fluidsynth) with_fluidsynth="2";;
--without-fluidsynth) with_fluidsynth="0";;
+ --with-fluidsynth=*) with_fluidsynth="$optarg";;
--with-freetype) with_freetype="2";;
--without-freetype) with_freetype="0";;
@@ -1524,7 +1525,7 @@ make_cflags_and_ldflags() {
CXXFLAGS_ENV="$CXXFLAGS"
CXXFLAGS=""
# Libs to compile. In fact this is just LDFLAGS
- LIBS="-lstdc++"
+ LIBS=""
# LDFLAGS used for HOST
LDFLAGS_ENV="$LDFLAGS"
LDFLAGS=""
@@ -1975,7 +1976,7 @@ make_cflags_and_ldflags() {
cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`"
# Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations
- cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`"
+ cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g;s@[ ]*-[^D][^ ]*@@g'`"
else
makedepend=""
fi
diff --git a/docs/Readme_Windows_MSVC.md b/docs/Readme_Windows_MSVC.md
index c60904c72a..90ab2af657 100644
--- a/docs/Readme_Windows_MSVC.md
+++ b/docs/Readme_Windows_MSVC.md
@@ -18,7 +18,7 @@ done during installing Visual Studio, by selecting
`Visual C++ ATL for x86 and x64` depending on your version). If not, you
can get it at this location:
-- [MS Windows Platform SDK](http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en)
+- [MS Windows Platform SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk)
Install the SDK by following the instructions as given.
@@ -55,6 +55,7 @@ Open the appropriate `sln` (Solution) file for your version of Visual Studio:
- VS 2015: projects/openttd_vs140.sln
- VS 2017: projects/openttd_vs141.sln
+- VS 2019: projects/openttd_vs142.sln
Set the build mode to `Release` in
`Build > Configuration manager > Active solution configuration`.
diff --git a/findversion.sh b/findversion.sh
index ead908167e..5d2322adb7 100755
--- a/findversion.sh
+++ b/findversion.sh
@@ -67,20 +67,25 @@ if [ -d "$ROOT_DIR/.git" ]; then
MODIFIED="2"
fi
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
- SHORTHASH=`echo ${HASH} | cut -c1-8`
+ SHORTHASH=`echo ${HASH} | cut -c1-10`
ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'`
BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`"
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`"
+ if [ "$MODIFIED" -eq "0" ]; then
+ hashprefix="-g"
+ elif [ "$MODIFIED" -eq "2" ]; then
+ hashprefix="-m"
+ else
+ hashprefix="-u"
+ fi
+
if [ -n "$TAG" ]; then
VERSION="${TAG}"
else
- VERSION="${ISODATE}-${BRANCH}-g${SHORTHASH}"
+ VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}"
fi
- if [ "$MODIFIED" -eq "2" ]; then
- VERSION="${VERSION}M"
- fi
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
# We are an exported source bundle
cat $ROOT_DIR/.ottdrev
diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs
new file mode 100644
index 0000000000..fffb577482
--- /dev/null
+++ b/media/baseset/translations.vbs
@@ -0,0 +1,123 @@
+Option Explicit
+
+' This file is part of OpenTTD.
+' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+
+Dim FSO
+Set FSO = CreateObject("Scripting.FileSystemObject")
+
+Dim inputfile, outputfile, langpath, extra_grf
+inputfile = WScript.Arguments(0)
+outputfile = WScript.Arguments(1)
+langpath = WScript.Arguments(2)
+
+If WScript.Arguments.Length > 3 Then
+ extra_grf = WScript.Arguments(3)
+End If
+
+Function GetExtraGrfHash
+ Dim WSO, exe, line
+
+ Set WSO = WScript.CreateObject("WScript.Shell")
+ Set exe = WSO.Exec("certutil -hashfile " & extra_grf & " MD5")
+
+ Do Until exe.StdOut.AtEndOfStream
+ line = exe.StdOut.ReadLine
+ If Len(line) = 32 Then GetExtraGrfHash = line
+ Loop
+
+ Set WSO = Nothing
+End Function
+
+' Simple insertion sort, copied from translations.awk
+Sub ISort(a)
+ Dim i, j, n, hold
+ n = UBound(a)
+
+ For i = 1 To n
+ j = i
+ hold = a(j)
+ Do While a(j - 1) > hold
+ j = j - 1
+ a(j + 1) = a(j)
+
+ If j = 0 Then Exit Do
+ Loop
+ a(j) = hold
+ Next
+End Sub
+
+Sub Lookup(ini_key, str_id, outfile)
+ Dim folder, file, line, p, lang, i
+
+ ' Ensure only complete string matches
+ str_id = str_id & " "
+
+ Set folder = FSO.GetFolder(langpath)
+
+ Dim output()
+ ReDim output(folder.Files.Count)
+
+ For Each file In folder.Files
+ If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then
+ Dim f
+ Set f = FSO.OpenTextFile(file.Path)
+
+ Do Until f.atEndOfStream
+ line = f.ReadLine()
+
+ If InStr(1, line, "##isocode ") = 1 Then
+ p = Split(line)
+ lang = p(1)
+ ElseIf InStr(1, line, str_id) = 1 Then
+ p = Split(line, ":", 2)
+ If lang = "en_GB" Then
+ output(i) = ini_key & " = " & p(1)
+ Else
+ output(i) = ini_key & "." & lang & " = " & p(1)
+ End If
+ i = i + 1
+ End If
+
+ Loop
+ End If
+ Next
+
+ ReDim Preserve output(i - 1)
+ ISort output
+
+ For Each line In output
+ outfile.Write line & vbCrLf
+ Next
+
+End Sub
+
+Dim line, p
+
+Dim infile
+Set infile = FSO.OpenTextFile(inputfile)
+
+Dim outfile
+Set outfile = FSO.CreateTextFile(outputfile, True)
+
+Do Until infile.atEndOfStream
+
+ line = infile.ReadLine()
+
+ If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then
+ p = Split(line, "=")
+ If Trim(p(1)) = "" Then
+ outfile.Write("ORIG_EXTRA.GRF = " & GetExtraGrfHash() & vbCrLf)
+ Else
+ outfile.Write(line & vbCrLf)
+ End If
+ ElseIf InStr(1, line, "!! ") = 1 Then
+ p = Split(line)
+ Lookup p(1), p(2), outfile
+ Else
+ outfile.Write(line & vbCrLf)
+ End If
+
+Loop
diff --git a/media/extra_grf/openttd.nfo b/media/extra_grf/openttd.nfo
index 7ece5c7149..460007d68e 100644
--- a/media/extra_grf/openttd.nfo
+++ b/media/extra_grf/openttd.nfo
@@ -14,6 +14,8 @@
// allowing it to be used.
//
+//@@WARNING DISABLE 60
+
//
// Number of sprites, it is wrong, but GRFcodec automagically gets it right.
//
diff --git a/media/extra_grf/openttdgui.nfo b/media/extra_grf/openttdgui.nfo
index 1b17b8651b..d0fbba0e70 100644
--- a/media/extra_grf/openttdgui.nfo
+++ b/media/extra_grf/openttdgui.nfo
@@ -7,7 +7,7 @@
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
//
-1 * 0 0C "OpenTTD GUI graphics"
- -1 * 3 05 15 \b 175 // OPENTTD_SPRITE_COUNT
+ -1 * 3 05 15 \b 179 // OPENTTD_SPRITE_COUNT
-1 sprites/openttdgui.png 8bpp 66 8 64 31 -31 7 normal
-1 sprites/openttdgui.png 8bpp 146 8 64 31 -31 7 normal
-1 sprites/openttdgui.png 8bpp 226 8 64 31 -31 7 normal
@@ -183,3 +183,7 @@
-1 sprites/openttdgui.png 8bpp 440 440 20 20 0 0 normal
-1 sprites/openttdgui.png 8bpp 466 440 20 20 0 0 normal
-1 sprites/openttdgui.png 8bpp 490 440 20 20 0 0 normal
+ -1 sprites/openttdgui_group_livery.png 8bpp 0 0 20 20 0 0 normal
+ -1 sprites/openttdgui_group_livery.png 8bpp 21 0 20 20 0 0 normal
+ -1 sprites/openttdgui_group_livery.png 8bpp 42 0 20 20 0 0 normal
+ -1 sprites/openttdgui_group_livery.png 8bpp 63 0 20 20 0 0 normal
diff --git a/media/extra_grf/openttdgui_group_livery.png b/media/extra_grf/openttdgui_group_livery.png
new file mode 100644
index 0000000000..f45be670cb
Binary files /dev/null and b/media/extra_grf/openttdgui_group_livery.png differ
diff --git a/os/debian/copyright b/os/debian/copyright
index 05cbfc4328..24d6d7052f 100644
--- a/os/debian/copyright
+++ b/os/debian/copyright
@@ -5,7 +5,7 @@ Source: http://www.openttd.org
Files: *
-Copyright: © 2004-2018 Ludvig Strigeous and others.
+Copyright: © 2004-2019 Ludvig Strigeous and others.
License: GPL-2.0
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2.0 as
diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec
index 5fa4d72a1e..28f3666186 100644
--- a/os/rpm/openttd.spec
+++ b/os/rpm/openttd.spec
@@ -2,7 +2,7 @@
# spec file for package openttd
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
-# Copyright (c) 2007-2018 The OpenTTD developers
+# Copyright (c) 2007-2019 The OpenTTD developers
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
diff --git a/projects/basesets_vs140.vcxproj b/projects/basesets_vs140.vcxproj
new file mode 100644
index 0000000000..4e5ed52c4a
--- /dev/null
+++ b/projects/basesets_vs140.vcxproj
@@ -0,0 +1,99 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ basesets
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}
+ basesets
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v140
+
+
+
+
+
+
+
+
+ ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt
+
+
+ ..\bin\baseset\
+ ..\objs\baseset\
+
+
+
+ Generating no_music.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\no_music.obm;%(Outputs)
+
+
+ Generating no_sound.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\no_sound.obs;%(Outputs)
+
+
+ Generating orig_dos.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obg;%(Outputs)
+
+
+ Generating orig_dos.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obm;%(Outputs)
+
+
+ Generating orig_dos.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obs;%(Outputs)
+
+
+ Generating orig_dos_de.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos_de.obg;%(Outputs)
+
+
+ Generating orig_tto.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_tto.obm;%(Outputs)
+
+
+ Generating orig_win.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obg;%(Outputs)
+
+
+ Generating orig_win.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obm;%(Outputs)
+
+
+ Generating orig_win.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obs;%(Outputs)
+
+
+
+
+
+
diff --git a/projects/basesets_vs140.vcxproj.filters b/projects/basesets_vs140.vcxproj.filters
new file mode 100644
index 0000000000..aa555f3fc3
--- /dev/null
+++ b/projects/basesets_vs140.vcxproj.filters
@@ -0,0 +1,40 @@
+
+
+
+
+ {b5a3ac67-19a9-4276-80e9-2360367d2680}
+
+
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+
diff --git a/projects/basesets_vs140.vcxproj.filters.in b/projects/basesets_vs140.vcxproj.filters.in
new file mode 100644
index 0000000000..07bff4542f
--- /dev/null
+++ b/projects/basesets_vs140.vcxproj.filters.in
@@ -0,0 +1,11 @@
+
+
+
+
+ {b5a3ac67-19a9-4276-80e9-2360367d2680}
+
+
+
+!!FILES!!
+
+
diff --git a/projects/basesets_vs140.vcxproj.in b/projects/basesets_vs140.vcxproj.in
new file mode 100644
index 0000000000..0471100a3e
--- /dev/null
+++ b/projects/basesets_vs140.vcxproj.in
@@ -0,0 +1,40 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ basesets
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}
+ basesets
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v140
+
+
+
+
+
+
+
+
+!!FILTERS!!
+
+
+ ..\bin\baseset\
+ ..\objs\baseset\
+
+
+!!FILES!!
+
+
+
+
+
diff --git a/projects/basesets_vs141.vcxproj b/projects/basesets_vs141.vcxproj
new file mode 100644
index 0000000000..a01f24989b
--- /dev/null
+++ b/projects/basesets_vs141.vcxproj
@@ -0,0 +1,99 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ basesets
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}
+ basesets
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v141
+
+
+
+
+
+
+
+
+ ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt
+
+
+ ..\bin\baseset\
+ ..\objs\baseset\
+
+
+
+ Generating no_music.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\no_music.obm;%(Outputs)
+
+
+ Generating no_sound.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\no_sound.obs;%(Outputs)
+
+
+ Generating orig_dos.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obg;%(Outputs)
+
+
+ Generating orig_dos.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obm;%(Outputs)
+
+
+ Generating orig_dos.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obs;%(Outputs)
+
+
+ Generating orig_dos_de.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos_de.obg;%(Outputs)
+
+
+ Generating orig_tto.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_tto.obm;%(Outputs)
+
+
+ Generating orig_win.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obg;%(Outputs)
+
+
+ Generating orig_win.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obm;%(Outputs)
+
+
+ Generating orig_win.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obs;%(Outputs)
+
+
+
+
+
+
diff --git a/projects/basesets_vs141.vcxproj.filters b/projects/basesets_vs141.vcxproj.filters
new file mode 100644
index 0000000000..aa555f3fc3
--- /dev/null
+++ b/projects/basesets_vs141.vcxproj.filters
@@ -0,0 +1,40 @@
+
+
+
+
+ {b5a3ac67-19a9-4276-80e9-2360367d2680}
+
+
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+
diff --git a/projects/basesets_vs141.vcxproj.filters.in b/projects/basesets_vs141.vcxproj.filters.in
new file mode 100644
index 0000000000..07bff4542f
--- /dev/null
+++ b/projects/basesets_vs141.vcxproj.filters.in
@@ -0,0 +1,11 @@
+
+
+
+
+ {b5a3ac67-19a9-4276-80e9-2360367d2680}
+
+
+
+!!FILES!!
+
+
diff --git a/projects/basesets_vs141.vcxproj.in b/projects/basesets_vs141.vcxproj.in
new file mode 100644
index 0000000000..69dbd2e078
--- /dev/null
+++ b/projects/basesets_vs141.vcxproj.in
@@ -0,0 +1,40 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ basesets
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}
+ basesets
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v141
+
+
+
+
+
+
+
+
+!!FILTERS!!
+
+
+ ..\bin\baseset\
+ ..\objs\baseset\
+
+
+!!FILES!!
+
+
+
+
+
diff --git a/projects/basesets_vs142.vcxproj b/projects/basesets_vs142.vcxproj
new file mode 100644
index 0000000000..d483708aa7
--- /dev/null
+++ b/projects/basesets_vs142.vcxproj
@@ -0,0 +1,99 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ basesets
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}
+ basesets
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v142
+
+
+
+
+
+
+
+
+ ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt
+
+
+ ..\bin\baseset\
+ ..\objs\baseset\
+
+
+
+ Generating no_music.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\no_music.obm;%(Outputs)
+
+
+ Generating no_sound.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\no_sound.obs;%(Outputs)
+
+
+ Generating orig_dos.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obg;%(Outputs)
+
+
+ Generating orig_dos.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obm;%(Outputs)
+
+
+ Generating orig_dos.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos.obs;%(Outputs)
+
+
+ Generating orig_dos_de.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_dos_de.obg;%(Outputs)
+
+
+ Generating orig_tto.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_tto.obm;%(Outputs)
+
+
+ Generating orig_win.obg baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obg;%(Outputs)
+
+
+ Generating orig_win.obm baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obm;%(Outputs)
+
+
+ Generating orig_win.obs baseset metadata file
+ cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf
+ $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)
+ ..\bin\baseset\orig_win.obs;%(Outputs)
+
+
+
+
+
+
diff --git a/projects/basesets_vs142.vcxproj.filters b/projects/basesets_vs142.vcxproj.filters
new file mode 100644
index 0000000000..aa555f3fc3
--- /dev/null
+++ b/projects/basesets_vs142.vcxproj.filters
@@ -0,0 +1,40 @@
+
+
+
+
+ {b5a3ac67-19a9-4276-80e9-2360367d2680}
+
+
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+ Baseset Metadata
+
+
+
diff --git a/projects/basesets_vs142.vcxproj.filters.in b/projects/basesets_vs142.vcxproj.filters.in
new file mode 100644
index 0000000000..07bff4542f
--- /dev/null
+++ b/projects/basesets_vs142.vcxproj.filters.in
@@ -0,0 +1,11 @@
+
+
+
+
+ {b5a3ac67-19a9-4276-80e9-2360367d2680}
+
+
+
+!!FILES!!
+
+
diff --git a/projects/basesets_vs142.vcxproj.in b/projects/basesets_vs142.vcxproj.in
new file mode 100644
index 0000000000..9743d83e7a
--- /dev/null
+++ b/projects/basesets_vs142.vcxproj.in
@@ -0,0 +1,40 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ basesets
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}
+ basesets
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v142
+
+
+
+
+
+
+
+
+!!FILTERS!!
+
+
+ ..\bin\baseset\
+ ..\objs\baseset\
+
+
+!!FILES!!
+
+
+
+
+
diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs
index b1f7886a4f..98c704553c 100755
--- a/projects/determineversion.vbs
+++ b/projects/determineversion.vbs
@@ -21,31 +21,34 @@ Sub FindReplaceInFile(filename, to_find, replacement)
file.Close
End Sub
-Sub UpdateFile(modified, isodate, version, cur_date, filename)
+Sub UpdateFile(modified, isodate, version, cur_date, githash, filename)
FSO.CopyFile filename & ".in", filename
FindReplaceInFile filename, "!!MODIFIED!!", modified
FindReplaceInFile filename, "!!ISODATE!!", isodate
FindReplaceInFile filename, "!!VERSION!!", version
FindReplaceInFile filename, "!!DATE!!", cur_date
+ FindReplaceInFile filename, "!!GITHASH!!", githash
End Sub
Sub UpdateFiles(version)
- Dim modified, isodate, cur_date
+ Dim modified, isodate, cur_date, githash
cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
If InStr(version, Chr(9)) Then
isodate = Mid(version, InStr(version, Chr(9)) + 1)
modified = Mid(isodate, InStr(isodate, Chr(9)) + 1)
+ githash = Mid(modified, InStr(modified, Chr(9)) + 1)
isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1)
modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1)
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
Else
isodate = 0
modified = 1
+ githash = ""
End If
- UpdateFile modified, isodate, version, cur_date, "../src/rev.cpp"
- UpdateFile modified, isodate, version, cur_date, "../src/os/windows/ottdres.rc"
+ UpdateFile modified, isodate, version, cur_date, githash, "../src/rev.cpp"
+ UpdateFile modified, isodate, version, cur_date, githash, "../src/os/windows/ottdres.rc"
End Sub
Function DetermineVersion()
@@ -53,7 +56,7 @@ Function DetermineVersion()
Set WshShell = CreateObject("WScript.Shell")
On Error Resume Next
- modified = 1
+ modified = 0
hash = ""
shorthash = ""
branch = ""
@@ -71,7 +74,7 @@ Function DetermineVersion()
If oExec.ExitCode = 0 Then
hash = oExec.StdOut.ReadLine()
- shorthash = Mid(hash, 1, 8)
+ shorthash = Mid(hash, 1, 10)
' Make sure index is in sync with disk
Set oExec = WshShell.Exec("git update-index --refresh")
If Err.Number = 0 Then
@@ -132,18 +135,21 @@ Function DetermineVersion()
rev_file.Close()
ElseIf hash = "" Then
DetermineVersion = "norev000"
+ modified = 1
Else
- Dim version
- If tag <> "" Then
- version = tag
- ElseIf branch = "master" Then
- version = isodate & "-g" & shorthash
+ Dim version, hashprefix
+ If modified = 0 Then
+ hashprefix = "-g"
+ ElseIf modified = 2 Then
+ hashprefix = "-m"
Else
- version = isodate & "-" & branch & "-g" & shorthash
+ hashprefix = "-u"
End If
- If modified = 2 Then
- version = version & "M"
+ If tag <> "" Then
+ version = tag
+ Else
+ version = isodate & "-" & branch & hashprefix & shorthash
End If
DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash
diff --git a/projects/dpi_aware.manifest b/projects/dpi_aware.manifest
index 6f04161596..ee1c7ea224 100644
--- a/projects/dpi_aware.manifest
+++ b/projects/dpi_aware.manifest
@@ -1,7 +1,29 @@
-
+
+
+
+
+
+
+
+
+
-
- True/PM
+
+ True/PM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/generate b/projects/generate
index af59a83fb2..595fa3acc6 100755
--- a/projects/generate
+++ b/projects/generate
@@ -22,6 +22,16 @@ then
exit 1
fi
+# openttd_vs142.sln is for MSVC 2019
+# openttd_vs142.vcxproj is for MSVC 2019
+# openttd_vs142.vcxproj.filters is for MSVC 2019
+# langs_vs142.vcxproj is for MSVC 2019
+# strgen_vs142.vcxproj is for MSVC 2019
+# strgen_vs142.vcxproj.filters is for MSVC 2019
+# generate_vs142.vcxproj is for MSVC 2019
+# version_vs142.vcxproj is for MSVC 2019
+# basesets_vs142.vcxproj is for MSVC 2019
+
# openttd_vs141.sln is for MSVC 2017
# openttd_vs141.vcxproj is for MSVC 2017
# openttd_vs141.vcxproj.filters is for MSVC 2017
@@ -30,6 +40,7 @@ fi
# strgen_vs141.vcxproj.filters is for MSVC 2017
# generate_vs141.vcxproj is for MSVC 2017
# version_vs141.vcxproj is for MSVC 2017
+# basesets_vs141.vcxproj is for MSVC 2017
# openttd_vs140.sln is for MSVC 2015
# openttd_vs140.vcxproj is for MSVC 2015
@@ -39,6 +50,7 @@ fi
# strgen_vs140.vcxproj.filters is for MSVC 2015
# generate_vs140.vcxproj is for MSVC 2015
# version_vs140.vcxproj is for MSVC 2015
+# basesets_vs140.vcxproj is for MSVC 2015
@@ -124,17 +136,7 @@ load_main_data() {
gsub(" ", "", $0);
gsub("^#", "", $0);
gsub("^ ", "", $0);
-
- if (first_time != 0) {
- print "#1 ";
- } else {
- first_time = 1;
- }
-
filter = $0;
- print "#1 ";
print "#3 ";
printf "#3 {c76ff9f1-1e62-46d8-8d55-%012d}\n", i;
print "#3 ";
@@ -148,10 +150,6 @@ load_main_data() {
if (deep == skip) {
gsub(" ", "", $0);
gsub("/", "\\\\", $0);
- print "#1 ";
- print "#1 ";
split($0, file, ".");
cltype = "ClInclude"
if (file[2] == "cpp") cltype = "ClCompile";
@@ -162,7 +160,6 @@ load_main_data() {
print "#4 "cltype">";
}
}
- END { print "#1 "; }
'`"
eval "$2=\"\$RES\""
@@ -180,21 +177,6 @@ load_lang_data() {
continue
fi
RES="$RES
-#1
-#1
-#1
-#1
-#1
#2
#2 Generating "$i" language file
#2 ..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang \"%(FullPath)\"
@@ -217,10 +199,6 @@ load_settings_data() {
do
i=`basename $i`
RES="$RES
-#1
-#1
#2
#4
#4 INI
@@ -231,6 +209,44 @@ load_settings_data() {
eval "$2=\"\$RES\$RES2\""
}
+load_baseset_data() {
+ FIRST=""
+ RES=""
+ RES2="
+#4 "
+ # Windows Folder sort and Linux Folder sort are slightly different.
+ # By removing the extension and sorting it on Linux, they are the same.
+ for i in `ls $2 | sed s~.txt$~~g | sort`
+ do
+ if [ "$FIRST" != "" ]; then
+ RES2="$RES2;"
+ else
+ FIRST=1
+ fi
+ i=`basename $i`
+ RES2="$RES2..\\src\\lang\\$i.txt"
+ done
+ RES2="$RES2"
+ # Windows Folder sort and Linux Folder sort are slightly different.
+ # By fiddling with the extension and sorting it on Linux, they are the same.
+ for i in `ls $1 | sed s~\\\.~000~g | sort | sed s~000~.~g`
+ do
+ i=`basename $i`
+ RES="$RES
+#2
+#2 Generating "$i" baseset metadata file
+#2 cscript //nologo ..\\media\\baseset\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\src\\lang ..\\bin\\baseset\\orig_extra.grf
+#2 \$(Langs);..\\bin\\baseset\\orig_extra.grf;%(AdditionalInputs)
+#2 ..\\bin\\baseset\\"$i";%(Outputs)
+#2
+#3
+#3 Baseset Metadata
+#3 "
+ done
+
+ eval "$3=\"\$RES\$RES2\""
+}
+
generate() {
echo "Generating $2..."
if [ $# -eq 3 ]; then
@@ -287,28 +303,42 @@ load_main_data "$ROOT_DIR/source.list" openttd
openttdfiles=`echo "$openttd" | grep "^#4" | sed "s~#4~~g"`
openttdfilters=`echo "$openttd" | grep "^#3" | sed "s~#3~~g"`
openttdvcxproj=`echo "$openttd" | grep "^#2" | sed "s~#2~~g"`
-openttd=`echo "$openttd" | grep "^#1" | sed "s~#1~~g"`
load_lang_data "$ROOT_DIR/src/lang/*.txt" lang
langfiles=`echo "$lang" | grep "^#3" | sed "s~#3~~g"`
langvcxproj=`echo "$lang" | grep "^#2" | sed "s~#2~~g"`
-lang=`echo "$lang" | grep "^#1" | sed "s~#1~~g"`
load_settings_data "$ROOT_DIR/src/table/*.ini" settings
settingsfiles=`echo "$settings" | grep "^#4" | sed "s~#4~~g"`
settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"`
settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"`
-settings=`echo "$settings" | grep "^#1" | sed "s~#1~~g"`
+
+load_baseset_data "$ROOT_DIR/media/baseset/*.ob?" "$ROOT_DIR/src/lang/*.txt" baseset
+basesetfiles=`echo "$baseset" | grep "^#3" | sed "s-#3--g"`
+basesetvcxproj=`echo "$baseset" | grep "^#2" | sed "s~#2~~g"`
+basesetlangs=`echo "$baseset" | grep "^#4" | sed "s~#4~~g"`
generate "$openttdvcxproj" "openttd_vs140.vcxproj"
generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters"
generate "$openttdvcxproj" "openttd_vs141.vcxproj"
generate "$openttdfiles" "openttd_vs141.vcxproj.filters" "$openttdfilters"
+generate "$openttdvcxproj" "openttd_vs142.vcxproj"
+generate "$openttdfiles" "openttd_vs142.vcxproj.filters" "$openttdfilters"
generate "$langvcxproj" "langs_vs140.vcxproj"
generate "$langfiles" "langs_vs140.vcxproj.filters"
generate "$langvcxproj" "langs_vs141.vcxproj"
generate "$langfiles" "langs_vs141.vcxproj.filters"
+generate "$langvcxproj" "langs_vs142.vcxproj"
+generate "$langfiles" "langs_vs142.vcxproj.filters"
generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand"
generate "$settingsfiles" "settings_vs140.vcxproj.filters"
generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand"
generate "$settingsfiles" "settings_vs141.vcxproj.filters"
+generate "$settingsvcxproj" "settings_vs142.vcxproj" "$settingscommand"
+generate "$settingsfiles" "settings_vs142.vcxproj.filters"
+generate "$basesetvcxproj" "basesets_vs140.vcxproj" "$basesetlangs"
+generate "$basesetfiles" "basesets_vs140.vcxproj.filters"
+generate "$basesetvcxproj" "basesets_vs141.vcxproj" "$basesetlangs"
+generate "$basesetfiles" "basesets_vs141.vcxproj.filters"
+generate "$basesetvcxproj" "basesets_vs142.vcxproj" "$basesetlangs"
+generate "$basesetfiles" "basesets_vs142.vcxproj.filters"
diff --git a/projects/generate.vbs b/projects/generate.vbs
old mode 100755
new mode 100644
index 5439ed7c0d..e8cf13d03d
--- a/projects/generate.vbs
+++ b/projects/generate.vbs
@@ -10,6 +10,16 @@ Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
+' openttd_vs142.sln is for MSVC 2019
+' openttd_vs142.vcxproj is for MSVC 2019
+' openttd_vs142.vcxproj.filters is for MSVC 2019
+' langs_vs142.vcxproj is for MSVC 2019
+' strgen_vs142.vcxproj is for MSVC 2019
+' strgen_vs142.vcxproj.filters is for MSVC 2019
+' generate_vs142.vcxproj is for MSVC 2019
+' version_vs142.vcxproj is for MSVC 2019
+' basesets_vs142.vcxproj is for MSVC 2019
+
' openttd_vs141.sln is for MSVC 2017
' openttd_vs141.vcxproj is for MSVC 2017
' openttd_vs141.vcxproj.filters is for MSVC 2017
@@ -18,6 +28,7 @@ Set FSO = CreateObject("Scripting.FileSystemObject")
' strgen_vs141.vcxproj.filters is for MSVC 2017
' generate_vs141.vcxproj is for MSVC 2017
' version_vs141.vcxproj is for MSVC 2017
+' basesets_vs141.vcxproj is for MSVC 2017
' openttd_vs140.sln is for MSVC 2015
' openttd_vs140.vcxproj is for MSVC 2015
@@ -27,6 +38,7 @@ Set FSO = CreateObject("Scripting.FileSystemObject")
' strgen_vs140.vcxproj.filters is for MSVC 2015
' generate_vs140.vcxproj is for MSVC 2015
' version_vs140.vcxproj is for MSVC 2015
+' basesets_vs140.vcxproj is for MSVC 2015
Sub safety_check(filename)
Dim file, line, regexp, list
@@ -140,9 +152,8 @@ Sub headers_check(filename, dir)
End If
End Sub
-Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files)
- Dim res, file, line, deep, skip, first_filter, first_file, filter, cltype, index
- res = ""
+Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files)
+ Dim file, line, deep, skip, first_filter, first_file, filter, cltype, index
index = 0
' Read the source.list and process it
Set file = FSO.OpenTextFile(filename, 1, 0, 0)
@@ -176,16 +187,11 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files)
if deep = skip Then
line = Replace(line, "# ", "")
if first_filter <> 0 Then
- res = res & " " & vbCrLf
filters = filters & vbCrLf
Else
first_filter = 1
End If
filter = line
- res = res & _
- " " & vbCrLf
filters = filters & _
" " & vbCrLf & _
" {c76ff9f1-1e62-46d8-8d55-" & String(12 - Len(CStr(index)), "0") & index & "}" & vbCrLf & _
@@ -201,11 +207,6 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files)
Else
first_file = 1
End If
- res = res & _
- " " & vbCrLf & _
- " " & vbCrLf
Select Case Split(Line, ".")(1)
Case "cpp"
cltype = "ClCompile"
@@ -223,42 +224,22 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files)
End Select
End If
Wend
- res = res & " "
file.Close()
- load_main_data = res
-End Function
+End Sub
-Function load_lang_data(dir, ByRef vcxproj, ByRef files)
- Dim res, folder, file, first_time
- res = ""
+Sub load_lang_data(dir, ByRef vcxproj, ByRef files)
+ Dim folder, file, first_time
Set folder = FSO.GetFolder(dir)
For Each file In folder.Files
file = FSO.GetFileName(file)
If file <> "english.txt" And FSO.GetExtensionName(file) = "txt" Then
file = Left(file, Len(file) - 4)
If first_time <> 0 Then
- res = res & vbCrLf
vcxproj = vcxproj & vbCrLf
files = files & vbCrLf
Else
first_time = 1
End If
- res = res & _
- " " & vbCrLf & _
- " " & vbCrLf & _
- " " & vbCrLf & _
- " " & vbCrLf & _
- " "
vcxproj = vcxproj & _
" " & vbCrLf & _
" Generating " & file & " language file" & vbCrLf & _
@@ -272,29 +253,21 @@ Function load_lang_data(dir, ByRef vcxproj, ByRef files)
" "
End If
Next
- load_lang_data = res
-End Function
+End Sub
-Function load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files)
- Dim res, folder, file, first_time
- res = ""
+Sub load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files)
+ Dim folder, file, first_time
command = "..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble"
Set folder = FSO.GetFolder(dir)
For Each file In folder.Files
file = FSO.GetFileName(file)
If FSO.GetExtensionName(file) = "ini" Then
if first_time <> 0 Then
- res = res & vbCrLf
vcxproj = vcxproj & vbCrLf
files = files & vbCrLf
Else
first_time = 1
End If
- res = res & _
- " " & vbCrLf & _
- " "
vcxproj = vcxproj & _
" "
command = command & " ..\src\table\" & file
@@ -304,8 +277,49 @@ Function load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files)
" "
End If
Next
- load_settings_data = res
-End Function
+End Sub
+
+Sub load_baseset_data(dir, langdir, ByRef vcxproj, ByRef files, ByRef langs)
+ Dim folder, file, ext, first_time
+ Set folder = FSO.GetFolder(langdir)
+ langs = " "
+ For Each file In folder.Files
+ If first_time <> 0 Then
+ langs = langs & ";"
+ Else
+ first_time = 1
+ End If
+ file = FSO.GetFileName(file)
+ ext = FSO.GetExtensionName(file)
+ langs = langs & "..\src\lang\" & file
+ Next
+ langs = langs & ""
+ first_time = 0
+ Set folder = FSO.GetFolder(dir)
+ For Each file In folder.Files
+ file = FSO.GetFileName(file)
+ ext = FSO.GetExtensionName(file)
+ If ext = "obm" Or ext = "obg" Or ext = "obs" Then
+ If first_time <> 0 Then
+ vcxproj = vcxproj & vbCrLf
+ files = files & vbCrLf
+ Else
+ first_time = 1
+ End If
+ vcxproj = vcxproj & _
+ " " & vbCrLf & _
+ " Generating " & file & " baseset metadata file" & vbCrLf & _
+ " cscript //nologo ..\media\baseset\translations.vbs " & Chr(34) & "%(FullPath)" & Chr(34) & " " & Chr(34) & "$(OutputPath)" & file & Chr(34) & " ..\src\lang ..\bin\baseset\orig_extra.grf" & vbCrLf & _
+ " $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)" & vbCrLf & _
+ " ..\bin\baseset\" & file & ";%(Outputs)" & vbCrLf & _
+ " "
+ files = files & _
+ " " & vbCrLf & _
+ " Baseset Metadata" & vbCrLf & _
+ " "
+ End If
+ Next
+End Sub
Sub generate(data, dest, data2)
Dim srcfile, destfile, line
@@ -358,23 +372,38 @@ End If
safety_check ROOT_DIR & "/source.list"
headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed for DoFiles
-Dim openttd, openttdvcxproj, openttdfilters, openttdfiles
-openttd = load_main_data(ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles)
+Dim openttdvcxproj, openttdfilters, openttdfiles
+load_main_data ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles
generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null
generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters
generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null
generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", openttdfilters
+generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs142.vcxproj", Null
+generate openttdfiles, ROOT_DIR & "/projects/openttd_vs142.vcxproj.filters", openttdfilters
-Dim lang, langvcxproj, langfiles
-lang = load_lang_data(ROOT_DIR & "/src/lang", langvcxproj, langfiles)
+Dim langvcxproj, langfiles
+load_lang_data ROOT_DIR & "/src/lang", langvcxproj, langfiles
generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null
generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null
generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null
generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null
+generate langvcxproj, ROOT_DIR & "/projects/langs_vs142.vcxproj", Null
+generate langfiles, ROOT_DIR & "/projects/langs_vs142.vcxproj.filters", Null
-Dim settings, settingsvcxproj, settingscommand, settingsfiles
-settings = load_settings_data(ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles)
+Dim settingsvcxproj, settingscommand, settingsfiles
+load_settings_data ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles
generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", settingscommand
generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null
generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand
generate settingsfiles, ROOT_DIR & "/projects/settings_vs141.vcxproj.filters", Null
+generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs142.vcxproj", settingscommand
+generate settingsfiles, ROOT_DIR & "/projects/settings_vs142.vcxproj.filters", Null
+
+Dim basesetvcxproj, basesetfiles, basesetlangs
+load_baseset_data ROOT_DIR & "/media/baseset", ROOT_DIR & "/src/lang", basesetvcxproj, basesetfiles, basesetlangs
+generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetlangs
+generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null
+generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs
+generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null
+generate settingsvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", settingscommand
+generate settingsfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null
diff --git a/projects/generate_vs140.vcxproj b/projects/generate_vs140.vcxproj
index e505315153..b17142050b 100644
--- a/projects/generate_vs140.vcxproj
+++ b/projects/generate_vs140.vcxproj
@@ -31,7 +31,6 @@
Running %27generate.vbs%27 ...
cscript "$(ProjectDir)generate.vbs"
%(FullPath);%(AdditionalInputs)
- $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs)
diff --git a/projects/generate_vs141.vcxproj b/projects/generate_vs141.vcxproj
index 2db93cf097..d7a877db17 100644
--- a/projects/generate_vs141.vcxproj
+++ b/projects/generate_vs141.vcxproj
@@ -31,7 +31,6 @@
Running %27generate.vbs%27 ...
cscript "$(ProjectDir)generate.vbs"
%(FullPath);%(AdditionalInputs)
- $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs)
diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj
new file mode 100644
index 0000000000..3e55d7a1d4
--- /dev/null
+++ b/projects/generate_vs142.vcxproj
@@ -0,0 +1,40 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ generate
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}
+ generate
+ 8.1
+
+
+
+ Utility
+ v142
+
+
+
+
+
+
+
+
+
+
+
+
+ Document
+ Running %27generate.vbs%27 ...
+ cscript "$(ProjectDir)generate.vbs"
+ %(FullPath);%(AdditionalInputs)
+
+
+
+
+
+
diff --git a/projects/langs_vs142.vcxproj b/projects/langs_vs142.vcxproj
new file mode 100644
index 0000000000..0a11156bb0
--- /dev/null
+++ b/projects/langs_vs142.vcxproj
@@ -0,0 +1,390 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ langs
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}
+ langs
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v142
+
+
+
+
+
+
+
+
+
+ ..\bin\lang\
+ ..\objs\langs\
+
+
+
+ Generating strings.h
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table
+
+
+ ./langs.tlb
+
+
+
+
+
+
+ Generating english language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english.lng;%(Outputs)
+
+
+ Generating afrikaans language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\afrikaans.lng;%(Outputs)
+
+
+ Generating arabic_egypt language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\arabic_egypt.lng;%(Outputs)
+
+
+ Generating basque language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\basque.lng;%(Outputs)
+
+
+ Generating belarusian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\belarusian.lng;%(Outputs)
+
+
+ Generating brazilian_portuguese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\brazilian_portuguese.lng;%(Outputs)
+
+
+ Generating bulgarian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\bulgarian.lng;%(Outputs)
+
+
+ Generating catalan language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\catalan.lng;%(Outputs)
+
+
+ Generating croatian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\croatian.lng;%(Outputs)
+
+
+ Generating czech language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\czech.lng;%(Outputs)
+
+
+ Generating danish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\danish.lng;%(Outputs)
+
+
+ Generating dutch language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\dutch.lng;%(Outputs)
+
+
+ Generating english_AU language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english_AU.lng;%(Outputs)
+
+
+ Generating english_US language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english_US.lng;%(Outputs)
+
+
+ Generating esperanto language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\esperanto.lng;%(Outputs)
+
+
+ Generating estonian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\estonian.lng;%(Outputs)
+
+
+ Generating faroese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\faroese.lng;%(Outputs)
+
+
+ Generating finnish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\finnish.lng;%(Outputs)
+
+
+ Generating french language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\french.lng;%(Outputs)
+
+
+ Generating gaelic language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\gaelic.lng;%(Outputs)
+
+
+ Generating galician language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\galician.lng;%(Outputs)
+
+
+ Generating german language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\german.lng;%(Outputs)
+
+
+ Generating greek language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\greek.lng;%(Outputs)
+
+
+ Generating hebrew language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\hebrew.lng;%(Outputs)
+
+
+ Generating hungarian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\hungarian.lng;%(Outputs)
+
+
+ Generating icelandic language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\icelandic.lng;%(Outputs)
+
+
+ Generating indonesian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\indonesian.lng;%(Outputs)
+
+
+ Generating irish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\irish.lng;%(Outputs)
+
+
+ Generating italian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\italian.lng;%(Outputs)
+
+
+ Generating japanese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\japanese.lng;%(Outputs)
+
+
+ Generating korean language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\korean.lng;%(Outputs)
+
+
+ Generating latin language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\latin.lng;%(Outputs)
+
+
+ Generating latvian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\latvian.lng;%(Outputs)
+
+
+ Generating lithuanian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\lithuanian.lng;%(Outputs)
+
+
+ Generating luxembourgish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\luxembourgish.lng;%(Outputs)
+
+
+ Generating malay language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\malay.lng;%(Outputs)
+
+
+ Generating norwegian_bokmal language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\norwegian_bokmal.lng;%(Outputs)
+
+
+ Generating norwegian_nynorsk language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\norwegian_nynorsk.lng;%(Outputs)
+
+
+ Generating polish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\polish.lng;%(Outputs)
+
+
+ Generating portuguese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\portuguese.lng;%(Outputs)
+
+
+ Generating romanian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\romanian.lng;%(Outputs)
+
+
+ Generating russian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\russian.lng;%(Outputs)
+
+
+ Generating serbian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\serbian.lng;%(Outputs)
+
+
+ Generating simplified_chinese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\simplified_chinese.lng;%(Outputs)
+
+
+ Generating slovak language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\slovak.lng;%(Outputs)
+
+
+ Generating slovenian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\slovenian.lng;%(Outputs)
+
+
+ Generating spanish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\spanish.lng;%(Outputs)
+
+
+ Generating spanish_MX language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\spanish_MX.lng;%(Outputs)
+
+
+ Generating swedish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\swedish.lng;%(Outputs)
+
+
+ Generating tamil language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\tamil.lng;%(Outputs)
+
+
+ Generating thai language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\thai.lng;%(Outputs)
+
+
+ Generating traditional_chinese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\traditional_chinese.lng;%(Outputs)
+
+
+ Generating turkish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\turkish.lng;%(Outputs)
+
+
+ Generating ukrainian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\ukrainian.lng;%(Outputs)
+
+
+ Generating vietnamese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\vietnamese.lng;%(Outputs)
+
+
+ Generating welsh language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\welsh.lng;%(Outputs)
+
+
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+
+
+
+
diff --git a/projects/langs_vs142.vcxproj.filters b/projects/langs_vs142.vcxproj.filters
new file mode 100644
index 0000000000..bf5257ec82
--- /dev/null
+++ b/projects/langs_vs142.vcxproj.filters
@@ -0,0 +1,176 @@
+
+
+
+
+ {2a164580-9033-4a01-974b-b21da507efda}
+
+
+
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+
diff --git a/projects/langs_vs142.vcxproj.filters.in b/projects/langs_vs142.vcxproj.filters.in
new file mode 100644
index 0000000000..0d60ee9595
--- /dev/null
+++ b/projects/langs_vs142.vcxproj.filters.in
@@ -0,0 +1,12 @@
+
+
+
+
+ {2a164580-9033-4a01-974b-b21da507efda}
+
+
+
+
+!!FILES!!
+
+
diff --git a/projects/langs_vs142.vcxproj.in b/projects/langs_vs142.vcxproj.in
new file mode 100644
index 0000000000..f24c7cad78
--- /dev/null
+++ b/projects/langs_vs142.vcxproj.in
@@ -0,0 +1,61 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ langs
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}
+ langs
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v142
+
+
+
+
+
+
+
+
+
+ ..\bin\lang\
+ ..\objs\langs\
+
+
+
+ Generating strings.h
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table
+
+
+ ./langs.tlb
+
+
+
+
+
+
+ Generating english language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english.lng;%(Outputs)
+
+!!FILES!!
+
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+
+
+
+
diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln
index 32f3033fb2..e2b7632f7e 100644
--- a/projects/openttd_vs140.sln
+++ b/projects/openttd_vs140.sln
@@ -4,10 +4,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs140.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}"
- ProjectSection(ProjectDependencies) = postProject
- {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35}
- {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
- EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs140.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}"
EndProject
@@ -18,14 +14,13 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs140.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs140.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}"
- ProjectSection(ProjectDependencies) = postProject
- {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
- EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs140.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs140.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs140.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -90,6 +85,14 @@ Global
{4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32
{4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32
{4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj
index a1bbbd18b8..44d8cd4352 100644
--- a/projects/openttd_vs140.vcxproj
+++ b/projects/openttd_vs140.vcxproj
@@ -1204,8 +1204,8 @@
-
+
@@ -1348,6 +1348,14 @@
{0f066b23-18df-4284-8265-f4a5e7e3b966}
false
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+ {0817f629-589e-4a3b-b81a-8647bc571e35}
+ false
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
@@ -1356,6 +1364,10 @@
{1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
false
+
+ {e12e77ca-c0f1-4ada-943f-4929274249d3}
+ false
+
diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters
index 1e0cb8cadb..65919e69dc 100644
--- a/projects/openttd_vs140.vcxproj.filters
+++ b/projects/openttd_vs140.vcxproj.filters
@@ -2700,12 +2700,12 @@
Blitters
-
- Blitters
-
Blitters
+
+ Blitters
+
Blitters
diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in
index 75aac94bab..951f8b6048 100644
--- a/projects/openttd_vs140.vcxproj.in
+++ b/projects/openttd_vs140.vcxproj.in
@@ -349,6 +349,14 @@
{0f066b23-18df-4284-8265-f4a5e7e3b966}
false
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+ {0817f629-589e-4a3b-b81a-8647bc571e35}
+ false
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
@@ -357,6 +365,10 @@
{1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
false
+
+ {e12e77ca-c0f1-4ada-943f-4929274249d3}
+ false
+
diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln
index 86f2685cd9..6e328ba764 100644
--- a/projects/openttd_vs141.sln
+++ b/projects/openttd_vs141.sln
@@ -4,10 +4,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs141.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}"
- ProjectSection(ProjectDependencies) = postProject
- {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35}
- {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
- EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs141.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}"
EndProject
@@ -18,14 +14,13 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs141.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}"
- ProjectSection(ProjectDependencies) = postProject
- {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
- EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs141.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -90,6 +85,14 @@ Global
{4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32
{4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32
{4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj
index 7283030176..9c06bf94cb 100644
--- a/projects/openttd_vs141.vcxproj
+++ b/projects/openttd_vs141.vcxproj
@@ -1204,8 +1204,8 @@
-
+
@@ -1348,6 +1348,14 @@
{0f066b23-18df-4284-8265-f4a5e7e3b966}
false
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+ {0817f629-589e-4a3b-b81a-8647bc571e35}
+ false
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
@@ -1356,6 +1364,10 @@
{1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
false
+
+ {e12e77ca-c0f1-4ada-943f-4929274249d3}
+ false
+
diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters
index 1e0cb8cadb..65919e69dc 100644
--- a/projects/openttd_vs141.vcxproj.filters
+++ b/projects/openttd_vs141.vcxproj.filters
@@ -2700,12 +2700,12 @@
Blitters
-
- Blitters
-
Blitters
+
+ Blitters
+
Blitters
diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in
index a054c2580e..d28f500f1c 100644
--- a/projects/openttd_vs141.vcxproj.in
+++ b/projects/openttd_vs141.vcxproj.in
@@ -349,6 +349,14 @@
{0f066b23-18df-4284-8265-f4a5e7e3b966}
false
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+ {0817f629-589e-4a3b-b81a-8647bc571e35}
+ false
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
@@ -357,6 +365,10 @@
{1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
false
+
+ {e12e77ca-c0f1-4ada-943f-4929274249d3}
+ false
+
diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln
new file mode 100644
index 0000000000..15cd430168
--- /dev/null
+++ b/projects/openttd_vs142.sln
@@ -0,0 +1,105 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28516.95
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs142.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs142.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs142.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs142.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs142.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs142.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs142.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs142.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32
+ {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32
+ {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32
+ {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32
+ {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1DE4D2BD-DBC4-4304-907E-34994EEAA4C1}
+ EndGlobalSection
+ GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+ DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+ EndGlobalSection
+EndGlobal
diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj
new file mode 100644
index 0000000000..34f7c5f280
--- /dev/null
+++ b/projects/openttd_vs142.vcxproj
@@ -0,0 +1,1370 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ openttd
+ {668328A0-B40E-4CDB-BD72-D0064424414A}
+ openttd
+ x86-windows-static
+ x64-windows-static
+
+
+
+ Application
+ false
+ Unicode
+ v142
+
+
+ Application
+ false
+ Unicode
+ true
+ v142
+
+
+ Application
+ false
+ Unicode
+ v142
+
+
+ Application
+ false
+ Unicode
+ true
+ v142
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(ProjectDir)..\bin
+
+
+
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ 4Bytes
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ false
+
+
+ MachineX86
+ true
+ 5.01
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ false
+
+
+ MachineX86
+ 5.01
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+ X64
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ Default
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ MachineX64
+ true
+ 5.02
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+ X64
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+
+
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ Cdecl
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ MachineX64
+ 5.02
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {0f066b23-18df-4284-8265-f4a5e7e3b966}
+ false
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+ {0817f629-589e-4a3b-b81a-8647bc571e35}
+ false
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
+ false
+
+
+ {e12e77ca-c0f1-4ada-943f-4929274249d3}
+ false
+
+
+
+
diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters
new file mode 100644
index 0000000000..e93c94f1f7
--- /dev/null
+++ b/projects/openttd_vs142.vcxproj.filters
@@ -0,0 +1,3101 @@
+
+
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000000}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000001}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000002}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000003}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000004}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000005}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000006}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000007}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000008}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000009}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000010}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000011}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000012}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000013}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000014}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000015}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000016}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000017}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000018}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000019}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000020}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000021}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000022}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000023}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000024}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000025}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000026}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000027}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000028}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000029}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000030}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000031}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000032}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ MD5
+
+
+ MD5
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI API
+
+
+ Game API
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Drivers
+
+
+ Drivers
+
+
+ Drivers
+
+
+ Sprite loaders
+
+
+ Sprite loaders
+
+
+ Sprite loaders
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ Video
+
+
+ Video
+
+
+ Video
+
+
+ Video
+
+
+ Music
+
+
+ Music
+
+
+ Music
+
+
+ Music
+
+
+ Sound
+
+
+ Sound
+
+
+ Sound
+
+
+ Sound
+
+
+ Windows files
+
+
+ Windows files
+
+
+ Windows files
+
+
+ Windows files
+
+
+ Threading
+
+
+ Threading
+
+
+
+
+
+
+
diff --git a/projects/openttd_vs142.vcxproj.filters.in b/projects/openttd_vs142.vcxproj.filters.in
new file mode 100644
index 0000000000..126bd61459
--- /dev/null
+++ b/projects/openttd_vs142.vcxproj.filters.in
@@ -0,0 +1,13 @@
+
+
+
+!!FILTERS!!
+
+
+!!FILES!!
+
+
+
+
+
+
diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in
new file mode 100644
index 0000000000..91689e8bde
--- /dev/null
+++ b/projects/openttd_vs142.vcxproj.in
@@ -0,0 +1,374 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ openttd
+ {668328A0-B40E-4CDB-BD72-D0064424414A}
+ openttd
+ x86-windows-static
+ x64-windows-static
+
+
+
+ Application
+ false
+ Unicode
+ v142
+
+
+ Application
+ false
+ Unicode
+ true
+ v142
+
+
+ Application
+ false
+ Unicode
+ v142
+
+
+ Application
+ false
+ Unicode
+ true
+ v142
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(ProjectDir)..\bin
+
+
+
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ 4Bytes
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ false
+
+
+ MachineX86
+ true
+ 5.01
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ false
+
+
+ MachineX86
+ 5.01
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+ X64
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ Default
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ MachineX64
+ true
+ 5.02
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+
+ X64
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+
+
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ Cdecl
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ MachineX64
+ 5.02
+
+
+ os_versions.manifest
+ PerMonitorHighDPIAware
+
+
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)"
+
+
+
+!!FILES!!
+
+
+
+
+
+
+
+ {0f066b23-18df-4284-8265-f4a5e7e3b966}
+ false
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+ {0817f629-589e-4a3b-b81a-8647bc571e35}
+ false
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
+ false
+
+
+ {e12e77ca-c0f1-4ada-943f-4929274249d3}
+ false
+
+
+
+
diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest
index 52ed17bcb9..c7905ee709 100644
--- a/projects/os_versions.manifest
+++ b/projects/os_versions.manifest
@@ -12,6 +12,6 @@
-
+
diff --git a/projects/regression_vs142.vcxproj b/projects/regression_vs142.vcxproj
new file mode 100644
index 0000000000..3ddcc6f37a
--- /dev/null
+++ b/projects/regression_vs142.vcxproj
@@ -0,0 +1,41 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ {4712B013-437D-42CE-947F-DEBABA15261F}
+ regression
+ regression
+
+
+
+ Makefile
+ v142
+
+
+
+
+
+
+
+
+
+
+
+ call regression.bat
+ call regression.bat
+ del ..\bin\tmp.regression
+
+
+
+ {668328a0-b40e-4cdb-bd72-d0064424414a}
+
+
+
+
+
+
diff --git a/projects/settings_vs140.vcxproj b/projects/settings_vs140.vcxproj
index 4fe07dbd64..9952df47bb 100644
--- a/projects/settings_vs140.vcxproj
+++ b/projects/settings_vs140.vcxproj
@@ -48,6 +48,12 @@
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
diff --git a/projects/settings_vs140.vcxproj.in b/projects/settings_vs140.vcxproj.in
index 71ea738dcf..9bb0cc7f0b 100644
--- a/projects/settings_vs140.vcxproj.in
+++ b/projects/settings_vs140.vcxproj.in
@@ -42,6 +42,12 @@
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj
index ed6f5bab18..9c20f1407e 100644
--- a/projects/settings_vs141.vcxproj
+++ b/projects/settings_vs141.vcxproj
@@ -48,6 +48,12 @@
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in
index e4a60227cb..23e044cc17 100644
--- a/projects/settings_vs141.vcxproj.in
+++ b/projects/settings_vs141.vcxproj.in
@@ -42,6 +42,12 @@
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj
new file mode 100644
index 0000000000..a2dda134b5
--- /dev/null
+++ b/projects/settings_vs142.vcxproj
@@ -0,0 +1,60 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ settings
+ {0817F629-589E-4A3B-B81A-8647BC571E35}
+ settings
+
+
+
+ Makefile
+ v142
+
+
+
+
+
+
+
+
+
+..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini
+
+
+
+ ..\objs\settings\table\
+ ..\objs\settings\table\
+ $(SettingsCommandLine)
+ $(SettingsCommandLine)
+ del ..\objs\settings\table\settings.h
+ ..\objs\settings\table\settings.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+
+
+
+
diff --git a/projects/settings_vs142.vcxproj.filters b/projects/settings_vs142.vcxproj.filters
new file mode 100644
index 0000000000..8caf9fa0a6
--- /dev/null
+++ b/projects/settings_vs142.vcxproj.filters
@@ -0,0 +1,35 @@
+
+
+
+
+ {21deca6c-8df4-4f34-9dad-17d7781cd5a0}
+
+
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+
+
+
+
+
diff --git a/projects/settings_vs142.vcxproj.filters.in b/projects/settings_vs142.vcxproj.filters.in
new file mode 100644
index 0000000000..08f90670d2
--- /dev/null
+++ b/projects/settings_vs142.vcxproj.filters.in
@@ -0,0 +1,15 @@
+
+
+
+
+ {21deca6c-8df4-4f34-9dad-17d7781cd5a0}
+
+
+
+!!FILES!!
+
+
+
+
+
+
diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in
new file mode 100644
index 0000000000..3e49b7ca02
--- /dev/null
+++ b/projects/settings_vs142.vcxproj.in
@@ -0,0 +1,54 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ settings
+ {0817F629-589E-4A3B-B81A-8647BC571E35}
+ settings
+
+
+
+ Makefile
+ v142
+
+
+
+
+
+
+
+
+
+!!FILTERS!!
+
+
+
+ ..\objs\settings\table\
+ ..\objs\settings\table\
+ $(SettingsCommandLine)
+ $(SettingsCommandLine)
+ del ..\objs\settings\table\settings.h
+ ..\objs\settings\table\settings.h
+
+
+!!FILES!!
+
+
+
+
+
+
+
+ {e9548de9-f089-49b7-93a6-30be2cc311c7}
+ false
+
+
+
+
+
+
diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj
new file mode 100644
index 0000000000..ca0418c15c
--- /dev/null
+++ b/projects/settingsgen_vs142.vcxproj
@@ -0,0 +1,84 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ settingsgen
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
+ settings
+ 8.1
+
+
+
+ Application
+ MultiByte
+ v142
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.30319.1
+ ..\objs\settings\
+ ..\objs\settings\
+ settings_gen
+
+
+
+
+
+
+
+ %(Inputs)
+
+
+ MinSpace
+ Size
+ SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ All
+ $(IntDir)$(TargetName).pdb
+ Level3
+ true
+ ProgramDatabase
+ MultiThreadedDebug
+
+
+ $(OutDir)settings_gen.exe
+ true
+ false
+
+
+ Console
+ 5.01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/settingsgen_vs142.vcxproj.filters b/projects/settingsgen_vs142.vcxproj.filters
new file mode 100644
index 0000000000..c8afe0c8ed
--- /dev/null
+++ b/projects/settingsgen_vs142.vcxproj.filters
@@ -0,0 +1,32 @@
+
+
+
+
+ {a4678737-b3b3-4be5-9db1-fa6ccd164c59}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj
new file mode 100644
index 0000000000..5329d68daa
--- /dev/null
+++ b/projects/strgen_vs142.vcxproj
@@ -0,0 +1,96 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ strgen
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}
+ strgen
+ 8.1
+
+
+
+ Application
+ false
+ MultiByte
+ v142
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\strgen\
+ $(SolutionDir)..\objs\strgen\
+ false
+ AllRules.ruleset
+
+
+
+
+
+ .\Debug/strgen.tlb
+
+
+
+
+ /MP %(AdditionalOptions)
+ MinSpace
+ Size
+ STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ Default
+ MultiThreadedDebug
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ true
+ true
+ ProgramDatabase
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x041d
+
+
+ true
+ true
+ $(IntDir)strgen.pdb
+ Console
+ false
+
+
+ MachineX86
+ 5.01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/strgen_vs142.vcxproj.filters b/projects/strgen_vs142.vcxproj.filters
new file mode 100644
index 0000000000..58864ee691
--- /dev/null
+++ b/projects/strgen_vs142.vcxproj.filters
@@ -0,0 +1,35 @@
+
+
+
+
+ {5894294c-d4dc-41f0-be31-e56cff4e0405}
+ cpp;c;cxx;rc;def;r;odl;idl;hpj;bat
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/version_vs142.vcxproj b/projects/version_vs142.vcxproj
new file mode 100644
index 0000000000..31971e35c9
--- /dev/null
+++ b/projects/version_vs142.vcxproj
@@ -0,0 +1,42 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ version
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}
+ version
+
+
+
+ Makefile
+ MultiByte
+ v142
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\version\
+ $(SolutionDir)..\objs\version\
+ cscript "$(ProjectDir)/determineversion.vbs"
+ cscript "$(ProjectDir)/determineversion.vbs"
+ ..\src\rev.cpp
+ del ..\src\rev.cpp
+
+
+
+
+
+
+
+
+
diff --git a/source.list b/source.list
index bac2db508a..de1504a9c3 100644
--- a/source.list
+++ b/source.list
@@ -951,8 +951,8 @@ blitter/8bpp_optimized.hpp
blitter/8bpp_simple.cpp
blitter/8bpp_simple.hpp
#end
-blitter/base.cpp
blitter/base.hpp
+blitter/common.hpp
blitter/factory.hpp
blitter/null.cpp
blitter/null.hpp
diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp
index 065367d03b..1b5b6c07da 100644
--- a/src/ai/ai.hpp
+++ b/src/ai/ai.hpp
@@ -32,7 +32,7 @@ public:
START_NEXT_EASY = DAYS_IN_YEAR * 2,
START_NEXT_MEDIUM = DAYS_IN_YEAR,
START_NEXT_HARD = DAYS_IN_YEAR / 2,
- START_NEXT_MIN = 1,
+ START_NEXT_MIN = 0,
START_NEXT_MAX = 3600,
START_NEXT_DEVIATION = 60,
};
diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp
index f920d31014..20e913c2e9 100644
--- a/src/ai/ai_config.cpp
+++ b/src/ai/ai_config.cpp
@@ -118,3 +118,14 @@ void AIConfig::SetSetting(const char *name, int value)
ScriptConfig::SetSetting(name, value);
}
+
+void AIConfig::AddRandomDeviation()
+{
+ int start_date = this->GetSetting("start_date");
+
+ ScriptConfig::AddRandomDeviation();
+
+ /* start_date = 0 is a special case, where random deviation does not occur.
+ * If start_date was not already 0, then a minimum value of 1 must apply. */
+ this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0);
+}
diff --git a/src/ai/ai_config.hpp b/src/ai/ai_config.hpp
index b02935902c..600ae1af93 100644
--- a/src/ai/ai_config.hpp
+++ b/src/ai/ai_config.hpp
@@ -34,6 +34,7 @@ public:
/* virtual */ int GetSetting(const char *name) const;
/* virtual */ void SetSetting(const char *name, int value);
+ /* virtual */ void AddRandomDeviation();
/**
* When ever the AI Scanner is reloaded, all infos become invalid. This
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp
index 4b248f5efc..69476856ce 100644
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -378,7 +378,7 @@ struct AISettingsWindow : public Window {
for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) {
const ScriptConfigItem &config_item = **it;
int current_value = config->GetSetting((config_item).name);
- bool editable = _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0;
+ bool editable = this->IsEditableItem(config_item);
StringID str;
TextColour colour;
@@ -441,7 +441,7 @@ struct AISettingsWindow : public Window {
VisibleSettingsList::const_iterator it = this->visible_settings.begin();
for (int i = 0; i < num; i++) it++;
const ScriptConfigItem config_item = **it;
- if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (config_item.flags & SCRIPTCONFIG_INGAME) == 0) return;
+ if (!this->IsEditableItem(config_item)) return;
if (this->clicked_row != num) {
DeleteChildWindows(WC_QUERY_STRING);
@@ -586,6 +586,12 @@ struct AISettingsWindow : public Window {
{
this->RebuildVisibleSettings();
}
+
+private:
+ bool IsEditableItem(const ScriptConfigItem config_item) const
+ {
+ return _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0;
+ }
};
/** Widgets for the AI settings window. */
@@ -654,7 +660,7 @@ struct ScriptTextfileWindow : public TextfileWindow {
*/
void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot)
{
- DeleteWindowByClass(WC_TEXTFILE);
+ DeleteWindowById(WC_TEXTFILE, file_type);
new ScriptTextfileWindow(file_type, slot);
}
@@ -869,7 +875,6 @@ struct AIConfigWindow : public Window {
new_value = min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1);
}
IConsoleSetSetting("difficulty.max_no_competitors", new_value);
- this->InvalidateData();
break;
}
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index b495a1dff5..d6d99ae242 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -37,6 +37,7 @@
#include "core/backup_type.hpp"
#include "zoom_func.h"
#include "disaster_vehicle.h"
+#include "newgrf_airporttiles.h"
#include "framerate_type.h"
#include "table/strings.h"
@@ -127,16 +128,15 @@ static StationID FindNearestHangar(const Aircraft *v)
const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type);
FOR_ALL_STATIONS(st) {
- if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue;
+ if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT) || !st->airport.HasHangar()) continue;
const AirportFTAClass *afc = st->airport.GetFTA();
- if (!st->airport.HasHangar() || (
- /* don't crash the plane if we know it can't land at the airport */
- (afc->flags & AirportFTAClass::SHORT_STRIP) &&
- (avi->subtype & AIR_FAST) &&
- !_cheats.no_jetcrash.value)) {
- continue;
- }
+
+ /* don't crash the plane if we know it can't land at the airport */
+ if ((afc->flags & AirportFTAClass::SHORT_STRIP) && (avi->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) continue;
+
+ /* the plane won't land at any helicopter station */
+ if (!(afc->flags & AirportFTAClass::AIRPLANES) && (avi->subtype & AIR_CTOL)) continue;
/* v->tile can't be used here, when aircraft is flying v->tile is set to 0 */
uint distance = DistanceSquare(vtile, st->airport.tile);
@@ -379,7 +379,7 @@ bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination,
{
const Station *st = GetTargetAirportIfValid(this);
/* If the station is not a valid airport or if it has no hangars */
- if (st == NULL || !st->airport.HasHangar()) {
+ if (st == NULL || !CanVehicleUseStation(this, st) || !st->airport.HasHangar()) {
/* the aircraft has to search for a hangar on its own */
StationID station = FindNearestHangar(this);
@@ -1370,8 +1370,14 @@ static void AircraftEntersTerminal(Aircraft *v)
*/
static void AircraftLandAirplane(Aircraft *v)
{
+ Station *st = Station::Get(v->targetairport);
+
+ TileIndex vt = TileVirtXY(v->x_pos, v->y_pos);
+
v->UpdateDeltaXY();
+ AirportTileAnimationTrigger(st, vt, AAT_STATION_AIRPLANE_LAND);
+
if (!PlayVehicleSound(v, VSE_TOUCHDOWN)) {
SndPlayVehicleFx(SND_17_SKID_PLANE, v);
}
@@ -1539,7 +1545,7 @@ static void AircraftEventHandler_AtTerminal(Aircraft *v, const AirportFTAClass *
go_to_hangar = Station::Get(v->targetairport)->airport.HasHangar();
}
- if (go_to_hangar) {
+ if (go_to_hangar && Station::Get(v->targetairport)->airport.HasHangar()) {
v->state = HANGAR;
} else {
/* airplane goto state takeoff, helicopter to helitakeoff */
diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp
index 98ae22b00c..27b1fbd5b8 100644
--- a/src/blitter/32bpp_anim.cpp
+++ b/src/blitter/32bpp_anim.cpp
@@ -12,6 +12,7 @@
#include "../stdafx.h"
#include "../video/video_driver.hpp"
#include "32bpp_anim.hpp"
+#include "common.hpp"
#include "../table/sprites.h"
@@ -321,6 +322,24 @@ void Blitter_32bppAnim::SetPixel(void *video, int x, int y, uint8 colour)
this->anim_buf[this->ScreenToAnimOffset((uint32 *)video) + x + y * this->anim_buf_pitch] = colour | (DEFAULT_BRIGHTNESS << 8);
}
+void Blitter_32bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash)
+{
+ const Colour c = LookupColourInPalette(colour);
+
+ if (_screen_disable_anim) {
+ this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) {
+ *((Colour *)video + x + y * _screen.pitch) = c;
+ });
+ } else {
+ uint16 * const offset_anim_buf = this->anim_buf + this->ScreenToAnimOffset((uint32 *)video);
+ const uint16 anim_colour = colour | (DEFAULT_BRIGHTNESS << 8);
+ this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) {
+ *((Colour *)video + x + y * _screen.pitch) = c;
+ offset_anim_buf[x + y * this->anim_buf_pitch] = anim_colour;
+ });
+ }
+}
+
void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 colour)
{
if (_screen_disable_anim) {
diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp
index da33ec95bb..ecf6dcfca0 100644
--- a/src/blitter/32bpp_anim.hpp
+++ b/src/blitter/32bpp_anim.hpp
@@ -40,6 +40,7 @@ public:
/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
/* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal);
/* virtual */ void SetPixel(void *video, int x, int y, uint8 colour);
+ /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash);
/* virtual */ void DrawRect(void *video, int width, int height, uint8 colour);
/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
diff --git a/src/blitter/32bpp_base.cpp b/src/blitter/32bpp_base.cpp
index c396e45410..b2e66b0be1 100644
--- a/src/blitter/32bpp_base.cpp
+++ b/src/blitter/32bpp_base.cpp
@@ -11,6 +11,7 @@
#include "../stdafx.h"
#include "32bpp_base.hpp"
+#include "common.hpp"
#include "../safeguards.h"
@@ -24,6 +25,14 @@ void Blitter_32bppBase::SetPixel(void *video, int x, int y, uint8 colour)
*((Colour *)video + x + y * _screen.pitch) = LookupColourInPalette(colour);
}
+void Blitter_32bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash)
+{
+ const Colour c = LookupColourInPalette(colour);
+ this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
+ *((Colour *)video + x + y * _screen.pitch) = c;
+ });
+}
+
void Blitter_32bppBase::DrawRect(void *video, int width, int height, uint8 colour)
{
Colour colour32 = LookupColourInPalette(colour);
diff --git a/src/blitter/32bpp_base.hpp b/src/blitter/32bpp_base.hpp
index 9b76271704..697593da6a 100644
--- a/src/blitter/32bpp_base.hpp
+++ b/src/blitter/32bpp_base.hpp
@@ -23,6 +23,7 @@ public:
/* virtual */ uint8 GetScreenDepth() { return 32; }
/* virtual */ void *MoveTo(void *video, int x, int y);
/* virtual */ void SetPixel(void *video, int x, int y, uint8 colour);
+ /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash);
/* virtual */ void DrawRect(void *video, int width, int height, uint8 colour);
/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
diff --git a/src/blitter/8bpp_base.cpp b/src/blitter/8bpp_base.cpp
index eab6eaa0db..dccfda3d70 100644
--- a/src/blitter/8bpp_base.cpp
+++ b/src/blitter/8bpp_base.cpp
@@ -12,6 +12,7 @@
#include "../stdafx.h"
#include "../gfx_func.h"
#include "8bpp_base.hpp"
+#include "common.hpp"
#include "../safeguards.h"
@@ -35,6 +36,13 @@ void Blitter_8bppBase::SetPixel(void *video, int x, int y, uint8 colour)
*((uint8 *)video + x + y * _screen.pitch) = colour;
}
+void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash)
+{
+ this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
+ *((uint8 *)video + x + y * _screen.pitch) = colour;
+ });
+}
+
void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8 colour)
{
do {
diff --git a/src/blitter/8bpp_base.hpp b/src/blitter/8bpp_base.hpp
index 2dff784992..8f75dda5d3 100644
--- a/src/blitter/8bpp_base.hpp
+++ b/src/blitter/8bpp_base.hpp
@@ -21,6 +21,7 @@ public:
/* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal);
/* virtual */ void *MoveTo(void *video, int x, int y);
/* virtual */ void SetPixel(void *video, int x, int y, uint8 colour);
+ /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash);
/* virtual */ void DrawRect(void *video, int width, int height, uint8 colour);
/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp
index a9403b339d..388359441f 100644
--- a/src/blitter/base.hpp
+++ b/src/blitter/base.hpp
@@ -122,7 +122,7 @@ public:
* @param width Line width.
* @param dash Length of dashes for dashed lines. 0 means solid line.
*/
- virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash = 0);
+ virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash = 0) = 0;
/**
* Copy from a buffer to the screen.
@@ -203,6 +203,8 @@ public:
virtual void PostResize() { };
virtual ~Blitter() { }
+
+ template void DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, int screen_height, int width, int dash, SetPixelT set_pixel);
};
#endif /* BLITTER_BASE_HPP */
diff --git a/src/blitter/base.cpp b/src/blitter/common.hpp
similarity index 55%
rename from src/blitter/base.cpp
rename to src/blitter/common.hpp
index e83df2e714..3e4911d003 100644
--- a/src/blitter/base.cpp
+++ b/src/blitter/common.hpp
@@ -7,15 +7,18 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
*/
-/** @file base.cpp Implementation of the base for all blitters. */
+/** @file common.hpp Common functionality for all blitter implementations. */
+
+#ifndef BLITTER_COMMON_HPP
+#define BLITTER_COMMON_HPP
-#include "../stdafx.h"
#include "base.hpp"
#include "../core/math_func.hpp"
-#include "../safeguards.h"
+#include
-void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash)
+template
+void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, int screen_height, int width, int dash, SetPixelT set_pixel)
{
int dy;
int dx;
@@ -40,7 +43,7 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid
if (dx == 0 && dy == 0) {
/* The algorithm below cannot handle this special case; make it work at least for line width 1 */
- if (x >= 0 && x < screen_width && y >= 0 && y < screen_height) this->SetPixel(video, x, y, colour);
+ if (x >= 0 && x < screen_width && y >= 0 && y < screen_height) set_pixel(x, y);
return;
}
@@ -49,11 +52,11 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid
/* compute frac_diff = width * sqrt(dx*dx + dy*dy)
* Start interval:
* max(dx, dy) <= sqrt(dx*dx + dy*dy) <= sqrt(2) * max(dx, dy) <= 3/2 * max(dx, dy) */
- int frac_sq = width * width * (dx * dx + dy * dy);
+ int64 frac_sq = ((int64) width) * ((int64) width) * (((int64) dx) * ((int64) dx) + ((int64) dy) * ((int64) dy));
int frac_max = 3 * frac_diff / 2;
while (frac_diff < frac_max) {
int frac_test = (frac_diff + frac_max) / 2;
- if (frac_test * frac_test < frac_sq) {
+ if (((int64) frac_test) * ((int64) frac_test) < frac_sq) {
frac_diff = frac_test + 1;
} else {
frac_max = frac_test - 1;
@@ -65,25 +68,52 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid
if (dash == 0) dash = 1;
int dash_count = 0;
if (dx > dy) {
+ if (stepx < 0) {
+ std::swap(x, x2);
+ std::swap(y, y2);
+ stepy = -stepy;
+ }
+ if (x2 < 0 || x >= screen_width) return;
+
int y_low = y;
int y_high = y;
int frac_low = dy - frac_diff / 2;
int frac_high = dy + frac_diff / 2;
- while (frac_low + dx / 2 < 0) {
+ while (frac_low < -(dx / 2)) {
frac_low += dx;
y_low -= stepy;
}
- while (frac_high - dx / 2 >= 0) {
+ while (frac_high >= dx / 2) {
frac_high -= dx;
y_high += stepy;
}
- x2 += stepx;
+
+ if (x < 0) {
+ dash_count = (-x) % (dash + gap);
+ auto adjust_frac = [&](int64 frac, int &y_bound) -> int {
+ frac -= ((int64) dy) * ((int64) x);
+ if (frac >= 0) {
+ int quotient = frac / dx;
+ int remainder = frac % dx;
+ y_bound += (1 + quotient) * stepy;
+ frac = remainder - dx;
+ }
+ return frac;
+ };
+ frac_low = adjust_frac(frac_low, y_low);
+ frac_high = adjust_frac(frac_high, y_high);
+ x = 0;
+ }
+ x2++;
+ if (x2 > screen_width) {
+ x2 = screen_width;
+ }
while (x != x2) {
- if (dash_count < dash && x >= 0 && x < screen_width) {
+ if (dash_count < dash) {
for (int y = y_low; y != y_high; y += stepy) {
- if (y >= 0 && y < screen_height) this->SetPixel(video, x, y, colour);
+ if (y >= 0 && y < screen_height) set_pixel(x, y);
}
}
if (frac_low >= 0) {
@@ -94,31 +124,58 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid
y_high += stepy;
frac_high -= dx;
}
- x += stepx;
+ x++;
frac_low += dy;
frac_high += dy;
if (++dash_count >= dash + gap) dash_count = 0;
}
} else {
+ if (stepy < 0) {
+ std::swap(x, x2);
+ std::swap(y, y2);
+ stepx = -stepx;
+ }
+ if (y2 < 0 || y >= screen_height) return;
+
int x_low = x;
int x_high = x;
int frac_low = dx - frac_diff / 2;
int frac_high = dx + frac_diff / 2;
- while (frac_low + dy / 2 < 0) {
+ while (frac_low < -(dy / 2)) {
frac_low += dy;
x_low -= stepx;
}
- while (frac_high - dy / 2 >= 0) {
+ while (frac_high >= dy / 2) {
frac_high -= dy;
x_high += stepx;
}
- y2 += stepy;
+
+ if (y < 0) {
+ dash_count = (-y) % (dash + gap);
+ auto adjust_frac = [&](int64 frac, int &x_bound) -> int {
+ frac -= ((int64) dx) * ((int64) y);
+ if (frac >= 0) {
+ int quotient = frac / dy;
+ int remainder = frac % dy;
+ x_bound += (1 + quotient) * stepx;
+ frac = remainder - dy;
+ }
+ return frac;
+ };
+ frac_low = adjust_frac(frac_low, x_low);
+ frac_high = adjust_frac(frac_high, x_high);
+ y = 0;
+ }
+ y2++;
+ if (y2 > screen_height) {
+ y2 = screen_height;
+ }
while (y != y2) {
- if (dash_count < dash && y >= 0 && y < screen_height) {
+ if (dash_count < dash) {
for (int x = x_low; x != x_high; x += stepx) {
- if (x >= 0 && x < screen_width) this->SetPixel(video, x, y, colour);
+ if (x >= 0 && x < screen_width) set_pixel(x, y);
}
}
if (frac_low >= 0) {
@@ -129,10 +186,12 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid
x_high += stepx;
frac_high -= dy;
}
- y += stepy;
+ y++;
frac_low += dx;
frac_high += dx;
if (++dash_count >= dash + gap) dash_count = 0;
}
}
}
+
+#endif /* BLITTER_COMMON_HPP */
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index 51247e84ba..713cc5bbe4 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -1070,7 +1070,7 @@ struct BuildVehicleWindow : Window {
* This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */
if (this->vehicle_type == VEH_TRAIN) {
this->cargo_filter[filter_items] = CF_NONE;
- this->cargo_filter_texts[filter_items] = STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE;
+ this->cargo_filter_texts[filter_items] = STR_PURCHASE_INFO_NONE;
filter_items++;
}
diff --git a/src/command.cpp b/src/command.cpp
index e7a5a3c36b..70258aaa1d 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -190,6 +190,7 @@ CommandProc CmdAddVehicleGroup;
CommandProc CmdAddSharedVehicleGroup;
CommandProc CmdRemoveAllVehiclesGroup;
CommandProc CmdSetGroupReplaceProtection;
+CommandProc CmdSetGroupLivery;
CommandProc CmdMoveOrder;
CommandProc CmdChangeTimetable;
@@ -349,6 +350,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdAddSharedVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_SHARE_VEHICLE_GROUP
DEF_CMD(CmdRemoveAllVehiclesGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_REMOVE_ALL_VEHICLES_GROUP
DEF_CMD(CmdSetGroupReplaceProtection, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_REPLACE_PROTECTION
+ DEF_CMD(CmdSetGroupLivery, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_LIVERY
DEF_CMD(CmdMoveOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_MOVE_ORDER
DEF_CMD(CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CHANGE_TIMETABLE
DEF_CMD(CmdSetVehicleOnTime, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_VEHICLE_ON_TIME
diff --git a/src/command_type.h b/src/command_type.h
index 0a2fde297b..e7512f11d2 100644
--- a/src/command_type.h
+++ b/src/command_type.h
@@ -322,6 +322,7 @@ enum Commands {
CMD_ADD_SHARED_VEHICLE_GROUP, ///< add all other shared vehicles to a group which are missing
CMD_REMOVE_ALL_VEHICLES_GROUP, ///< remove all vehicles from a group
CMD_SET_GROUP_REPLACE_PROTECTION, ///< set the autoreplace-protection for a group
+ CMD_SET_GROUP_LIVERY, ///< set the livery for a group
CMD_MOVE_ORDER, ///< move an order
CMD_CHANGE_TIMETABLE, ///< change the timetable for a vehicle
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index c4e1a89d72..cf66690f41 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -517,10 +517,19 @@ restart:;
void ResetCompanyLivery(Company *c)
{
for (LiveryScheme scheme = LS_BEGIN; scheme < LS_END; scheme++) {
- c->livery[scheme].in_use = false;
+ c->livery[scheme].in_use = 0;
c->livery[scheme].colour1 = c->colour;
c->livery[scheme].colour2 = c->colour;
}
+
+ Group *g;
+ FOR_ALL_GROUPS(g) {
+ if (g->owner == c->index) {
+ g->livery.in_use = 0;
+ g->livery.colour1 = c->colour;
+ g->livery.colour2 = c->colour;
+ }
+ }
}
/**
@@ -586,10 +595,10 @@ void StartupCompanies()
}
/** Start a new competitor company if possible. */
-static void MaybeStartNewCompany()
+static bool MaybeStartNewCompany()
{
#ifdef ENABLE_NETWORK
- if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return;
+ if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false;
#endif /* ENABLE_NETWORK */
Company *c;
@@ -603,8 +612,10 @@ static void MaybeStartNewCompany()
if (n < (uint)_settings_game.difficulty.max_no_competitors) {
/* Send a command to all clients to start up a new AI.
* Works fine for Multiplayer and Singleplayer */
- DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
+ return DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
}
+
+ return false;
}
/** Initialize the pool of companies. */
@@ -705,11 +716,15 @@ void OnTick_Companies()
}
if (_next_competitor_start == 0) {
- _next_competitor_start = AI::GetStartNextTime() * DAY_TICKS;
+ /* AI::GetStartNextTime() can return 0. */
+ _next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS);
}
- if (AI::CanStartNew() && _game_mode != GM_MENU && --_next_competitor_start == 0) {
- MaybeStartNewCompany();
+ if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) {
+ /* Allow multiple AIs to possibly start in the same tick. */
+ do {
+ if (!MaybeStartNewCompany()) break;
+ } while (AI::GetStartNextTime() == 0);
}
_cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES;
@@ -946,23 +961,26 @@ CommandCost CmdSetCompanyManagerFace(TileIndex tile, DoCommandFlag flags, uint32
* @param flags operation to perform
* @param p1 bitstuffed:
* p1 bits 0-7 scheme to set
- * p1 bits 8-9 set in use state or first/second colour
+ * p1 bit 8 set first/second colour
* @param p2 new colour for vehicles, property, etc.
* @param text unused
* @return the cost of this operation or an error
*/
CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
- Colours colour = Extract(p2);
+ Colours colour = Extract(p2);
LiveryScheme scheme = Extract(p1);
- byte state = GB(p1, 8, 2);
+ bool second = HasBit(p1, 8);
- if (scheme >= LS_END || state >= 3 || colour == INVALID_COLOUR) return CMD_ERROR;
+ if (scheme >= LS_END || (colour >= COLOUR_END && colour != INVALID_COLOUR)) return CMD_ERROR;
+
+ /* Default scheme can't be reset to invalid. */
+ if (scheme == LS_DEFAULT && colour == INVALID_COLOUR) return CMD_ERROR;
Company *c = Company::Get(_current_company);
/* Ensure no two companies have the same primary colour */
- if (scheme == LS_DEFAULT && state == 0) {
+ if (scheme == LS_DEFAULT && !second) {
const Company *cc;
FOR_ALL_COMPANIES(cc) {
if (cc != c && cc->colour == colour) return CMD_ERROR;
@@ -970,52 +988,48 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
}
if (flags & DC_EXEC) {
- switch (state) {
- case 0:
- c->livery[scheme].colour1 = colour;
+ if (!second) {
+ if (scheme != LS_DEFAULT) SB(c->livery[scheme].in_use, 0, 1, colour != INVALID_COLOUR);
+ if (colour == INVALID_COLOUR) colour = (Colours)c->livery[LS_DEFAULT].colour1;
+ c->livery[scheme].colour1 = colour;
- /* If setting the first colour of the default scheme, adjust the
- * original and cached company colours too. */
- if (scheme == LS_DEFAULT) {
- _company_colours[_current_company] = colour;
- c->colour = colour;
- CompanyAdminUpdate(c);
+ /* If setting the first colour of the default scheme, adjust the
+ * original and cached company colours too. */
+ if (scheme == LS_DEFAULT) {
+ for (int i = 1; i < LS_END; i++) {
+ if (!HasBit(c->livery[i].in_use, 0)) c->livery[i].colour1 = colour;
}
- break;
+ _company_colours[_current_company] = colour;
+ c->colour = colour;
+ CompanyAdminUpdate(c);
+ }
+ } else {
+ if (scheme != LS_DEFAULT) SB(c->livery[scheme].in_use, 1, 1, colour != INVALID_COLOUR);
+ if (colour == INVALID_COLOUR) colour = (Colours)c->livery[LS_DEFAULT].colour2;
+ c->livery[scheme].colour2 = colour;
- case 1:
- c->livery[scheme].colour2 = colour;
- break;
+ if (scheme == LS_DEFAULT) {
+ for (int i = 1; i < LS_END; i++) {
+ if (!HasBit(c->livery[i].in_use, 1)) c->livery[i].colour2 = colour;
+ }
+ }
+ }
- case 2:
- c->livery[scheme].in_use = colour != 0;
-
- /* Now handle setting the default scheme's in_use flag.
- * This is different to the other schemes, as it signifies if any
- * scheme is active at all. If this flag is not set, then no
- * processing of vehicle types occurs at all, and only the default
- * colours will be used. */
-
- /* If enabling a scheme, set the default scheme to be in use too */
- if (colour != 0) {
- c->livery[LS_DEFAULT].in_use = true;
+ if (c->livery[scheme].in_use != 0) {
+ /* If enabling a scheme, set the default scheme to be in use too */
+ c->livery[LS_DEFAULT].in_use = 1;
+ } else {
+ /* Else loop through all schemes to see if any are left enabled.
+ * If not, disable the default scheme too. */
+ c->livery[LS_DEFAULT].in_use = 0;
+ for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
+ if (c->livery[scheme].in_use != 0) {
+ c->livery[LS_DEFAULT].in_use = 1;
break;
}
-
- /* Else loop through all schemes to see if any are left enabled.
- * If not, disable the default scheme too. */
- c->livery[LS_DEFAULT].in_use = false;
- for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
- if (c->livery[scheme].in_use) {
- c->livery[LS_DEFAULT].in_use = true;
- break;
- }
- }
- break;
-
- default:
- break;
+ }
}
+
ResetVehicleColourMap();
MarkWholeScreenDirty();
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index c62c6d61cf..5a751a3635 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -36,6 +36,7 @@
#include "water.h"
#include "station_func.h"
#include "zoom_func.h"
+#include "sortlist_type.h"
#include "widgets/company_widget.h"
@@ -522,7 +523,7 @@ public:
StringID String() const
{
- return _colour_dropdown[this->result];
+ return this->result >= COLOUR_END ? STR_COLOUR_DEFAULT : _colour_dropdown[this->result];
}
uint Height(uint width) const
@@ -541,7 +542,7 @@ public:
int height = bottom - top;
int icon_y_offset = height / 2;
int text_y_offset = (height - FONT_HEIGHT_NORMAL) / 2 + 1;
- DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + this->result,
+ DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + (this->result % COLOUR_END),
rtl ? right - 2 - ScaleGUITrad(14) : left + ScaleGUITrad(14) + 2,
top + icon_y_offset);
DrawString(rtl ? left + 2 : left + ScaleGUITrad(28) + 4,
@@ -550,60 +551,197 @@ public:
}
};
+static const int LEVEL_WIDTH = 10; ///< Indenting width of a sub-group in pixels
+
+typedef GUIList GUIGroupList;
+
/** Company livery colour scheme window. */
struct SelectCompanyLiveryWindow : public Window {
private:
uint32 sel;
LiveryClass livery_class;
Dimension square;
- Dimension box;
+ uint rows;
uint line_height;
+ GUIGroupList groups;
+ SmallVector indents;
+ Scrollbar *vscroll;
void ShowColourDropDownMenu(uint32 widget)
{
uint32 used_colours = 0;
- const Livery *livery;
- LiveryScheme scheme;
+ const Company *c;
+ const Livery *livery, *default_livery = NULL;
+ bool primary = widget == WID_SCL_PRI_COL_DROPDOWN;
+ byte default_col;
/* Disallow other company colours for the primary colour */
- if (HasBit(this->sel, LS_DEFAULT) && widget == WID_SCL_PRI_COL_DROPDOWN) {
- const Company *c;
+ if (this->livery_class < LC_GROUP_RAIL && HasBit(this->sel, LS_DEFAULT) && primary) {
FOR_ALL_COMPANIES(c) {
if (c->index != _local_company) SetBit(used_colours, c->colour);
}
}
- /* Get the first selected livery to use as the default dropdown item */
- for (scheme = LS_BEGIN; scheme < LS_END; scheme++) {
- if (HasBit(this->sel, scheme)) break;
+ c = Company::Get((CompanyID)this->window_number);
+
+ if (this->livery_class < LC_GROUP_RAIL) {
+ /* Get the first selected livery to use as the default dropdown item */
+ LiveryScheme scheme;
+ for (scheme = LS_BEGIN; scheme < LS_END; scheme++) {
+ if (HasBit(this->sel, scheme)) break;
+ }
+ if (scheme == LS_END) scheme = LS_DEFAULT;
+ livery = &c->livery[scheme];
+ if (scheme != LS_DEFAULT) default_livery = &c->livery[LS_DEFAULT];
+ } else {
+ const Group *g = Group::Get(this->sel);
+ livery = &g->livery;
+ if (g->parent == INVALID_GROUP) {
+ default_livery = &c->livery[LS_DEFAULT];
+ } else {
+ const Group *pg = Group::Get(g->parent);
+ default_livery = &pg->livery;
+ }
}
- if (scheme == LS_END) scheme = LS_DEFAULT;
- livery = &Company::Get((CompanyID)this->window_number)->livery[scheme];
DropDownList *list = new DropDownList();
+ if (default_livery != NULL) {
+ /* Add COLOUR_END to put the colour out of range, but also allow us to show what the default is */
+ default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END;
+ *list->Append() = new DropDownListColourItem(default_col, false);
+ }
for (uint i = 0; i < lengthof(_colour_dropdown); i++) {
*list->Append() = new DropDownListColourItem(i, HasBit(used_colours, i));
}
- ShowDropDownList(this, list, widget == WID_SCL_PRI_COL_DROPDOWN ? livery->colour1 : livery->colour2, widget);
+ byte sel = (default_livery == NULL || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col;
+ ShowDropDownList(this, list, sel, widget);
+ }
+
+ static int CDECL GroupNameSorter(const Group * const *a, const Group * const *b)
+ {
+ static const Group *last_group[2] = { NULL, NULL };
+ static char last_name[2][64] = { "", "" };
+
+ if (*a != last_group[0]) {
+ last_group[0] = *a;
+ SetDParam(0, (*a)->index);
+ GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0]));
+ }
+
+ if (*b != last_group[1]) {
+ last_group[1] = *b;
+ SetDParam(0, (*b)->index);
+ GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1]));
+ }
+
+ int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting).
+ if (r == 0) return (*a)->index - (*b)->index;
+ return r;
+ }
+
+ void AddChildren(GUIGroupList *source, GroupID parent, int indent)
+ {
+ for (const Group **g = source->Begin(); g != source->End(); g++) {
+ if ((*g)->parent != parent) continue;
+ *this->groups.Append() = *g;
+ *this->indents.Append() = indent;
+ AddChildren(source, (*g)->index, indent + 1);
+ }
+ }
+
+ void BuildGroupList(CompanyID owner)
+ {
+ if (!this->groups.NeedRebuild()) return;
+
+ this->groups.Clear();
+ this->indents.Clear();
+
+ if (this->livery_class >= LC_GROUP_RAIL) {
+ GUIGroupList list;
+ VehicleType vtype = (VehicleType)(this->livery_class - LC_GROUP_RAIL);
+
+ const Group *g;
+ FOR_ALL_GROUPS(g) {
+ if (g->owner == owner && g->vehicle_type == vtype) {
+ *list.Append() = g;
+ }
+ }
+
+ list.ForceResort();
+ list.Sort(&GroupNameSorter);
+
+ AddChildren(&list, INVALID_GROUP, 0);
+ }
+
+ this->groups.Compact();
+ this->groups.RebuildDone();
+ }
+
+ void SetRows()
+ {
+ if (this->livery_class < LC_GROUP_RAIL) {
+ this->rows = 0;
+ for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
+ if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
+ this->rows++;
+ }
+ }
+ } else {
+ this->rows = this->groups.Length();
+ }
+
+ this->vscroll->SetCount(this->rows);
}
public:
- SelectCompanyLiveryWindow(WindowDesc *desc, CompanyID company) : Window(desc)
+ SelectCompanyLiveryWindow(WindowDesc *desc, CompanyID company, GroupID group) : Window(desc)
{
- this->livery_class = LC_OTHER;
- this->sel = 1;
+ this->CreateNestedTree();
+ this->vscroll = this->GetScrollbar(WID_SCL_MATRIX_SCROLLBAR);
- this->square = GetSpriteSize(SPR_SQUARE);
- this->box = maxdim(GetSpriteSize(SPR_BOX_CHECKED), GetSpriteSize(SPR_BOX_EMPTY));
- this->line_height = max(max(this->square.height, this->box.height), (uint)FONT_HEIGHT_NORMAL) + 4;
+ if (group == INVALID_GROUP) {
+ this->livery_class = LC_OTHER;
+ this->sel = 1;
+ this->LowerWidget(WID_SCL_CLASS_GENERAL);
+ this->BuildGroupList(company);
+ this->SetRows();
+ } else {
+ this->SetSelectedGroup(group);
+ }
- this->InitNested(company);
+ this->FinishInitNested(company);
this->owner = company;
- this->LowerWidget(WID_SCL_CLASS_GENERAL);
this->InvalidateData(1);
}
+ void SetSelectedGroup(GroupID group)
+ {
+ this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
+ const Group *g = Group::Get(group);
+ switch (g->vehicle_type) {
+ case VEH_TRAIN: this->livery_class = LC_GROUP_RAIL; break;
+ case VEH_ROAD: this->livery_class = LC_GROUP_ROAD; break;
+ case VEH_SHIP: this->livery_class = LC_GROUP_SHIP; break;
+ case VEH_AIRCRAFT: this->livery_class = LC_GROUP_AIRCRAFT; break;
+ default: NOT_REACHED();
+ }
+ this->sel = group;
+ this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
+
+ this->groups.ForceRebuild();
+ this->BuildGroupList((CompanyID)this->window_number);
+ this->SetRows();
+
+ /* Position scrollbar to selected group */
+ for (uint i = 0; i < this->rows; i++) {
+ if (this->groups[i]->index == sel) {
+ this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0)));
+ break;
+ }
+ }
+ }
+
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
switch (widget) {
@@ -613,19 +751,28 @@ public:
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
d = maxdim(d, GetStringBoundingBox(STR_LIVERY_DEFAULT + scheme));
}
- size->width = max(size->width, 5 + this->box.width + d.width + WD_FRAMERECT_RIGHT);
+
+ /* And group names */
+ const Group *g;
+ FOR_ALL_GROUPS(g) {
+ if (g->owner == (CompanyID)this->window_number) {
+ SetDParam(0, g->index);
+ d = maxdim(d, GetStringBoundingBox(STR_GROUP_NAME));
+ }
+ }
+
+ size->width = max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT);
break;
}
case WID_SCL_MATRIX: {
- uint livery_height = 0;
- for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
- if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
- livery_height++;
- }
- }
- size->height = livery_height * this->line_height;
- this->GetWidget(WID_SCL_MATRIX)->widget_data = (livery_height << MAT_ROW_START) | (1 << MAT_COL_START);
+ /* 11 items in the default rail class */
+ this->square = GetSpriteSize(SPR_SQUARE);
+ this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4;
+
+ size->height = 11 * this->line_height;
+ resize->width = 1;
+ resize->height = this->line_height;
break;
}
@@ -637,10 +784,12 @@ public:
FALLTHROUGH;
case WID_SCL_PRI_COL_DROPDOWN: {
+ this->square = GetSpriteSize(SPR_SQUARE);
int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10;
for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) {
size->width = max(size->width, GetStringBoundingBox(*id).width + padding);
}
+ size->width = max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding);
break;
}
}
@@ -648,9 +797,14 @@ public:
virtual void OnPaint()
{
+ bool local = (CompanyID)this->window_number == _local_company;
+
/* Disable dropdown controls if no scheme is selected */
- this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, this->sel == 0);
- this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, this->sel == 0);
+ bool disabled = this->livery_class < LC_GROUP_RAIL ? (this->sel == 0) : (this->sel == INVALID_GROUP);
+ this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, !local || disabled);
+ this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, !local || disabled);
+
+ this->BuildGroupList((CompanyID)this->window_number);
this->DrawWidgets();
}
@@ -658,18 +812,38 @@ public:
virtual void SetStringParameters(int widget) const
{
switch (widget) {
+ case WID_SCL_CAPTION:
+ SetDParam(0, (CompanyID)this->window_number);
+ break;
+
case WID_SCL_PRI_COL_DROPDOWN:
case WID_SCL_SEC_COL_DROPDOWN: {
const Company *c = Company::Get((CompanyID)this->window_number);
- LiveryScheme scheme = LS_DEFAULT;
+ bool primary = widget == WID_SCL_PRI_COL_DROPDOWN;
+ StringID colour = STR_COLOUR_DEFAULT;
- if (this->sel != 0) {
- for (scheme = LS_BEGIN; scheme < LS_END; scheme++) {
- if (HasBit(this->sel, scheme)) break;
+ if (this->livery_class < LC_GROUP_RAIL) {
+ if (this->sel != 0) {
+ LiveryScheme scheme = LS_DEFAULT;
+ for (scheme = LS_BEGIN; scheme < LS_END; scheme++) {
+ if (HasBit(this->sel, scheme)) break;
+ }
+ if (scheme == LS_END) scheme = LS_DEFAULT;
+ const Livery *livery = &c->livery[scheme];
+ if (scheme == LS_DEFAULT || HasBit(livery->in_use, primary ? 0 : 1)) {
+ colour = STR_COLOUR_DARK_BLUE + (primary ? livery->colour1 : livery->colour2);
+ }
+ }
+ } else {
+ if (this->sel != INVALID_GROUP) {
+ const Group *g = Group::Get(this->sel);
+ const Livery *livery = &g->livery;
+ if (HasBit(livery->in_use, primary ? 0 : 1)) {
+ colour = STR_COLOUR_DARK_BLUE + (primary ? livery->colour1 : livery->colour2);
+ }
}
- if (scheme == LS_END) scheme = LS_DEFAULT;
}
- SetDParam(0, STR_COLOUR_DARK_BLUE + ((widget == WID_SCL_PRI_COL_DROPDOWN) ? c->livery[scheme].colour1 : c->livery[scheme].colour2));
+ SetDParam(0, colour);
break;
}
}
@@ -694,36 +868,47 @@ public:
int sec_left = nwi->pos_x;
int sec_right = sec_left + nwi->current_x - 1;
- int text_left = (rtl ? (uint)WD_FRAMERECT_LEFT : (this->box.width + 5));
- int text_right = (rtl ? (this->box.width + 5) : (uint)WD_FRAMERECT_RIGHT);
+ int text_left = (rtl ? (uint)WD_FRAMERECT_LEFT : (this->square.width + 5));
+ int text_right = (rtl ? (this->square.width + 5) : (uint)WD_FRAMERECT_RIGHT);
- int box_offs = (this->line_height - this->box.height) / 2;
int square_offs = (this->line_height - this->square.height) / 2 + 1;
int text_offs = (this->line_height - FONT_HEIGHT_NORMAL) / 2 + 1;
int y = r.top;
- const Company *c = Company::Get((CompanyID)this->window_number);
- for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
- if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
- bool sel = HasBit(this->sel, scheme) != 0;
- /* Optional check box + scheme name. */
- if (scheme != LS_DEFAULT) {
- DrawSprite(c->livery[scheme].in_use ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, (rtl ? sch_right - (this->box.width + 5) + WD_FRAMERECT_RIGHT : sch_left) + WD_FRAMERECT_LEFT, y + box_offs);
+ /* Helper function to draw livery info. */
+ auto draw_livery = [&](StringID str, const Livery &liv, bool sel, bool def, int indent) {
+ /* Livery Label. */
+ DrawString(sch_left + WD_FRAMERECT_LEFT + (rtl ? 0 : indent), sch_right - WD_FRAMERECT_RIGHT - (rtl ? indent : 0), y + text_offs, str, sel ? TC_WHITE : TC_BLACK);
+
+ /* Text below the first dropdown. */
+ DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(liv.colour1), (rtl ? pri_right - (this->square.width + 5) + WD_FRAMERECT_RIGHT : pri_left) + WD_FRAMERECT_LEFT, y + square_offs);
+ DrawString(pri_left + text_left, pri_right - text_right, y + text_offs, (def || HasBit(liv.in_use, 0)) ? STR_COLOUR_DARK_BLUE + liv.colour1 : STR_COLOUR_DEFAULT, sel ? TC_WHITE : TC_GOLD);
+
+ /* Text below the second dropdown. */
+ if (sec_right > sec_left) { // Second dropdown has non-zero size.
+ DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(liv.colour2), (rtl ? sec_right - (this->square.width + 5) + WD_FRAMERECT_RIGHT : sec_left) + WD_FRAMERECT_LEFT, y + square_offs);
+ DrawString(sec_left + text_left, sec_right - text_right, y + text_offs, (def || HasBit(liv.in_use, 1)) ? STR_COLOUR_DARK_BLUE + liv.colour2 : STR_COLOUR_DEFAULT, sel ? TC_WHITE : TC_GOLD);
+ }
+
+ y += this->line_height;
+ };
+
+ if (livery_class < LC_GROUP_RAIL) {
+ int pos = this->vscroll->GetPosition();
+ const Company *c = Company::Get((CompanyID)this->window_number);
+ for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
+ if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
+ if (pos-- > 0) continue;
+ draw_livery(STR_LIVERY_DEFAULT + scheme, c->livery[scheme], HasBit(this->sel, scheme), scheme == LS_DEFAULT, 0);
}
- DrawString(sch_left + text_left, sch_right - text_right, y + text_offs, STR_LIVERY_DEFAULT + scheme, sel ? TC_WHITE : TC_BLACK);
-
- /* Text below the first dropdown. */
- DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour1), (rtl ? pri_right - (this->box.width + 5) + WD_FRAMERECT_RIGHT : pri_left) + WD_FRAMERECT_LEFT, y + square_offs);
- DrawString(pri_left + text_left, pri_right - text_right, y + text_offs, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour1, sel ? TC_WHITE : TC_GOLD);
-
- /* Text below the second dropdown. */
- if (sec_right > sec_left) { // Second dropdown has non-zero size.
- DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour2), (rtl ? sec_right - (this->box.width + 5) + WD_FRAMERECT_RIGHT : sec_left) + WD_FRAMERECT_LEFT, y + square_offs);
- DrawString(sec_left + text_left, sec_right - text_right, y + text_offs, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour2, sel ? TC_WHITE : TC_GOLD);
- }
-
- y += this->line_height;
+ }
+ } else {
+ uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.Length());
+ for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
+ const Group *g = this->groups[i];
+ SetDParam(0, g->index);
+ draw_livery(STR_GROUP_NAME, g->livery, this->sel == g->index, false, this->indents[i] * LEVEL_WIDTH);
}
}
}
@@ -737,20 +922,35 @@ public:
case WID_SCL_CLASS_ROAD:
case WID_SCL_CLASS_SHIP:
case WID_SCL_CLASS_AIRCRAFT:
+ case WID_SCL_GROUPS_RAIL:
+ case WID_SCL_GROUPS_ROAD:
+ case WID_SCL_GROUPS_SHIP:
+ case WID_SCL_GROUPS_AIRCRAFT:
this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
this->livery_class = (LiveryClass)(widget - WID_SCL_CLASS_GENERAL);
this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
/* Select the first item in the list */
- this->sel = 0;
- for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
- if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
- this->sel = 1 << scheme;
- break;
+ if (this->livery_class < LC_GROUP_RAIL) {
+ this->sel = 0;
+ for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
+ if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
+ this->sel = 1 << scheme;
+ break;
+ }
+ }
+ } else {
+ this->sel = INVALID_GROUP;
+ this->groups.ForceRebuild();
+ this->BuildGroupList((CompanyID)this->window_number);
+
+ if (this->groups.Length() > 0) {
+ this->sel = this->groups[0]->index;
}
}
- this->ReInit();
+ this->SetRows();
+ this->SetDirty();
break;
case WID_SCL_PRI_COL_DROPDOWN: // First colour dropdown
@@ -762,24 +962,24 @@ public:
break;
case WID_SCL_MATRIX: {
- const NWidgetBase *wid = this->GetWidget(WID_SCL_MATRIX);
- LiveryScheme j = (LiveryScheme)((pt.y - wid->pos_y) / this->line_height);
+ uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX, 0, this->line_height);
+ if (row >= this->rows) return;
- for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) {
- if (_livery_class[scheme] != this->livery_class || !HasBit(_loaded_newgrf_features.used_liveries, scheme)) j++;
- if (scheme >= LS_END) return;
- }
- if (j >= LS_END) return;
+ if (this->livery_class < LC_GROUP_RAIL) {
+ LiveryScheme j = (LiveryScheme)row;
- /* If clicking on the left edge, toggle using the livery */
- if (_current_text_dir == TD_RTL ? pt.x - wid->pos_x > wid->current_x - (this->box.width + 5) : pt.x - wid->pos_x < (this->box.width + 5)) {
- DoCommandP(0, j | (2 << 8), !Company::Get((CompanyID)this->window_number)->livery[j].in_use, CMD_SET_COMPANY_COLOUR);
- }
+ for (LiveryScheme scheme = LS_BEGIN; scheme <= j && scheme < LS_END; scheme++) {
+ if (_livery_class[scheme] != this->livery_class || !HasBit(_loaded_newgrf_features.used_liveries, scheme)) j++;
+ }
+ assert(j < LS_END);
- if (_ctrl_pressed) {
- ToggleBit(this->sel, j);
+ if (_ctrl_pressed) {
+ ToggleBit(this->sel, j);
+ } else {
+ this->sel = 1 << j;
+ }
} else {
- this->sel = 1 << j;
+ this->sel = this->groups[row]->index;
}
this->SetDirty();
break;
@@ -787,13 +987,29 @@ public:
}
}
+ virtual void OnResize()
+ {
+ this->vscroll->SetCapacityFromWidget(this, WID_SCL_MATRIX);
+ }
+
virtual void OnDropdownSelect(int widget, int index)
{
- for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
- /* Changed colour for the selected scheme, or all visible schemes if CTRL is pressed. */
- if (HasBit(this->sel, scheme) || (_ctrl_pressed && _livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme))) {
- DoCommandP(0, scheme | (widget == WID_SCL_PRI_COL_DROPDOWN ? 0 : 256), index, CMD_SET_COMPANY_COLOUR);
+ bool local = (CompanyID)this->window_number == _local_company;
+ if (!local) return;
+
+ if (index >= COLOUR_END) index = INVALID_COLOUR;
+
+ if (this->livery_class < LC_GROUP_RAIL) {
+ /* Set company colour livery */
+ for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
+ /* Changed colour for the selected scheme, or all visible schemes if CTRL is pressed. */
+ if (HasBit(this->sel, scheme) || (_ctrl_pressed && _livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme))) {
+ DoCommandP(0, scheme | (widget == WID_SCL_PRI_COL_DROPDOWN ? 0 : 256), index, CMD_SET_COMPANY_COLOUR);
+ }
}
+ } else {
+ /* Setting group livery */
+ DoCommandP(0, this->sel, (widget == WID_SCL_PRI_COL_DROPDOWN ? 0 : 256) | (index << 16), CMD_SET_GROUP_LIVERY);
}
}
@@ -805,15 +1021,27 @@ public:
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
+
+ if (data != -1) {
+ /* data contains a VehicleType, rebuild list if it displayed */
+ if (this->livery_class == data + LC_GROUP_RAIL) {
+ if (!Group::IsValidID(this->sel)) this->sel = INVALID_GROUP;
+ this->groups.ForceRebuild();
+ this->BuildGroupList((CompanyID)this->window_number);
+ this->SetDirty();
+ }
+ return;
+ }
+
this->SetWidgetsDisabledState(true, WID_SCL_CLASS_RAIL, WID_SCL_CLASS_ROAD, WID_SCL_CLASS_SHIP, WID_SCL_CLASS_AIRCRAFT, WIDGET_LIST_END);
- bool current_class_valid = this->livery_class == LC_OTHER;
+ bool current_class_valid = this->livery_class == LC_OTHER || this->livery_class >= LC_GROUP_RAIL;
if (_settings_client.gui.liveries == LIT_ALL || (_settings_client.gui.liveries == LIT_COMPANY && this->window_number == _local_company)) {
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
if (HasBit(_loaded_newgrf_features.used_liveries, scheme)) {
if (_livery_class[scheme] == this->livery_class) current_class_valid = true;
this->EnableWidget(WID_SCL_CLASS_GENERAL + _livery_class[scheme]);
- } else {
+ } else if (this->livery_class < LC_GROUP_RAIL) {
ClrBit(this->sel, scheme);
}
}
@@ -822,8 +1050,6 @@ public:
if (!current_class_valid) {
Point pt = {0, 0};
this->OnClick(pt, WID_SCL_CLASS_GENERAL, 1);
- } else if (data == 0) {
- this->ReInit();
}
}
};
@@ -839,6 +1065,10 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = {
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_TRUCKLIST, STR_LIVERY_ROAD_VEHICLE_TOOLTIP),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_SHIPLIST, STR_LIVERY_SHIP_TOOLTIP),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_AIRPLANESLIST, STR_LIVERY_AIRCRAFT_TOOLTIP),
+ NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_RAIL), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_LIVERY_TRAIN_TOOLTIP),
+ NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_ROADVEH, STR_LIVERY_ROAD_VEHICLE_TOOLTIP),
+ NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_SHIP, STR_LIVERY_SHIP_TOOLTIP),
+ NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_AIRCRAFT, STR_LIVERY_AIRCRAFT_TOOLTIP),
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(90, 22), SetFill(1, 1), EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL),
@@ -847,7 +1077,13 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = {
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1),
SetDataTip(STR_BLACK_STRING, STR_LIVERY_SECONDARY_TOOLTIP),
EndContainer(),
- NWidget(WWT_MATRIX, COLOUR_GREY, WID_SCL_MATRIX), SetMinimalSize(275, 15), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_LIVERY_PANEL_TOOLTIP),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_MATRIX, COLOUR_GREY, WID_SCL_MATRIX), SetMinimalSize(275, 0), SetResize(1, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_LIVERY_PANEL_TOOLTIP), SetScrollbar(WID_SCL_MATRIX_SCROLLBAR),
+ NWidget(NWID_VERTICAL),
+ NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SCL_MATRIX_SCROLLBAR),
+ NWidget(WWT_RESIZEBOX, COLOUR_GREY),
+ EndContainer(),
+ EndContainer(),
};
static WindowDesc _select_company_livery_desc(
@@ -857,6 +1093,16 @@ static WindowDesc _select_company_livery_desc(
_nested_select_company_livery_widgets, lengthof(_nested_select_company_livery_widgets)
);
+void ShowCompanyLiveryWindow(CompanyID company, GroupID group)
+{
+ SelectCompanyLiveryWindow *w = (SelectCompanyLiveryWindow *)BringWindowToFrontById(WC_COMPANY_COLOUR, company);
+ if (w == NULL) {
+ new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group);
+ } else if (group != INVALID_GROUP) {
+ w->SetSelectedGroup(group);
+ }
+}
+
/**
* Draws the face of a company manager's face.
* @param cmf the company manager's face
@@ -2282,8 +2528,7 @@ struct CompanyWindow : Window
case WID_C_NEW_FACE: DoSelectCompanyManagerFace(this); break;
case WID_C_COLOUR_SCHEME:
- if (BringWindowToFrontById(WC_COMPANY_COLOUR, this->window_number)) break;
- new SelectCompanyLiveryWindow(&_select_company_livery_desc, (CompanyID)this->window_number);
+ ShowCompanyLiveryWindow((CompanyID)this->window_number, INVALID_GROUP);
break;
case WID_C_PRESIDENT_NAME:
diff --git a/src/company_gui.h b/src/company_gui.h
index f4964f3dc7..c5593d15d3 100644
--- a/src/company_gui.h
+++ b/src/company_gui.h
@@ -13,11 +13,13 @@
#define COMPANY_GUI_H
#include "company_type.h"
+#include "group.h"
#include "gfx_type.h"
TextColour GetDrawStringCompanyColour(CompanyID company);
void DrawCompanyIcon(CompanyID c, int x, int y);
+void ShowCompanyLiveryWindow(CompanyID company, GroupID group);
void ShowCompanyStations(CompanyID company);
void ShowCompanyFinances(CompanyID company);
void ShowCompany(CompanyID company);
diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp
index 2149d1d269..81237e4245 100644
--- a/src/core/math_func.hpp
+++ b/src/core/math_func.hpp
@@ -370,6 +370,23 @@ static inline int RoundDivSU(int a, uint b)
}
}
+/**
+ * Computes (a / b) rounded away from zero.
+ * @param a Numerator
+ * @param b Denominator
+ * @return Quotient, rounded away from zero
+ */
+static inline int DivAwayFromZero(int a, uint b)
+{
+ const int _b = static_cast(b);
+ if (a > 0) {
+ return (a + _b - 1) / _b;
+ } else {
+ /* Note: Behaviour of negative numerator division is truncation toward zero. */
+ return (a - _b + 1) / _b;
+ }
+}
+
uint32 IntSqrt(uint32 num);
#endif /* MATH_FUNC_HPP */
diff --git a/src/depend/depend.cpp b/src/depend/depend.cpp
index f57acba25c..9f8de891bd 100644
--- a/src/depend/depend.cpp
+++ b/src/depend/depend.cpp
@@ -1008,7 +1008,7 @@ int main(int argc, char *argv[])
fclose(src);
/* Then append it to the real file. */
- src = fopen(backup, "rb");
+ src = fopen(backup, "r");
while (fgets(content, size, src) != NULL) {
fputs(content, dst);
if (!strncmp(content, delimiter, strlen(delimiter))) found_delimiter = true;
diff --git a/src/economy.cpp b/src/economy.cpp
index c7ffa96cc7..6d3c2a8b26 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -1484,7 +1484,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
if (st->goods[cid].cargo.HasCargoFor(next_station)) {
/* Try to find out if auto-refitting would succeed. In case the refit is allowed,
* the returned refit capacity will be greater than zero. */
- DoCommand(v_start->tile, v_start->index, cid | 1U << 6 | 0xFF << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts.
+ DoCommand(v_start->tile, v_start->index, cid | 1U << 24 | 0xFF << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts.
/* Try to balance different loadable cargoes between parts of the consist, so that
* all of them can be loaded. Avoid a situation where all vehicles suddenly switch
* to the first loadable cargo for which there is only one packet. If the capacities
@@ -1507,7 +1507,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
* "via any station" before reserving. We rather produce some more "any station" cargo than
* misrouting it. */
IterateVehicleParts(v_start, ReturnCargoAction(st, INVALID_STATION));
- CommandCost cost = DoCommand(v_start->tile, v_start->index, new_cid | 1U << 6 | 0xFF << 8 | 1U << 16, DC_EXEC, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts.
+ CommandCost cost = DoCommand(v_start->tile, v_start->index, new_cid | 1U << 24 | 0xFF << 8 | 1U << 16, DC_EXEC, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts.
if (cost.Succeeded()) v->First()->profit_this_year -= cost.GetCost() << 8;
}
diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp
index 5e9e8cef7e..51c7e14836 100644
--- a/src/engine_gui.cpp
+++ b/src/engine_gui.cpp
@@ -108,7 +108,7 @@ struct EnginePreviewWindow : Window {
EngineID engine = this->window_number;
SetDParam(0, GetEngineCategoryName(engine));
- int y = r.top + GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, r.right - r.top + 1);
+ int y = r.top + GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, r.right - r.left + 1);
y = DrawStringMultiLine(r.left, r.right, r.top, y, STR_ENGINE_PREVIEW_MESSAGE, TC_FROMSTRING, SA_CENTER) + WD_PAR_VSEP_WIDE;
SetDParam(0, engine);
diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp
index e149d07b47..63bb589d77 100644
--- a/src/fios_gui.cpp
+++ b/src/fios_gui.cpp
@@ -281,6 +281,18 @@ private:
QueryString filter_editbox; ///< Filter editbox;
SmallVector fios_items_shown; ///< Map of the filtered out fios items
+ static void SaveGameConfirmationCallback(Window *w, bool confirmed)
+ {
+ /* File name has already been written to _file_to_saveload */
+ if (confirmed) _switch_mode = SM_SAVE_GAME;
+ }
+
+ static void SaveHeightmapConfirmationCallback(Window *w, bool confirmed)
+ {
+ /* File name has already been written to _file_to_saveload */
+ if (confirmed) _switch_mode = SM_SAVE_HEIGHTMAP;
+ }
+
public:
/** Generate a default save filename. */
@@ -731,11 +743,19 @@ public:
}
} else if (this->IsWidgetLowered(WID_SL_SAVE_GAME)) { // Save button clicked
if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) {
- _switch_mode = SM_SAVE_GAME;
FiosMakeSavegameName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name));
+ if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) {
+ ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveGameConfirmationCallback);
+ } else {
+ _switch_mode = SM_SAVE_GAME;
+ }
} else {
- _switch_mode = SM_SAVE_HEIGHTMAP;
FiosMakeHeightmapName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name));
+ if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) {
+ ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveHeightmapConfirmationCallback);
+ } else {
+ _switch_mode = SM_SAVE_HEIGHTMAP;
+ }
}
/* In the editor set up the vehicle engines correctly (date might have changed) */
diff --git a/src/fontcache.cpp b/src/fontcache.cpp
index 55da0c55c8..98e8bdf41c 100644
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -546,7 +546,7 @@ const Sprite *FreeTypeFontCache::GetGlyph(GlyphID key)
return glyph->sprite;
}
}
- FT_Load_Glyph(this->face, key, FT_LOAD_DEFAULT);
+ FT_Load_Glyph(this->face, key, aa ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO);
FT_Render_Glyph(this->face->glyph, aa ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO);
/* Despite requesting a normal glyph, FreeType may have returned a bitmap */
diff --git a/src/gamelog.cpp b/src/gamelog.cpp
index 621117f01b..29910d7ad1 100644
--- a/src/gamelog.cpp
+++ b/src/gamelog.cpp
@@ -23,13 +23,13 @@
#include "safeguards.h"
-extern const uint16 SAVEGAME_VERSION; ///< current savegame version
+extern const SaveLoadVersion SAVEGAME_VERSION; ///< current savegame version
extern SavegameType _savegame_type; ///< type of savegame we are loading
-extern uint32 _ttdp_version; ///< version of TTDP savegame (if applicable)
-extern uint16 _sl_version; ///< the major savegame version identifier
-extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
+extern uint32 _ttdp_version; ///< version of TTDP savegame (if applicable)
+extern SaveLoadVersion _sl_version; ///< the major savegame version identifier
+extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
static GamelogActionType _gamelog_action_type = GLAT_NONE; ///< action to record if anything changes
@@ -39,6 +39,30 @@ uint _gamelog_actions = 0; ///< number of actions
static LoggedAction *_current_action = NULL; ///< current action we are logging, NULL when there is no action active
+/**
+ * Return the revision string for the current client version, for use in gamelog.
+ * The string returned is at most GAMELOG_REVISION_LENGTH bytes long.
+ */
+static const char * GetGamelogRevisionString()
+{
+ /* Allocate a buffer larger than necessary (git revision hash is 40 bytes) to avoid truncation later */
+ static char gamelog_revision[48] = { 0 };
+ assert_compile(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH);
+
+ if (IsReleasedVersion()) {
+ return _openttd_revision;
+ } else if (gamelog_revision[0] == 0) {
+ /* Prefix character indication revision status */
+ assert(_openttd_revision_modified < 3);
+ gamelog_revision[0] = "gum"[_openttd_revision_modified]; // g = "git", u = "unknown", m = "modified"
+ /* Append the revision hash */
+ strecat(gamelog_revision, _openttd_revision_hash, lastof(gamelog_revision));
+ /* Truncate string to GAMELOG_REVISION_LENGTH bytes */
+ gamelog_revision[GAMELOG_REVISION_LENGTH - 1] = '\0';
+ }
+ return gamelog_revision;
+}
+
/**
* Stores information about new action, but doesn't allocate it
* Action is allocated only when there is at least one change
@@ -415,7 +439,7 @@ void GamelogRevision()
if (lc == NULL) return;
memset(lc->revision.text, 0, sizeof(lc->revision.text));
- strecpy(lc->revision.text, _openttd_revision, lastof(lc->revision.text));
+ strecpy(lc->revision.text, GetGamelogRevisionString(), lastof(lc->revision.text));
lc->revision.slver = SAVEGAME_VERSION;
lc->revision.modified = _openttd_revision_modified;
lc->revision.newgrf = _openttd_newgrf_version;
@@ -484,7 +508,7 @@ void GamelogTestRevision()
}
}
- if (rev == NULL || strcmp(rev->revision.text, _openttd_revision) != 0 ||
+ if (rev == NULL || strcmp(rev->revision.text, GetGamelogRevisionString()) != 0 ||
rev->revision.modified != _openttd_revision_modified ||
rev->revision.newgrf != _openttd_newgrf_version) {
GamelogRevision();
diff --git a/src/gamelog_internal.h b/src/gamelog_internal.h
index ad9921f4e8..261a8cd579 100644
--- a/src/gamelog_internal.h
+++ b/src/gamelog_internal.h
@@ -12,7 +12,6 @@
#ifndef GAMELOG_INTERNAL_H
#define GAMELOG_INTERNAL_H
-#include "network/core/config.h"
#include "gamelog.h"
/** Type of logged change */
@@ -33,6 +32,8 @@ enum GamelogChangeType {
};
+static const uint GAMELOG_REVISION_LENGTH = 15;
+
/** Contains information about one logged change */
struct LoggedChange {
GamelogChangeType ct; ///< Type of change logged in this struct
@@ -42,7 +43,7 @@ struct LoggedChange {
byte landscape; ///< landscape (temperate, arctic, ...)
} mode;
struct {
- char text[NETWORK_REVISION_LENGTH]; ///< revision string, _openttd_revision
+ char text[GAMELOG_REVISION_LENGTH]; ///< revision string, _openttd_revision
uint32 newgrf; ///< _openttd_newgrf_version
uint16 slver; ///< _sl_version
byte modified; ///< _openttd_revision_modified
diff --git a/src/gfx.cpp b/src/gfx.cpp
index 605ff7664b..85cd3bfb59 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -1317,7 +1317,11 @@ void DrawDirtyBlocks()
/* Wait a while and update _realtime_tick so we are given the rights */
if (!IsFirstModalProgressLoop()) CSleep(MODAL_PROGRESS_REDRAW_TIMEOUT);
_realtime_tick += MODAL_PROGRESS_REDRAW_TIMEOUT;
+
+ /* Modal progress thread may need blitter access while we are waiting for it. */
+ VideoDriver::GetInstance()->ReleaseBlitterLock();
_modal_progress_paint_mutex->BeginCritical();
+ VideoDriver::GetInstance()->AcquireBlitterLock();
_modal_progress_work_mutex->BeginCritical();
/* When we ended with the modal progress, do not draw the blocks.
diff --git a/src/gfx_type.h b/src/gfx_type.h
index 4cfc149a86..7eeddb4078 100644
--- a/src/gfx_type.h
+++ b/src/gfx_type.h
@@ -241,7 +241,7 @@ enum Colours {
COLOUR_END,
INVALID_COLOUR = 0xFF,
};
-template <> struct EnumPropsT : MakeEnumPropsT {};
+template <> struct EnumPropsT : MakeEnumPropsT {};
/** Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palette.png */
enum TextColour {
diff --git a/src/group.h b/src/group.h
index 91ee77e601..ea4f7e130e 100644
--- a/src/group.h
+++ b/src/group.h
@@ -17,6 +17,7 @@
#include "company_type.h"
#include "vehicle_type.h"
#include "engine_type.h"
+#include "livery.h"
typedef Pool GroupPool;
extern GroupPool _group_pool; ///< Pool of groups.
@@ -69,6 +70,7 @@ struct Group : GroupPool::PoolItem<&_group_pool> {
VehicleTypeByte vehicle_type; ///< Vehicle type of the group
bool replace_protection; ///< If set to true, the global autoreplace have no effect on the group
+ Livery livery; ///< Custom colour scheme for vehicles in this group
GroupStatistics statistics; ///< NOSAVE: Statistics and caches on the vehicles in the group.
GroupID parent; ///< Parent group
diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp
index 3edaf76271..29dc17edd9 100644
--- a/src/group_cmd.cpp
+++ b/src/group_cmd.cpp
@@ -255,6 +255,45 @@ static inline void UpdateNumEngineGroup(const Vehicle *v, GroupID old_g, GroupID
}
+const Livery *GetParentLivery(const Group *g)
+{
+ if (g->parent == INVALID_GROUP) {
+ const Company *c = Company::Get(g->owner);
+ return &c->livery[LS_DEFAULT];
+ }
+
+ const Group *pg = Group::Get(g->parent);
+ return &pg->livery;
+}
+
+
+/**
+ * Propagate a livery change to a group's children.
+ * @param g Group.
+ */
+void PropagateChildLivery(const Group *g)
+{
+ /* Company colour data is indirectly cached. */
+ Vehicle *v;
+ FOR_ALL_VEHICLES(v) {
+ if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
+ u->colourmap = PAL_NONE;
+ u->InvalidateNewGRFCache();
+ }
+ }
+ }
+
+ Group *cg;
+ FOR_ALL_GROUPS(cg) {
+ if (cg->parent == g->index) {
+ if (!HasBit(cg->livery.in_use, 0)) cg->livery.colour1 = g->livery.colour1;
+ if (!HasBit(cg->livery.in_use, 1)) cg->livery.colour2 = g->livery.colour2;
+ PropagateChildLivery(cg);
+ }
+ }
+}
+
Group::Group(Owner owner)
{
@@ -289,9 +328,14 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
g->vehicle_type = vt;
g->parent = INVALID_GROUP;
+ const Company *c = Company::Get(_current_company);
+ g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
+ g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
+
_new_group_id = g->index;
InvalidateWindowData(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, _current_company).Pack());
+ InvalidateWindowData(WC_COMPANY_COLOUR, g->owner, g->vehicle_type);
}
return CommandCost();
@@ -346,6 +390,7 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
delete g;
InvalidateWindowData(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, _current_company).Pack());
+ InvalidateWindowData(WC_COMPANY_COLOUR, _current_company, vt);
}
return CommandCost();
@@ -410,12 +455,22 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
if (flags & DC_EXEC) {
g->parent = (pg == NULL) ? INVALID_GROUP : pg->index;
GroupStatistics::UpdateAutoreplace(g->owner);
+
+ if (g->livery.in_use == 0) {
+ const Livery *livery = GetParentLivery(g);
+ g->livery.colour1 = livery->colour1;
+ g->livery.colour2 = livery->colour2;
+
+ PropagateChildLivery(g);
+ MarkWholeScreenDirty();
+ }
}
}
if (flags & DC_EXEC) {
InvalidateWindowData(WC_REPLACE_VEHICLE, g->vehicle_type, 1);
InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), VehicleListIdentifier(VL_GROUP_LIST, g->vehicle_type, _current_company).Pack());
+ InvalidateWindowData(WC_COMPANY_COLOUR, g->owner, g->vehicle_type);
}
return CommandCost();
@@ -442,6 +497,11 @@ static void AddVehicleToGroup(Vehicle *v, GroupID new_g)
case VEH_AIRCRAFT:
if (v->IsEngineCountable()) UpdateNumEngineGroup(v, v->group_id, new_g);
v->group_id = new_g;
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
+ u->colourmap = PAL_NONE;
+ u->InvalidateNewGRFCache();
+ u->UpdateViewport(true);
+ }
break;
}
@@ -496,6 +556,9 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u
/* Update the Replace Vehicle Windows */
SetWindowDirty(WC_REPLACE_VEHICLE, v->type);
+ SetWindowDirty(WC_VEHICLE_DEPOT, v->tile);
+ SetWindowDirty(WC_VEHICLE_VIEW, v->index);
+ SetWindowDirty(WC_VEHICLE_DETAILS, v->index);
InvalidateWindowData(GetWindowClassForVehicleType(v->type), VehicleListIdentifier(VL_GROUP_LIST, v->type, _current_company).Pack());
}
@@ -577,6 +640,44 @@ CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint3
return CommandCost();
}
+/**
+ * Set the livery for a vehicle group.
+ * @param tile Unused.
+ * @param flags Command flags.
+ * @param p1
+ * - p1 bit 0-15 Group ID.
+ * @param p2
+ * - p2 bit 8 Set secondary instead of primary colour
+ * - p2 bit 16-23 Colour.
+ */
+CommandCost CmdSetGroupLivery(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
+{
+ Group *g = Group::GetIfValid(p1);
+ bool primary = !HasBit(p2, 8);
+ Colours colour = Extract(p2);
+
+ if (g == NULL || g->owner != _current_company) return CMD_ERROR;
+
+ if (colour >= COLOUR_END && colour != INVALID_COLOUR) return CMD_ERROR;
+
+ if (flags & DC_EXEC) {
+ if (primary) {
+ SB(g->livery.in_use, 0, 1, colour != INVALID_COLOUR);
+ if (colour == INVALID_COLOUR) colour = (Colours)GetParentLivery(g)->colour1;
+ g->livery.colour1 = colour;
+ } else {
+ SB(g->livery.in_use, 1, 1, colour != INVALID_COLOUR);
+ if (colour == INVALID_COLOUR) colour = (Colours)GetParentLivery(g)->colour2;
+ g->livery.colour2 = colour;
+ }
+
+ PropagateChildLivery(g);
+ MarkWholeScreenDirty();
+ }
+
+ return CommandCost();
+}
+
/**
* Set replace protection for a group and its sub-groups.
* @param g initial group.
@@ -652,6 +753,9 @@ void SetTrainGroupID(Train *v, GroupID new_g)
if (u->IsEngineCountable()) UpdateNumEngineGroup(u, u->group_id, new_g);
u->group_id = new_g;
+ u->colourmap = PAL_NONE;
+ u->InvalidateNewGRFCache();
+ u->UpdateViewport(true);
}
/* Update the Replace Vehicle Windows */
@@ -676,6 +780,8 @@ void UpdateTrainGroupID(Train *v)
if (u->IsEngineCountable()) UpdateNumEngineGroup(u, u->group_id, new_g);
u->group_id = new_g;
+ u->colourmap = PAL_NONE;
+ u->InvalidateNewGRFCache();
}
/* Update the Replace Vehicle Windows */
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index 7db04e9b35..ce607c3264 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -25,6 +25,7 @@
#include "vehicle_gui_base.h"
#include "core/geometry_func.hpp"
#include "company_base.h"
+#include "company_gui.h"
#include "widgets/group_widget.h"
@@ -63,6 +64,8 @@ static const NWidgetPart _nested_group_widgets[] = {
SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP), SetFill(0, 1),
SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP),
+ NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP), SetFill(0, 1),
+ SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_GROUP_LIVERY_TOOLTIP),
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), EndContainer(),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetFill(0, 1),
SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP),
@@ -122,14 +125,13 @@ private:
Dimension column_size[VGC_END]; ///< Size of the columns in the group list.
- void AddParents(GUIGroupList *source, GroupID parent, int indent)
+ void AddChildren(GUIGroupList *source, GroupID parent, int indent)
{
for (const Group **g = source->Begin(); g != source->End(); g++) {
- if ((*g)->parent == parent) {
- *this->groups.Append() = *g;
- *this->indents.Append() = indent;
- AddParents(source, (*g)->index, indent + 1);
- }
+ if ((*g)->parent != parent) continue;
+ *this->groups.Append() = *g;
+ *this->indents.Append() = indent;
+ AddChildren(source, (*g)->index, indent + 1);
}
}
@@ -180,7 +182,7 @@ private:
list.ForceResort();
list.Sort(&GroupNameSorter);
- AddParents(&list, INVALID_GROUP, 0);
+ AddChildren(&list, INVALID_GROUP, 0);
this->groups.Compact();
this->groups.RebuildDone();
@@ -260,7 +262,7 @@ private:
str = STR_GROUP_NAME;
}
int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width + 1 : left + WD_FRAMERECT_LEFT + 8;
- DrawString(x + indent * LEVEL_WIDTH, x + this->column_size[VGC_NAME].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
+ DrawString(x + (rtl ? 0 : indent), x + this->column_size[VGC_NAME].width - 1 - (rtl ? indent : 0), y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
/* draw autoreplace protection */
x = rtl ? x - 8 - this->column_size[VGC_PROTECT].width : x + 8 + this->column_size[VGC_NAME].width;
@@ -345,6 +347,7 @@ public:
this->GetWidget(WID_GL_CREATE_GROUP)->widget_data += this->vli.vtype;
this->GetWidget(WID_GL_RENAME_GROUP)->widget_data += this->vli.vtype;
this->GetWidget(WID_GL_DELETE_GROUP)->widget_data += this->vli.vtype;
+ this->GetWidget(WID_GL_LIVERY_GROUP)->widget_data += this->vli.vtype;
this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data += this->vli.vtype;
this->FinishInitNested(window_number);
@@ -500,6 +503,7 @@ public:
this->SetWidgetsDisabledState(IsDefaultGroupID(this->vli.index) || IsAllGroupID(this->vli.index) || _local_company != this->vli.company,
WID_GL_DELETE_GROUP,
WID_GL_RENAME_GROUP,
+ WID_GL_LIVERY_GROUP,
WID_GL_REPLACE_PROTECTION,
WIDGET_LIST_END);
@@ -582,7 +586,7 @@ public:
assert(g->owner == this->owner);
- DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i], g->replace_protection);
+ DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, g->replace_protection);
y1 += this->tiny_step_height;
}
@@ -697,6 +701,10 @@ public:
this->ShowRenameGroupWindow(this->vli.index, false);
break;
+ case WID_GL_LIVERY_GROUP: // Set group livery
+ ShowCompanyLiveryWindow(this->owner, this->vli.index);
+ break;
+
case WID_GL_AVAILABLE_VEHICLES:
ShowBuildVehicleWindow(INVALID_TILE, this->vli.vtype);
break;
diff --git a/src/house.h b/src/house.h
index 94ef62ad54..c1cfe61041 100644
--- a/src/house.h
+++ b/src/house.h
@@ -31,6 +31,8 @@ static const HouseID NEW_HOUSE_OFFSET = 110; ///< Offset for new houses.
static const HouseID NUM_HOUSES = 512; ///< Total number of houses.
static const HouseID INVALID_HOUSE_ID = 0xFFFF;
+static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile
+
/**
* There can only be as many classes as there are new houses, plus one for
* NO_CLASS, as the original houses don't have classes.
@@ -97,30 +99,30 @@ DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags)
struct HouseSpec {
/* Standard properties */
- Year min_year; ///< introduction year of the house
- Year max_year; ///< last year it can be built
- byte population; ///< population (Zero on other tiles in multi tile house.)
- byte removal_cost; ///< cost multiplier for removing it
- StringID building_name; ///< building name
- uint16 remove_rating_decrease; ///< rating decrease if removed
- byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below)
- byte cargo_acceptance[3]; ///< acceptance level for the cargo slots
- CargoID accepts_cargo[3]; ///< 3 input cargo slots
- BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...)
- HouseZones building_availability; ///< where can it be built (climates, zones)
- bool enabled; ///< the house is available to build (true by default, but can be disabled by newgrf)
+ Year min_year; ///< introduction year of the house
+ Year max_year; ///< last year it can be built
+ byte population; ///< population (Zero on other tiles in multi tile house.)
+ byte removal_cost; ///< cost multiplier for removing it
+ StringID building_name; ///< building name
+ uint16 remove_rating_decrease; ///< rating decrease if removed
+ byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below)
+ byte cargo_acceptance[HOUSE_NUM_ACCEPTS]; ///< acceptance level for the cargo slots
+ CargoID accepts_cargo[HOUSE_NUM_ACCEPTS]; ///< input cargo slots
+ BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...)
+ HouseZones building_availability; ///< where can it be built (climates, zones)
+ bool enabled; ///< the house is available to build (true by default, but can be disabled by newgrf)
/* NewHouses properties */
- GRFFileProps grf_prop; ///< Properties related the the grf file
- uint16 callback_mask; ///< Bitmask of house callbacks that have to be called
- byte random_colour[4]; ///< 4 "random" colours
- byte probability; ///< Relative probability of appearing (16 is the standard value)
- HouseExtraFlags extra_flags; ///< some more flags
- HouseClassID class_id; ///< defines the class this house has (not grf file based)
- AnimationInfo animation; ///< information about the animation.
- byte processing_time; ///< Periodic refresh multiplier
- byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it
- CargoTypes watched_cargoes; ///< Cargo types watched for acceptance.
+ GRFFileProps grf_prop; ///< Properties related the the grf file
+ uint16 callback_mask; ///< Bitmask of house callbacks that have to be called
+ byte random_colour[4]; ///< 4 "random" colours
+ byte probability; ///< Relative probability of appearing (16 is the standard value)
+ HouseExtraFlags extra_flags; ///< some more flags
+ HouseClassID class_id; ///< defines the class this house has (not grf file based)
+ AnimationInfo animation; ///< information about the animation.
+ byte processing_time; ///< Periodic refresh multiplier
+ byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it
+ CargoTypes watched_cargoes; ///< Cargo types watched for acceptance.
Money GetRemovalCost() const;
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 05cc67ee2b..a1030122e5 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -280,6 +280,8 @@ class BuildIndustryWindow : public Window {
/** The offset for the text in the matrix. */
static const int MATRIX_TEXT_OFFSET = 17;
+ /** The largest allowed minimum-width of the window, given in line heights */
+ static const int MAX_MINWIDTH_LINEHEIGHTS = 20;
void SetupArrays()
{
@@ -337,6 +339,53 @@ class BuildIndustryWindow : public Window {
this->SetWidgetDisabledState(WID_DPI_DISPLAY_WIDGET, this->selected_type == INVALID_INDUSTRYTYPE && this->enabled[this->selected_index]);
}
+ /**
+ * Build a string of cargo names with suffixes attached.
+ * This is distinct from the CARGO_LIST string formatting code in two ways:
+ * - This cargo list uses the order defined by the industry, rather than alphabetic.
+ * - NewGRF-supplied suffix strings can be attached to each cargo.
+ *
+ * @param cargolist Array of CargoID to display
+ * @param cargo_suffix Array of suffixes to attach to each cargo
+ * @param cargolistlen Length of arrays
+ * @param prefixstr String to use for the first item
+ * @return A formatted raw string
+ */
+ std::string MakeCargoListString(const CargoID *cargolist, const CargoSuffix *cargo_suffix, int cargolistlen, StringID prefixstr) const
+ {
+ std::string cargostring;
+ char buf[1024];
+ int numcargo = 0;
+ int firstcargo = -1;
+
+ for (byte j = 0; j < cargolistlen; j++) {
+ if (cargolist[j] == CT_INVALID) continue;
+ numcargo++;
+ if (firstcargo < 0) {
+ firstcargo = j;
+ continue;
+ }
+ SetDParam(0, CargoSpec::Get(cargolist[j])->name);
+ SetDParamStr(1, cargo_suffix[j].text);
+ GetString(buf, STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION, lastof(buf));
+ cargostring += buf;
+ }
+
+ if (numcargo > 0) {
+ SetDParam(0, CargoSpec::Get(cargolist[firstcargo])->name);
+ SetDParamStr(1, cargo_suffix[firstcargo].text);
+ GetString(buf, prefixstr, lastof(buf));
+ cargostring = std::string(buf) + cargostring;
+ } else {
+ SetDParam(0, STR_JUST_NOTHING);
+ SetDParamStr(1, "");
+ GetString(buf, prefixstr, lastof(buf));
+ cargostring = std::string(buf);
+ }
+
+ return cargostring;
+ }
+
public:
BuildIndustryWindow() : Window(&_build_industry_desc)
{
@@ -378,42 +427,39 @@ public:
case WID_DPI_INFOPANEL: {
/* Extra line for cost outside of editor + extra lines for 'extra' information for NewGRFs. */
int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1) + (_loaded_newgrf_features.has_newindustries ? 4 : 0);
+ uint extra_lines_req = 0;
+ uint extra_lines_prd = 0;
+ uint max_minwidth = FONT_HEIGHT_NORMAL * MAX_MINWIDTH_LINEHEIGHTS;
Dimension d = {0, 0};
for (byte i = 0; i < this->count; i++) {
if (this->index[i] == INVALID_INDUSTRYTYPE) continue;
const IndustrySpec *indsp = GetIndustrySpec(this->index[i]);
-
CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)];
- GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix);
- StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO;
- byte p = 0;
- SetDParam(0, STR_JUST_NOTHING);
- SetDParamStr(1, "");
- for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) {
- if (indsp->accepts_cargo[j] == CT_INVALID) continue;
- if (p > 0) str++;
- SetDParam(p++, CargoSpec::Get(indsp->accepts_cargo[j])->name);
- SetDParamStr(p++, cargo_suffix[j].text);
- }
- d = maxdim(d, GetStringBoundingBox(str));
- /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */
- GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix);
- str = STR_INDUSTRY_VIEW_PRODUCES_CARGO;
- p = 0;
- SetDParam(0, STR_JUST_NOTHING);
- SetDParamStr(1, "");
- for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) {
- if (indsp->produced_cargo[j] == CT_INVALID) continue;
- if (p > 0) str++;
- SetDParam(p++, CargoSpec::Get(indsp->produced_cargo[j])->name);
- SetDParamStr(p++, cargo_suffix[j].text);
+ /* Measure the accepted cargoes, if any. */
+ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix);
+ std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO);
+ Dimension strdim = GetStringBoundingBox(cargostring.c_str());
+ if (strdim.width > max_minwidth) {
+ extra_lines_req = max(extra_lines_req, strdim.width / max_minwidth + 1);
+ strdim.width = max_minwidth;
}
- d = maxdim(d, GetStringBoundingBox(str));
+ d = maxdim(d, strdim);
+
+ /* Measure the produced cargoes, if any. */
+ GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix);
+ cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO);
+ strdim = GetStringBoundingBox(cargostring.c_str());
+ if (strdim.width > max_minwidth) {
+ extra_lines_prd = max(extra_lines_prd, strdim.width / max_minwidth + 1);
+ strdim.width = max_minwidth;
+ }
+ d = maxdim(d, strdim);
}
/* Set it to something more sane :) */
+ height += extra_lines_prd + extra_lines_req;
size->height = height * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
size->width = d.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
break;
@@ -502,36 +548,17 @@ public:
y += FONT_HEIGHT_NORMAL;
}
- /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */
CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)];
+
+ /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */
GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix);
- StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO;
- byte p = 0;
- SetDParam(0, STR_JUST_NOTHING);
- SetDParamStr(1, "");
- for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) {
- if (indsp->accepts_cargo[j] == CT_INVALID) continue;
- if (p > 0) str++;
- SetDParam(p++, CargoSpec::Get(indsp->accepts_cargo[j])->name);
- SetDParamStr(p++, cargo_suffix[j].text);
- }
- DrawString(left, right, y, str);
- y += FONT_HEIGHT_NORMAL;
+ std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO);
+ y = DrawStringMultiLine(left, right, y, bottom, cargostring.c_str());
/* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */
GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix);
- str = STR_INDUSTRY_VIEW_PRODUCES_CARGO;
- p = 0;
- SetDParam(0, STR_JUST_NOTHING);
- SetDParamStr(1, "");
- for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) {
- if (indsp->produced_cargo[j] == CT_INVALID) continue;
- if (p > 0) str++;
- SetDParam(p++, CargoSpec::Get(indsp->produced_cargo[j])->name);
- SetDParamStr(p++, cargo_suffix[j].text);
- }
- DrawString(left, right, y, str);
- y += FONT_HEIGHT_NORMAL;
+ cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO);
+ y = DrawStringMultiLine(left, right, y, bottom, cargostring.c_str());
/* Get the additional purchase info text, if it has not already been queried. */
if (HasBit(indsp->callback_mask, CBM_IND_FUND_MORE_TEXT)) {
@@ -540,7 +567,7 @@ public:
if (callback_res > 0x400) {
ErrorUnknownCallbackResult(indsp->grf_prop.grffile->grfid, CBID_INDUSTRY_FUND_MORE_TEXT, callback_res);
} else {
- str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string
+ StringID str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string
if (str != STR_UNDEFINED) {
StartTextRefStackUsage(indsp->grf_prop.grffile, 6);
DrawStringMultiLine(left, right, y, bottom, str, TC_YELLOW);
diff --git a/src/landscape.cpp b/src/landscape.cpp
index 18f27807d7..2f14a69e4b 100644
--- a/src/landscape.cpp
+++ b/src/landscape.cpp
@@ -89,6 +89,70 @@ extern const byte _slope_to_sprite_offset[32] = {
*/
static SnowLine *_snow_line = NULL;
+/**
+ * Map 2D viewport or smallmap coordinate to 3D world or tile coordinate.
+ * Function takes into account height of tiles and foundations.
+ *
+ * @param x X viewport 2D coordinate.
+ * @param y Y viewport 2D coordinate.
+ * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map.
+ * @param[out] clamped Whether coordinates were clamped.
+ * @return 3D world coordinate of point visible at the given screen coordinate (3D perspective).
+ *
+ * @note Inverse of #RemapCoords2 function. Smaller values may get rounded.
+ * @see InverseRemapCoords
+ */
+Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped)
+{
+ if (clamped != NULL) *clamped = false; // Not clamping yet.
+
+ /* Initial x/y world coordinate is like if the landscape
+ * was completely flat on height 0. */
+ Point pt = InverseRemapCoords(x, y);
+
+ const uint min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0;
+ const uint max_x = MapMaxX() * TILE_SIZE - 1;
+ const uint max_y = MapMaxY() * TILE_SIZE - 1;
+
+ if (clamp_to_map) {
+ /* Bring the coordinates near to a valid range. At the top we allow a number
+ * of extra tiles. This is mostly due to the tiles on the north side of
+ * the map possibly being drawn higher due to the extra height levels. */
+ int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS);
+ Point old_pt = pt;
+ pt.x = Clamp(pt.x, -extra_tiles * TILE_SIZE, max_x);
+ pt.y = Clamp(pt.y, -extra_tiles * TILE_SIZE, max_y);
+ if (clamped != NULL) *clamped = (pt.x != old_pt.x) || (pt.y != old_pt.y);
+ }
+
+ /* Now find the Z-world coordinate by fix point iteration.
+ * This is a bit tricky because the tile height is non-continuous at foundations.
+ * The clicked point should be approached from the back, otherwise there are regions that are not clickable.
+ * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely)
+ * So give it a z-malus of 4 in the first iterations. */
+ int z = 0;
+ if (clamp_to_map) {
+ for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2;
+ for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2;
+ for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2;
+ } else {
+ for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + max(z, 4) - 4, pt.y + max(z, 4) - 4) / 2;
+ for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + max(z, m) - m, pt.y + max(z, m) - m) / 2;
+ for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + z, pt.y + z ) / 2;
+ }
+
+ pt.x += z;
+ pt.y += z;
+ if (clamp_to_map) {
+ Point old_pt = pt;
+ pt.x = Clamp(pt.x, min_coord, max_x);
+ pt.y = Clamp(pt.y, min_coord, max_y);
+ if (clamped != NULL) *clamped = *clamped || (pt.x != old_pt.x) || (pt.y != old_pt.y);
+ }
+
+ return pt;
+}
+
/**
* Applies a foundation to a slope.
*
@@ -284,6 +348,23 @@ int GetSlopePixelZ(int x, int y)
return _tile_type_procs[GetTileType(tile)]->get_slope_z_proc(tile, x, y);
}
+/**
+ * Return world \c z coordinate of a given point of a tile,
+ * also for tiles outside the map (virtual "black" tiles).
+ *
+ * @param x World X coordinate in tile "units", may be ouside the map.
+ * @param y World Y coordinate in tile "units", may be ouside the map.
+ * @return World Z coordinate at tile ground level, including slopes and foundations.
+ */
+int GetSlopePixelZOutsideMap(int x, int y)
+{
+ if (IsInsideBS(x, 0, MapSizeX() * TILE_SIZE) && IsInsideBS(y, 0, MapSizeY() * TILE_SIZE)) {
+ return GetSlopePixelZ(x, y);
+ } else {
+ return _tile_type_procs[MP_VOID]->get_slope_z_proc(INVALID_TILE, x, y);
+ }
+}
+
/**
* Determine the Z height of a corner relative to TileZ.
*
@@ -1017,7 +1098,7 @@ static bool FlowsDown(TileIndex begin, TileIndex end)
}
/* AyStar callback for checking whether we reached our destination. */
-static int32 River_EndNodeCheck(AyStar *aystar, OpenListNode *current)
+static int32 River_EndNodeCheck(const AyStar *aystar, const OpenListNode *current)
{
return current->path.node.tile == *(TileIndex*)aystar->user_target ? AYSTAR_FOUND_END_NODE : AYSTAR_DONE;
}
diff --git a/src/landscape.h b/src/landscape.h
index cb08d9d9ec..43d9e5f2e6 100644
--- a/src/landscape.h
+++ b/src/landscape.h
@@ -40,6 +40,7 @@ Slope GetFoundationSlope(TileIndex tile, int *z = NULL);
uint GetPartialPixelZ(int x, int y, Slope corners);
int GetSlopePixelZ(int x, int y);
+int GetSlopePixelZOutsideMap(int x, int y);
void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2);
/**
@@ -108,6 +109,7 @@ static inline Point RemapCoords2(int x, int y)
* @param y Y coordinate of the 2D coordinate.
* @return X and Y components of equivalent world or tile coordinate.
* @note Inverse of #RemapCoords function. Smaller values may get rounded.
+ * @see InverseRemapCoords2
*/
static inline Point InverseRemapCoords(int x, int y)
{
@@ -115,6 +117,8 @@ static inline Point InverseRemapCoords(int x, int y)
return pt;
}
+Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false, bool *clamped = NULL);
+
uint ApplyFoundationToSlope(Foundation f, Slope *s);
/**
* Applies a foundation to a slope.
diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt
index eca60e70a4..02efdd5aa4 100644
--- a/src/lang/afrikaans.txt
+++ b/src/lang/afrikaans.txt
@@ -2682,7 +2682,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Maatskappy-besi
STR_ABOUT_OPENTTD :{WHITE}Oor OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oorspronklike kopiereg {COPYRIGHT} 1995 Chris Sawyer, Alle regte voorbehou
STR_ABOUT_VERSION :{BLACK}OpenTTD uitgawe {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Die OpenTTD span
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Die OpenTTD span
# Framerate display window
############ Leave those lines in this order!!
@@ -3286,18 +3286,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Skuif sk
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksie vlak: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Die nywerheid het aangekondig dat dit binnekort gaan sluit!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander produksie (veelvoude van 8, tot en met 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander produksie vlakke (persentasie, tot 800%)
diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt
index 7dfda5029b..5cccd49091 100644
--- a/src/lang/arabic_egypt.txt
+++ b/src/lang/arabic_egypt.txt
@@ -2316,7 +2316,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو
STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الاصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة
STR_ABOUT_VERSION :{BLACK}النسخة المفتوحة رقم {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2018 فريق النسخة المفتوحة
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2019 فريق النسخة المفتوحة
# Framerate display window
############ Leave those lines in this order!!
@@ -2813,18 +2813,8 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}وسط الشاشة على المصنع
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}نسبة الانتاج: {YELLOW}{COMMA}%
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}يحتاج: {YELLOW}{STRING} {STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}يحتاج: {YELLOW}{STRING}{STRING}، {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}يحتاج: {YELLOW}{STRING}{STRING}, {STRING}{STRING} , {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}ينتج: {YELLOW}{STRING} {STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}ينتج: {YELLOW}{STRING} {STRING}, {STRING} {STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}تغيير الانتاج مضاعف من 8 الى 2040
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}غير مستوى الانتاج{}نسبة مئوية حتى 800%.
diff --git a/src/lang/basque.txt b/src/lang/basque.txt
index ee74b92372..aa57bb9f70 100644
--- a/src/lang/basque.txt
+++ b/src/lang/basque.txt
@@ -2586,7 +2586,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Konpainia jabe
STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ri buruz
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD bertsioa {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3174,18 +3174,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Ikuspegi
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ekoizpen kopurua: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industriak berehalako itxiera iragarri du!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Ekoizpena: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Ekoizpena: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Ekoizpena aldatu (8 eta 2040 arteko multiploa)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ekoizpen ehunekoa aldatu (ehunekoa, %800 arte)
diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt
index ada14f8931..cb79266a70 100644
--- a/src/lang/belarusian.txt
+++ b/src/lang/belarusian.txt
@@ -3029,7 +3029,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Зямля на
STR_ABOUT_OPENTTD :{WHITE}Аб OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Арыґінальныя аўтарскія правы {COPYRIGHT} 1995 Chris Sawyer. Усе правы абароненыя.
STR_ABOUT_VERSION :{BLACK}OpenTTD вэрсія {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2018 Каманда распрацоўнікаў OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2019 Каманда распрацоўнікаў OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3635,21 +3635,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пака
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Прадукцыйнасьць: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Прадпрыемства хутка закрываецца!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Патрабуецца:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакае{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Зьмяніць прадукцыйнасьць (кратна 8, да 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Зьмяніць прадукцыйнасьць (у адсотках, да 800%)
diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt
index 0126a33428..52978f65da 100644
--- a/src/lang/brazilian_portuguese.txt
+++ b/src/lang/brazilian_portuguese.txt
@@ -2700,7 +2700,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :O terreno é pr
STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD...
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados
STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipe do OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipe do OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Taxa de quadros
@@ -3345,21 +3345,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Modificar produção (múltiplo de 8, até 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mudar nível de produção (porcentagem, até 800%)
diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt
index 9c24ed8a74..9066f2cdda 100644
--- a/src/lang/bulgarian.txt
+++ b/src/lang/bulgarian.txt
@@ -2627,7 +2627,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земя, пр
STR_ABOUT_OPENTTD :{WHITE}Относно OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторски права {COPYRIGHT} 1995 Крис Сойер (Chris Sawyer), Всички права са запазени
STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3215,19 +3215,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Фоку
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакащ{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Промени производството
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Промени нивото на производство(процент, до 800%)
diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt
index 59e0e3b55c..15e2bff8f7 100644
--- a/src/lang/catalan.txt
+++ b/src/lang/catalan.txt
@@ -2698,7 +2698,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :terreny propiet
STR_ABOUT_OPENTTD :{WHITE}Quant a l'OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer. Tots els drets reservats.
STR_ABOUT_VERSION :{BLACK}Versió {REV} de l'OpenTTD
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'equip de l'OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 L'equip de l'OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon
@@ -3347,21 +3347,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Canvia la producció (múltiple de 8, fins a 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Canvia el nivell de producció (en percentatge, fins a 800%)
diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt
index dac4678a8e..2d8ecc8f9f 100644
--- a/src/lang/croatian.txt
+++ b/src/lang/croatian.txt
@@ -286,6 +286,7 @@ STR_COLOUR_BROWN :Smeđa
STR_COLOUR_GREY :Siva
STR_COLOUR_WHITE :Bijela
STR_COLOUR_RANDOM :Nasumično
+STR_COLOUR_DEFAULT :Osnovna postavka
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -1916,7 +1917,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promijen
STR_CHEAT_SETUP_PROD :{LTBLUE}Omogući izmjeni produkcijskih vrijednosti: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nova boja
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} -Boja
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaži generalne sheme boja
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaži sheme boja za vlak
@@ -2799,7 +2800,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemlja u posjed
STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana
STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD tim
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Broj sličica
@@ -2874,6 +2875,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nema dos
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtriraj niz:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Presnimi datoteku
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Jeste li sigurano da želite presnimiti postojeću datoteku?
STR_SAVELOAD_OSKTITLE :{BLACK}Upiši ime za spremanje igre
@@ -2991,7 +2994,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Verzija:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibilna verzija: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5 suma: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Osnovna postavka (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Osnovna postavka (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ništa
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Nema dostupnih informacija
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Nije pronađena odgovarajuća datoteka
@@ -3451,21 +3459,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrira
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Razina proizvodnje: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je najavila uskoro zatvaranje!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čeka{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Promijeni proizvodnju (višekratnik broja 8, do 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Promijeni razinu proizvodnje (postotak, do najviše 800%)
@@ -3518,6 +3519,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupe -
STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni za kreiranje grupe
STR_GROUP_DELETE_TOOLTIP :{BLACK}Obriši odabranu grupu
STR_GROUP_RENAME_TOOLTIP :{BLACK}Preimenuj odabranu grupu
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Promijeni livreju odabrane grupe
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikni kako bi zaštitio ovu grupu od globalne automatske zamjene
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Izbriši grupu
@@ -3561,6 +3563,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Nosivost
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} Pokretni vagoni:.{GOLD}+{POWER}{BLACK} Težina: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prenamjenjivo u: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Sve vrste tereta
+STR_PURCHASE_INFO_NONE :Ništa
STR_PURCHASE_INFO_ALL_BUT :Sve osim {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK} Najveća vučna sila: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Domet: {GOLD}{COMMA} polja
diff --git a/src/lang/czech.txt b/src/lang/czech.txt
index 530738b6f4..7d1486c992 100644
--- a/src/lang/czech.txt
+++ b/src/lang/czech.txt
@@ -2784,7 +2784,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Půda vlastněn
STR_ABOUT_OPENTTD :{WHITE}O OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Původní copyright: {COPYRIGHT} 1995 Chris Sawyer, všechna práva vyhrazena
STR_ABOUT_VERSION :{BLACK}OpenTTD verze {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tým OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Tým OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Počet snímků za sekundu
@@ -3405,21 +3405,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystřed
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ček{P á ají á}{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Změnit produkci (násobky 8, až do 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Změna velikosti produkce (procentuelně, do 800%)
diff --git a/src/lang/danish.txt b/src/lang/danish.txt
index d278cd277f..906e5ff1d5 100644
--- a/src/lang/danish.txt
+++ b/src/lang/danish.txt
@@ -189,6 +189,8 @@ STR_COLOUR_ORANGE :Orange
STR_COLOUR_BROWN :Brun
STR_COLOUR_GREY :Grå
STR_COLOUR_WHITE :Hvid
+STR_COLOUR_RANDOM :Tilfældig
+STR_COLOUR_DEFAULT :Standard
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA} miles/t
@@ -475,8 +477,9 @@ STR_ABOUT_MENU_SCREENSHOT :Skærmbillede (
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fuldt zoomet skærmbillede
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard zoom skærmbillede
STR_ABOUT_MENU_GIANT_SCREENSHOT :Kæmpe skærmbillede (Ctrl-G)
+STR_ABOUT_MENU_SHOW_FRAMERATE :Vis spilhastighed
STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD'
-STR_ABOUT_MENU_SPRITE_ALIGNER :Tilpas grafikelement
+STR_ABOUT_MENU_SPRITE_ALIGNER :Spritejustering
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Slå afgrænsningsrammerne til/fra
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Slå farvning af beskidte blokke til/fra
############ range ends here
@@ -660,7 +663,7 @@ STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Hop til
STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Hop til næste nummer
STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Stop musikken
STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Start musikken
-STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Flyt slideren for at justere musik- og effektlydstyrken
+STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Flyt skyderen for at justere musik- og effektlydstyrken
STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vælg 'Alle numre' programmet
STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Vælg 'Old style musik' programmet
STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Vælg 'New style musik' programmet
@@ -671,10 +674,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Tilfæld
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vis vinduet med musiknummervalg
# Playlist window
+STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Music Program - '{STRING}'
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Nummerliste
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}'
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Ryd
+STR_PLAYLIST_CHANGE_SET :{BLACK}Skift sæt
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Ryd det valgte program (Gælder kun Custom1/Custom2)
STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ændre musik listen til et anden installeret sæt
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik på et musiknummer for at tilføje det til programlisten (kun for Custom1/Custom2)
@@ -812,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Direktør)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsoreret stiftelsen af en ny by, {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En by ved navn {TOWN} er blevet stiftet!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under opførelse tæt på {TOWN}!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Ny {STRING} bliver plantet tæt på {TOWN}!
@@ -879,10 +885,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Lokalitetsvindue {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Hent global
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Hent lokalitet fra global visning til dette vindue
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Sæt global
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Sæt den globale lokalitet til det samme som dette vindue
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Hent hovedvisning
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Bevæg denne visning til samme sted som hovedvisningen
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hovedvisning
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bevæg hovedvisningen til samme sted som dette vindue
# Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Spilvalg
@@ -924,6 +930,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Sydafrikansk Ra
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Brugerdefineret...
STR_GAME_OPTIONS_CURRENCY_GEL :Georgiske Lari (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Iranske Rialer (IRR)
+STR_GAME_OPTIONS_CURRENCY_RUB :Ny Russisk Rubel (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk Peso (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vejkøretøjer
@@ -1253,6 +1261,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Denne in
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktur vedligeholdelse: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktiveret, infrastruktur forårsager vedligeholdelsesomkostninger. Omkostningerne vokser over-proportional med nettets størrelse, hvilket påvirker større virksomheder mere end de små
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Foretrukken selskabsfarve: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vælg den foretrukne farve egne selskaber skal starte med
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lufthavnenes levealder udløber aldrig: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktiveres denne indstilling gøres at hver lufthavnstype forbliver tilgængelig for evigt efter dens indførelse
@@ -1337,6 +1347,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Land farve brug
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grøn
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mørkegrøn
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet
+STR_CONFIG_SETTING_SCROLLMODE :Visningsport bevægelse: {STRING}
+STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Virkemåde for bevægelse af kortet
STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Bevæg syns vinduet med højre mussetast, musse position låst
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Bevæg kortet med højre mussetast, musse position låst
STR_CONFIG_SETTING_SCROLLMODE_RMB :Bevæg kortet med højre musseknap
@@ -1538,11 +1550,11 @@ STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Signaltype der
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Standard signaltype
STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normal
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Avanceret
-STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Ensrettet avanceret
+STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Ensrettet togvejssignal
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Bladr gennem signaltyper: {STRING}
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Vælg hvilke signaltyper et vælge imellem, når der Ctrl+klikkes på byg signal med signalværktøjet
STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Kun normal
-STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun avanceret
+STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun togvejssignaler
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle
STR_CONFIG_SETTING_TOWN_LAYOUT :Vej-layout for nye byer: {STRING}
@@ -1809,7 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Skift å
STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiver modifikation af produktion: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nyt farvetema
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Farvetema
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle farveskemaer
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis farveskemaer for tog
@@ -1971,7 +1983,7 @@ STR_NETWORK_START_SERVER_ADVERTISED :Ja
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter:
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle
-STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firma{P "" er}
+STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} selskab{P "" er}
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maks. selskaber:
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begræns serveren til et bestemt antal selskaber
STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} tilskuer{P "" e}
@@ -2165,7 +2177,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :det tog for lan
############ End of leave-in-this-order
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mulig forbindelses tab
-STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De sidste {NUM} sekunder{P "" s} er der ikke ankommet data fra serveren
+STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De{P 0 t ""} sidste {NUM} sekund{P "" er} er der ikke ankommet data fra serveren
# Network related errors
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
@@ -2174,7 +2186,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spillet er paus
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spillet er stadig pauset ({STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spillet er stadig pauset. ({STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spillet er stadig pauset. ({STRING}, {STRING}, {STRING})
-STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spillet er stadig på pause ({STRING}, {STRING}, {STRING}, {STRING})
+STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spillet er stadig pauset ({STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spillet er sat igang ({STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :antal spillere spillere
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :forbinder klienter
@@ -2184,12 +2196,12 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spil script
STR_NETWORK_MESSAGE_CLIENT_LEAVING :forlader
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} har tilsluttet sig spillet
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har tilsluttet sig spillet (Klient #{2:NUM})
-STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har tilsluttet sig firmaet #{2:NUM}
+STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har tilsluttet sig selskabet #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} har tilsluttet sig som tilskuer
-STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startet et nyt firma (#{2:NUM})
+STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startet et nyt selskab (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} har forladt spillet ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} har ændret sit navn til {STRING}
-STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gav dit firma {2:CURRENCY_LONG}
+STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gav dit selskab {2:CURRENCY_LONG}
STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Du gav {1:STRING} {2:CURRENCY_LONG}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serveren har lukket ned for dette spil
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serveren genstarter...{}Vent venligst...
@@ -2285,6 +2297,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Laststr
STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ingen
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Vælg firmaer at vise
+STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ubrugt
@@ -2298,7 +2311,7 @@ STR_STATION_BUILD_COVERAGE_ON :{BLACK}Til
STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Marker ikke dækningsområdet af den foreslåede placering
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Marker dækningsområdet af den foreslåede placering
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Accepterer: {GOLD}{CARGO_LIST}
-STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Forsyninger: {GOLD}{CARGO_LIST}
+STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Forsyner: {GOLD}{CARGO_LIST}
# Join station window
STR_JOIN_STATION_CAPTION :{WHITE}Sammenkæd station
@@ -2360,18 +2373,18 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Standard
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Indgangssignal (semafor){}Grønt så længe der er et eller flere grønne udgangssignaler fra den efterfølgende sporsektion. Ellers vises rødt.
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Udgangssignal (semafor){}Fungerer som et normalt signal men er nødvendigt for at vise den korrekte farve ved indgangs- og kombisignaler.
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Kombisignal (semafor){}Kombisignalet fungerer både som indgangs- og udgangssignal. Dette muliggør opbygning af store forgreninger af signaler.
-STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Avanceret signal (semafor){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Avancerede signaler kan passeres fra bagsiden.
-STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet avanceret signal (semafor){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Ensrettede avancerede signaler kan ikke passeres fra bagsiden.
-STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standardsignal (electrisk){}Dette er den mest almindelige type signal, og tillader kun et tog ad gangen på den samme signalblok
+STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Togvejssignal (semafor){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Togvejssignaler kan passeres fra bagsiden.
+STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet togvejssignal (semafor){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Ensrettede togvejssignal kan ikke passeres fra bagsiden.
+STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standardsignal (elektrisk){}Dette er den mest almindelige type signal, og tillader kun et tog ad gangen på den samme signalblok
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Indgangssignal (elektrisk){}Grønt så længe der er et eller flere grønne udgangssignaler fra den efterfølgende sporsektion. Ellers vises rødt.
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Udgangssignal (elektrisk){}Fungerer som et normalt signal, men er nødvendigt for at vise den korrekte farve ved indgangs- og kombisignaler.
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombisignal (elektrisk){}Kombisignalet fungerer både som indgangs- og udgangssignal. Dette muliggør opbygning af store forgreninger af signaler.
-STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Avanceret signal (elektrisk){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Avancerede signaler kan passeres fra bagsiden.
-STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet avanceret signal (elektrisk){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Ensrettede avancerede signaler kan ikke passeres fra bagsiden.
+STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Togvejssignal (elektrisk){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Togvejssignaler kan passeres fra bagsiden.
+STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet togvejssignal (elektrisk){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Ensrettede togvejssignaler kan ikke passeres fra bagsiden.
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signalombygning{}Når denne er valgt, vil klik på et eksisterende signal ombygge det til den valgte signaltype og -variant. Ctrl vil skifte den eksisterende signalvariant. Shift skifter mellem at bygge og vise prisoverslag.
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Træk-og-slip signaltæthed
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Formindsk træk-og-slip signaltæthed
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg træk-og-slip signaltæthed
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Træk-og-slip signalafstand
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Formindsk træk-og-slip signalafstand
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg træk-og-slip signalafstand
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vælg togbro
@@ -2452,7 +2465,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Byg en l
# Airport construction window
STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Valg af lufthavn
STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Vælg lufthavnens størrelse/type
-STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Airport klasse
+STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lufthavnsklasse
STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Layout {NUM}
STR_AIRPORT_SMALL :Lille
@@ -2586,7 +2599,7 @@ STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordina
STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Produceret: {LTBLUE}{DATE_LONG}
STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING}
-STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lufthavns klasse: {LTBLUE}{STRING}
+STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lufthavnsklasse: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Lufthavns navn: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lufthavn brik navn: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
@@ -2605,28 +2618,28 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Marker
STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snedækket land
STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken
-STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbane spor
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbane spor med bloksignaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbane spor med with pre-signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbanespor
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med bloksignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbanespor med with pre-signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbane spor med udgangs-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbane spor med kombinerede signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbane spor med rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med en-vejs-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blok- og pre-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blok- og udgangs-signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbanespor med kombinerede signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbanespor med togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbanespor med en-vejs togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med blok- og pre-signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbanespor med blok- og udgangs-signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blok- og kombinerede signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blok- og rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blok og en-vejs rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med pre- og udgangs-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane spor med pre- og kombinerede signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med pre- og rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbane spor med pre- og en-vejs rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor med udgangs- og kombinerede signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med udgangs- og rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med udgangs- og en-vejs rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinerede og rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinationede- og en-vejs rute-signaler
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med rute- og en-vejs rute-signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbanespor med blok- og togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbanespor med blok- og en-vejs togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med pre- og udgangs-signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbanespor med pre- og kombinerede signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbanespor med for- og togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbanespor med pre- og en-vejs togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbanespor med udgangs- og kombinerede signaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbanespor med udgangs- og togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbanespor med udgangs- og en-vejs togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbanespor med kombinerede- og togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbanespor med kombinerede- og en-vejs togvejssignaler
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbanespor med togvejs- og en-vejs togvejssignaler
STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togdepot
STR_LAI_ROAD_DESCRIPTION_ROAD :Vej
@@ -2691,12 +2704,55 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land ejet af se
STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheder reserveret
STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD teamet
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD teamet
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Spilhastighed
+STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationshastighed: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spil-trin simuleret i sekundet.
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafik hastighed: {STRING}
+STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal billeder tegnet i sekundet.
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuel spilhastighedsfaktor: {DECIMAL}x
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor hurtigt spillet aktuelt kører, i forhold til det forventede ved normal simulationshastighed.
+STR_FRAMERATE_CURRENT :{WHITE}Aktuel
+STR_FRAMERATE_AVERAGE :{WHITE}Gennemsnit
+STR_FRAMERATE_DATA_POINTS :{BLACK}Data baseret på {COMMA} målinger
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} billeder/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} billeder/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} billeder/s
+STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
+STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
+STR_FRAMERATE_GAMELOOP :{BLACK}Spillogik total:
+STR_FRAMERATE_GL_ECONOMY :{BLACK} Fragthåndtering:
+STR_FRAMERATE_GL_TRAINS :{BLACK} Togtrin:
+STR_FRAMERATE_GL_ROADVEHS :{BLACK} Køretøjstrin:
+STR_FRAMERATE_GL_SHIPS :{BLACK} Skibstrin:
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Flytrin:
+STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Verdenstrin:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Forbindelsesgraf forsinkelser:
+STR_FRAMERATE_DRAWING :{BLACK}Grafik-tegning:
+STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Landskabsvisninger:
+STR_FRAMERATE_VIDEO :{BLACK}Grafik-output:
+STR_FRAMERATE_SOUND :{BLACK}Lydmiksning:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GAMELOOP :Spillogik
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Fragthåndtering
+STR_FRAMETIME_CAPTION_GL_TRAINS :Togtrin
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Køretøjstrin
+STR_FRAMETIME_CAPTION_GL_SHIPS :Skibstrin
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT : Flytrin
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Verdenstrin
+STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Forbindelsesgraf forsinkelser
+STR_FRAMETIME_CAPTION_DRAWING :Grafik-tegning
+STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning af landskabsvisninger
+STR_FRAMETIME_CAPTION_VIDEO :Grafik-output
+STR_FRAMETIME_CAPTION_SOUND :Lydmiksning
############ End of leave-in-this-order
@@ -2722,6 +2778,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spil Det
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen information til rådighed
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
+STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-udtryk:
STR_SAVELOAD_OSKTITLE :{BLACK}Skriv et navn til det gemte spil
@@ -2839,7 +2896,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatible version: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Traditionel (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Traditionel (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ingen
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ingen information tilgængelig
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Tilsvarende fil blev ikke fundet
@@ -2877,23 +2939,23 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jernbanetype
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal)
# Sprite aligner window
-STR_SPRITE_ALIGNER_CAPTION :{WHITE}Tilpasser grafikelement {COMMA} ({STRING})
-STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste grafikelement
-STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale grafikelement, spring pseudo/genfarvede/skrift-grafikelementer over og omsvøb til sidst
-STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til grafikelement
-STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Gå til det givne grafikelement. Hvis den ikke er et normalt grafikelement, fortsæt til næste normale element
-STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Tidligere grafikelement
-STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, springe over nogen pseudo / recolour / FONT sprites og indpakning rundt fra den første sprite til det sidste
+STR_SPRITE_ALIGNER_CAPTION :{WHITE}Justerer sprite {COMMA} ({STRING})
+STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste sprite
+STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale sprite, spring pseudo/omfarvning/font-sprites over og med omløb fra enden til starten
+STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite
+STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Gå til den givne sprite. Hvis den ikke er en normalt sprite, fortsæt til næste normale sprite
+STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige sprite
+STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, spring pseudo/omfarvning/font-sprites over og omløb fra starten til slutningen
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nulstil relativ
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nulstil den nuværende relative forskydning
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Absolut)
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Relativt)
-STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Vælg grafikelement
+STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Vælg sprite
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Vælg en sprite fra et vilkårligt sted på skærmen
-STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Gå til grafikelement
+STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Gå til sprite
# NewGRF (self) generated warnings/errors
STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING}
@@ -2911,15 +2973,17 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} kræ
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF filen, som den er lavet til at oversætte,
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :For mange NewGRF sæt er indlæst.
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Indlæsning af {1:STRING} som statisk NewGRF med {STRING} kan forårsage de-sykronisering.
-STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet grafikelement (grafikelement {3:NUM})
-STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukendt handling 0 egenskab {4:HEX} (grafikelement {3:NUM})
-STR_NEWGRF_ERROR_INVALID_ID :Forsøg på at bruge ugyldigt ID (grafikelement {3:NUM})
+STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet sprite (sprite {3:NUM})
+STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukendt handling 0 egenskab {4:HEX} (sprite {3:NUM})
+STR_NEWGRF_ERROR_INVALID_ID :Forsøg på at bruge ugyldigt ID (sprite {3:NUM})
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} indeholder en ødelagt sprite. Alle ødelagte sprites vil blive vist som et rødt spørgsmålstegn (?).
-STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Indeholder adskillige handling 8 indgange (grafikelement {3:NUM})
-STR_NEWGRF_ERROR_READ_BOUNDS :Læs forbi slutningen af pseudo-grafikelement (grafikelement {3:NUM})
-STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF ressourcer er ikke tilgængelige (grafikelement {3:NUM})
+STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Indeholder adskillige handling 8 indgange (sprite {3:NUM})
+STR_NEWGRF_ERROR_READ_BOUNDS :Læste ud over slutningen af pseudo-sprite (sprite {3:NUM})
+STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF ressourcer er ikke tilgængelige (sprite {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blev deaktiveret af {2:STRING}
-STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt / ukendt grafikelement layoutformat (grafikelement {3:NUM})
+STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt/ukendt sprite layoutformat (sprite {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i værdiliste for egenskab (sprite {3:NUM}, egenskab {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel!
@@ -2945,7 +3009,7 @@ STR_NEWGRF_BROKEN :{WHITE}Denne Ne
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Den ændrer status for '{1:ENGINE}' når den ikke er i depot
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Den ændrer toglængden for '{1:ENGINE}' mens den ikke er i depot
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Det ændrede køretøj kapacitet til '{1:ENGINE}' når det ikke er inde i et depot eller genmontering
-STR_BROKEN_VEHICLE_LENGTH :{WHITE}Toget '{VEHICLE}' fra firmaet '{COMPANY}' har ugyldig længde. Det skyldes sandsynligvis at problem med en NewGRF. Spillet går muligvis ned.
+STR_BROKEN_VEHICLE_LENGTH :{WHITE}Toget '{VEHICLE}' fra selskabet '{COMPANY}' har ugyldig længde. Det skyldes sandsynligvis at problem med en NewGRF. Risiko for at spillet mister synkronisering eller går ned.
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' indeholder forkert information
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fragt-/ombygningsinformation for '{1:ENGINE}' afviger fra indkøbslisten efter konstruktion. Dette kan medføre, at autofornyelse ikke fungerer korrekt.
@@ -2984,13 +3048,15 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Indtast
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Byer
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ingen -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (storby){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Bynavne - klik på et navn for at centrere skærmen over byen. Ctrl+Klik åbner et nyt vindue ved byens lokalitet.
STR_TOWN_POPULATION :{BLACK}Verdens befolkning: {COMMA}
# Town view window
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
-STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (by)
+STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (storby)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Indbyggere: {ORANGE}{COMMA}{BLACK} Huse: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} sidste måned: {ORANGE}{COMMA}{BLACK} mulig: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Nødvendig godsmængde for at byen kan vokse:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} krævet
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} kræves om vinteren
@@ -3020,7 +3086,7 @@ STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPAN
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Handlinger til rådighed:
STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Liste af ting der kan gøres i denne by - klik på en ting for yderligere detaljer
STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Gør det
-STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Udfør den markerede ting i listen herover
+STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Udfør den valgte handling i listen herover
STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Lille reklamekampagne
STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Mellem reklamekampagne
@@ -3295,21 +3361,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kræver:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Skift produktion (multipla af 8, op til 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ændre produktions niveauet (Op til 800%)
@@ -3362,6 +3421,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper
STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik for at oprette en gruppe
STR_GROUP_DELETE_TOOLTIP :{BLACK}Slet den valgte gruppe
STR_GROUP_RENAME_TOOLTIP :{BLACK}Omdøb den valgte gruppe
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Skift farvetema for den valgte gruppe
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik for at beskytte denne gruppe mod global auto-udskiftning
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Slet gruppe
@@ -3405,6 +3465,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacite
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motoriserede Vogne: {GOLD}+{POWER}{BLACK} Vægt: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Kan ombygges til: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Alle lasttyper
+STR_PURCHASE_INFO_NONE :Ingen
STR_PURCHASE_INFO_ALL_BUT :Alle undtagen {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks. trækkraft: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rækkevidde: {GOLD}{COMMA} felter
@@ -3804,6 +3865,7 @@ STR_ORDER_CONDITIONAL_AGE :Alder (år)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Kræver service
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Altid
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Resterende levetid (år)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimal pålidelighed
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hvordan data sammenlignes med den givne værdi
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :er lig med
@@ -4488,6 +4550,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Originallyd fra
STR_BASESOUNDS_WIN_DESCRIPTION :Originallyd fra Transport Tycoon Deluxe Windows-version.
STR_BASESOUNDS_NONE_DESCRIPTION :En lydpakke uden lyde.
STR_BASEMUSIC_WIN_DESCRIPTION :Originalmusik fra Transport Tycoon Deluxe Windows-version.
+STR_BASEMUSIC_DOS_DESCRIPTION :Originalmusik fra Transport Tycoon Deluxe DOS-version.
+STR_BASEMUSIC_TTO_DESCRIPTION :Originalmusik fra Transport Tycoon (Original/World Editor) DOS-version.
STR_BASEMUSIC_NONE_DESCRIPTION :En musikpakke uden musik.
##id 0x2000
diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt
index 0bde237c7e..1b48c5c1ff 100644
--- a/src/lang/dutch.txt
+++ b/src/lang/dutch.txt
@@ -149,14 +149,14 @@ STR_ABBREV_FOOD :{TINY_FONT}VD
STR_ABBREV_PAPER :{TINY_FONT}PR
STR_ABBREV_GOLD :{TINY_FONT}GO
STR_ABBREV_WATER :{TINY_FONT}WA
-STR_ABBREV_WHEAT :{TINY_FONT}TW
+STR_ABBREV_WHEAT :{TINY_FONT}GN
STR_ABBREV_RUBBER :{TINY_FONT}RB
STR_ABBREV_SUGAR :{TINY_FONT}SU
STR_ABBREV_TOYS :{TINY_FONT}SP
STR_ABBREV_SWEETS :{TINY_FONT}SN
STR_ABBREV_COLA :{TINY_FONT}CL
STR_ABBREV_CANDYFLOSS :{TINY_FONT}SS
-STR_ABBREV_BUBBLES :{TINY_FONT}BE
+STR_ABBREV_BUBBLES :{TINY_FONT}BU
STR_ABBREV_TOFFEE :{TINY_FONT}TF
STR_ABBREV_BATTERIES :{TINY_FONT}BA
STR_ABBREV_PLASTIC :{TINY_FONT}PL
@@ -189,6 +189,8 @@ STR_COLOUR_ORANGE :Oranje
STR_COLOUR_BROWN :Bruin
STR_COLOUR_GREY :Grijs
STR_COLOUR_WHITE :Wit
+STR_COLOUR_RANDOM :Willekeurig
+STR_COLOUR_DEFAULT :Standaard
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -232,14 +234,14 @@ STR_TOOLTIP_GROUP_ORDER :{BLACK}Kies gro
STR_TOOLTIP_SORT_ORDER :{BLACK}Selecteer sorteerrichting (aflopend/oplopend)
STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecteer sorteercriteria
STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Kies filtercriteria
-STR_BUTTON_SORT_BY :{BLACK}Sorteer op
+STR_BUTTON_SORT_BY :{BLACK}Sorteren op
STR_BUTTON_LOCATION :{BLACK}Locatie
-STR_BUTTON_RENAME :{BLACK}Hernoem
+STR_BUTTON_RENAME :{BLACK}Hernoemen
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sluit venster
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen
-STR_TOOLTIP_SHADE :{BLACK}Klap venster in - toon alleen de titelbalk
-STR_TOOLTIP_DEBUG :{BLACK}Toon NewGRF-debuginformatie
+STR_TOOLTIP_SHADE :{BLACK}Venster inklappen - alleen titelbalk weergeven
+STR_TOOLTIP_DEBUG :{BLACK}Probleemgegevens voor NewGRF weergeven
STR_TOOLTIP_DEFSIZE :{BLACK}wijzig venster naar standaardgrootte. Ctrl+Klik om de huidige grootte als standaard op te slaan
STR_TOOLTIP_STICKY :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop. Ctrl+Klik om status als default op te slaan
STR_TOOLTIP_RESIZE :{BLACK}Klik en sleep om de grootte van dit venster te veranderen
@@ -249,10 +251,10 @@ STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifba
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Sloop gebouwen etc. op een stuk land. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen bouwen/inschatting van de kosten
# Show engines button
-STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Toon verborgen
-STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Toon verborgen
-STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Toon verborgen
-STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Toon verborgen
+STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Verborgen weergeven
+STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Verborgen weergeven
+STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Verborgen weergeven
+STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Verborgen weergeven
STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen treinen ook weergegeven
STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen wegvoertuigen ook weergegeven
@@ -262,7 +264,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Door het
# Query window
STR_BUTTON_DEFAULT :{BLACK}Standaard
STR_BUTTON_CANCEL :{BLACK}Annuleren
-STR_BUTTON_OK :{BLACK}Oké
+STR_BUTTON_OK :{BLACK}OK
# On screen keyboard window
STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ .
@@ -317,21 +319,21 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzeer
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Verhoog de spelsnelheid
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opties
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spel opslaan, spel stoppen, afsluiten
-STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Toon kaart, extra kijkvenster of bordenlijst
-STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Toon stedenlijst
-STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Toon subsidies
-STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Toon lijst met stations van het bedrijf
-STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Toon financiële informatie over het bedrijf
-STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Toon algemene informatie over het bedrijf
-STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Toon verhaallijn
+STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Kaart, extra kijkvenster of lijst met bordjes weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Stedenlijst weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Subsidies weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Lijst met stations van het bedrijf weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Financiële informatie over het bedrijf weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Algemene informatie over het bedrijf weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Verhaal weergeven
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Geef doellijst weer
-STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Toon grafieken
-STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Toon bedrijfscompetitietabel
-STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of toon lijst van alle industrieën
-STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Toon lijst met treinen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen
-STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Toon lijst met wegvoertuigen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen
-STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Toon lijst met schepen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen
-STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Toon lijst met vliegtuigen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen
+STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafieken weergeven
+STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Bedrijfsscoretabel weergeven
+STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of geef lijst van alle industrieën weer
+STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Lijst met treinen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen.
+STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Lijst met wegvoertuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen.
+STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Lijst met schepen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen.
+STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Lijst met vliegtuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen.
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Inzoomen
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Uitzoomen
STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bouw spoorwegen
@@ -339,8 +341,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bouw weg
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bouw havens
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bouw vliegvelden
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open de landschapsbalk om land te verhogen/verlagen, bomen te planten, etc.
-STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Toon geluid/muziekscherm
-STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Toon laatst (nieuws)bericht, toon berichtinstellingen
+STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Geluid-/muziekvenster weergeven
+STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven, berichtinstellingen weergeven
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, scriptdebug, screenshots, over OpenTTD
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Verwissel knoppenbalk
@@ -351,7 +353,7 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenari
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Zet startdatum 1 jaar terug
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Zet startdatum 1 jaar vooruit
STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klik om het startjaar op te geven
-STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Toon kaart, stedenlijst
+STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Kaart, stedenlijst weergeven
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landschapsontwikkeling
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsontwikkeling
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling
@@ -376,11 +378,11 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Instellingen
STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/Spelscriptinstellingen
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-instellingen
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties
-STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Toon plaatsnamen
-STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Toon stationsnamen
-STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Toon controlepostnamen
-STR_SETTINGS_MENU_SIGNS_DISPLAYED :Toon borden
-STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Toon borden en namen van tegenstanders
+STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Plaatsnamen weergeven
+STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Stationsnamen weergeven
+STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Namen van routepunten weergeven
+STR_SETTINGS_MENU_SIGNS_DISPLAYED :Bordjes weergeven
+STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Bordjes en namen van tegenstanders weergeven
STR_SETTINGS_MENU_FULL_ANIMATION :Alle animaties
STR_SETTINGS_MENU_FULL_DETAIL :Alle details
STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparante gebouwen
@@ -448,7 +450,7 @@ STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bouw waterwegen
############ range ends here
############ range for airport construction menu starts
-STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bouw vliegvelden
+STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Vliegvelden bouwen
############ range ends here
############ range for landscaping menu starts
@@ -469,17 +471,17 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berichtengeschi
############ range for about menu starts
STR_ABOUT_MENU_LAND_BLOCK_INFO :Landinformatie
STR_ABOUT_MENU_SEPARATOR :
-STR_ABOUT_MENU_TOGGLE_CONSOLE :Schakel console aan/uit
-STR_ABOUT_MENU_AI_DEBUG :AI/Game Script debug
-STR_ABOUT_MENU_SCREENSHOT :Screenshot
-STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomd screenshot
-STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot met standaard zoom
-STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot van hele kaart
-STR_ABOUT_MENU_SHOW_FRAMERATE :Toon frame rate
+STR_ABOUT_MENU_TOGGLE_CONSOLE :Console in-uitschakelen
+STR_ABOUT_MENU_AI_DEBUG :Probleemoplossing AI/spelscript
+STR_ABOUT_MENU_SCREENSHOT :Schermafbeelding
+STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermafbeelding
+STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermafbeelding met standaardzoom
+STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermafbeelding van de hele kaart
+STR_ABOUT_MENU_SHOW_FRAMERATE :Framesnelheid weergeven
STR_ABOUT_MENU_ABOUT_OPENTTD :Over 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-uitlijner
-STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Schakel selectiekaders
-STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Schakel kleuren van braakliggende grond aan/uit
+STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Selectiekaders in-uitschakelen
+STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Kleuren van vuile blokken in-uitschakelen
############ range ends here
############ range for ordinal numbers used for the place in the highscore window
@@ -564,7 +566,7 @@ STR_MONTH_DEC :December
# Graph window
STR_GRAPH_KEY_BUTTON :{BLACK}Legenda
-STR_GRAPH_KEY_TOOLTIP :{BLACK}Toon legenda bij deze grafiek
+STR_GRAPH_KEY_TOOLTIP :{BLACK}Legenda bij deze grafiek weergeven
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING}
STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM}
STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING}
@@ -581,12 +583,12 @@ STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLA
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Betaling voor het leveren van 10 eenheden (of 10,000 liter) aan vracht over een afstand van 20 vakjes
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Alles aan
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Alles uit
-STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Toon alle vrachtsoorten op de grafiek van vrachtprijzen
-STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Toon geen vrachtsoorten op de grafiek van vrachtprijzen
-STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schakel grafiek voor vrachttype aan/uit
+STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Alle vrachtsoorten weergeven op de grafiek van vrachtprijzen
+STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Geen vrachtsoorten weergeven op de grafiek van vrachtprijzen
+STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor vrachttype aan-uit
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
-STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Toon gedetailleerde prestatiescores
+STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Gedetailleerde prestatiescores weergeven
# Graph key window
STR_GRAPH_KEY_CAPTION :{WHITE}Legenda voor bedrijfsgrafieken
@@ -611,7 +613,7 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
-STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Toon details van dit bedrijf
+STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Details voor dit bedrijf weergeven
############ Those following lines need to be in this order!!
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Voertuigen:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stations:
@@ -668,8 +670,8 @@ STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selectee
STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street stylemuziek'-programma
STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer 'Aangepast1'-programma
STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer 'Aangepast2'-programma
-STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Programmashuffle aan/uit
-STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Toon nummerkeuzescherm
+STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Willekeurige volgorde aan-uit
+STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Venster voor muzieknummers weergeven
# Playlist window
STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Muziekprogramma - '{STRING}'
@@ -709,13 +711,13 @@ STR_SMALLMAP_TYPE_ROUTEMAP :Vrachtstroom
STR_SMALLMAP_TYPE_ROUTES :Routes
STR_SMALLMAP_TYPE_VEGETATION :Begroeiing
STR_SMALLMAP_TYPE_OWNERS :Eigenaren
-STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Toon landcontouren op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Toon voertuigen op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Toon industrieën op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Toon vrachtstroom op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Toon transportroutes op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Toon begroeiing op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Toon landeigenaren op de kaart
+STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Landcontouren op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Voertuigen op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Industrieën op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Vrachtstroom op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Transportroutes op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Begroeiing op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Landeigenaren op de kaart weergeven
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik op een industriesoort om deze weer te geven. Ctrl+klik verbergt alle andere industriesoorten behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle industriesoorten weer.
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik op een bedrijf om de bedrijfseigendommen weer te geven. Ctrl+klik verbergt alle andere bedrijven behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle bedrijven weer.
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klik op een vrachtsoort om de eigenschappen weer te geven. Ctrl+Klik verbergt alle vrachtsoorten behalve de geselecteerde. Ctrl+Klik opnieuw om alle vrachttypes te activeren
@@ -749,7 +751,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA
STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Woestijn
STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Sneeuw
-STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Plaatsnamen op de kaart aan/uit
+STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Plaatsnamen op de kaart weergeven-verbergen.
STR_SMALLMAP_CENTER :{BLACK}Centreer de kaart op huidige positie
STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM})
STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING}
@@ -757,17 +759,17 @@ STR_SMALLMAP_COMPANY :{TINY_FONT}{COM
STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN}
STR_SMALLMAP_DISABLE_ALL :{BLACK}Alles uitschakelen
STR_SMALLMAP_ENABLE_ALL :{BLACK}Alles inschakelen
-STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Toon hoogte
-STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Toon geen industrieën op de kaart
-STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Toon alle industrieën op de kaart
-STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Schakel tonen van hoogte aan/uit
+STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Hoogte weergeven
+STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Geen industrieën op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Alle industrieën op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Hoogtekaart weergeven-verbergen
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Verberg bedrijfseigendommen op de kaart
-STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Toon alle bedrijfseigendommen op de kaart
-STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Toon geen vrachtsoorten op de kaart
-STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Toon alle vrachtsoorten op de kaart
+STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Alle bedrijfseigendommen op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Geen vrachtsoorten op de kaart weergeven
+STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Alle vrachtsoorten op de kaart weergeven
# Status bar messages
-STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Toon laatst (nieuws)bericht
+STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven
STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - -
STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * *
STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN
@@ -781,13 +783,13 @@ STR_MESSAGE_NEWS_FORMAT :{STRING} - {S
STR_NEWS_MESSAGE_CAPTION :{WHITE}Bericht
STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING}
-STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste trein arriveert in {STATION}!
-STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste bus arriveert in {STATION}!
-STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste vrachtwagen arriveert in {STATION}!
-STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste passagierstram arriveert in {STATION}!
-STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste vrachttram arriveert in {STATION}!
-STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste schip arriveert in {STATION}!
-STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste vliegtuig arriveert in {STATION}!
+STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste trein arriveert bij {STATION}!
+STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste bus arriveert bij {STATION}!
+STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste vrachtwagen arriveert bij {STATION}!
+STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste passagierstram arriveert bij {STATION}!
+STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste vrachttram arriveert bij {STATION}!
+STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste schip arriveert in {STATION}!
+STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest . . .{}Eerste vliegtuig arriveert op {STATION}!
STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Treinongeluk!{}{COMMA} komen om in explosie na de botsing
STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Wegvoertuig verongelukt!{}Bestuurder komt om in explosie na botsing met trein
@@ -797,10 +799,10 @@ STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLAC
STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Zeppelinongeluk bij {STATION}!
STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Wegvoertuig vernietigd in botsing met 'UFO'
-STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Olieraffinaderij in de buurt van {TOWN} is geëxplodeerd!
+STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Olieraffinaderij bij {TOWN} is ontploft!
STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fabriek in de buurt van {TOWN} is vernietigd onder verdachte omstandigheden!
STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}'UFO' landt in de buurt van {TOWN}!
-STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Instorting van kolenmijn laat spoor van vernietiging achter in de buurt van {TOWN}!
+STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Instorting van kolenmijn laat spoor van vernieling achter bij {TOWN}!
STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Overstromingen!{}Minstens {COMMA} zijn vermist of dood na overstromingen!
STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Transportbedrijf in de problemen!
@@ -815,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Directeur)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} betaalt bouw van nieuwe stad {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Er is een nieuwe stad gebouwd met de naam {TOWN}!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nieuwe {STRING} in aanbouw bij {TOWN}!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nieuw {STRING} in aanplant bij {TOWN}!
@@ -836,7 +839,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLAC
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insectenplaag zorgt voor ravage bij {INDUSTRY}!{}Productie gezakt met 50%
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING} productie van {INDUSTRY} daalt met {COMMA}%!
-STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} wacht in treindepot
+STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} wacht in remise
STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} wacht in garage
STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} wacht in dok
STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} wacht in hangar
@@ -871,14 +874,14 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidieaanbod is verlopen:{}{}{STRING} van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie ingetrokken:{}{}{STRING}route van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidie aangeboden:{}{}Eerste {STRING}route van {STRING} naar {STRING} krijgt een jaar lang subsidie van de gemeente!
-STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar 50% extra betaald!
-STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar dubbel betaald!
-STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar driedubbel betaald!
-STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar vierdubbel betaald!
+STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar 50% extra betaald!
+STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar dubbel betaald!
+STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar driedubbel betaald!
+STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar vierdubbel betaald!
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegherstelling betaald door {STRING} zorgt voor 6 maanden van miserie bij weggebruikers!
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie!
-STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokale overheid van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten!
+STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Gemeentebestuur van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten!
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA}
@@ -928,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Aangepast...
STR_GAME_OPTIONS_CURRENCY_GEL :Georgische Lari (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Iraanse Rial (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Nieuwe Russische Roebel (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Mexicaanse peso (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen
@@ -963,7 +967,7 @@ STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Catalaans
############ end of townname region
STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatisch opslaan
-STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Kies interval tussen automatisch opgeslagen spellen
+STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Kies tijdsduur tussen automatisch opgeslagen spellen
############ start of autosave dropdown
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Uit
@@ -1052,11 +1056,11 @@ STR_VARIETY_MEDIUM :Gemiddeld
STR_VARIETY_HIGH :Hoog
STR_VARIETY_VERY_HIGH :Zeer Hoog
-STR_AI_SPEED_VERY_SLOW :Zeer Langzaam
+STR_AI_SPEED_VERY_SLOW :Zeer langzaam
STR_AI_SPEED_SLOW :Langzaam
STR_AI_SPEED_MEDIUM :Gemiddeld
STR_AI_SPEED_FAST :Snel
-STR_AI_SPEED_VERY_FAST :Zeer Snel
+STR_AI_SPEED_VERY_FAST :Zeer snel
STR_SEA_LEVEL_VERY_LOW :Zeer Laag
STR_SEA_LEVEL_LOW :Laag
@@ -1108,9 +1112,9 @@ STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Bedrijfsinstell
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie:
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Beperkt de onderstaande lijst met vooraf gedefinieerde filters
-STR_CONFIG_SETTING_RESTRICT_BASIC :Basis (toon alleen belangrijke instellingen)
-STR_CONFIG_SETTING_RESTRICT_ADVANCED :Geavanceerd (toon de meeste instellingen)
-STR_CONFIG_SETTING_RESTRICT_ALL :Expert (toon alle instellingen, inclusief vreemde)
+STR_CONFIG_SETTING_RESTRICT_BASIC :Basis (alleen belangrijke instellingen weergeven)
+STR_CONFIG_SETTING_RESTRICT_ADVANCED :Geavanceerd (meeste instellingen weergeven)
+STR_CONFIG_SETTING_RESTRICT_ALL :Expert (alle instellingen weergeven, inclusief vreemde)
STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Instellingen met een andere waarde dan de standaard
STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Instellingen met een andere waarde dan je 'nieuw spel' instellingen
@@ -1121,9 +1125,9 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spelinstellinge
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spelinstellingen (Opgeslagen in bestand; hebben alleen betrekking op huidig spel)
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Bedrijfsinstellingen (Opgeslagen in bestand; heeft alleen betrekking op nieuwe spellen)
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Bedrijfsinstellingen (Opgeslagen in bestand; hebben alleen betrekking op huidig bedrijf)
-STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Toon alle zoekresultaten per instelling{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING}
-STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Toon alle zoekresultaten per instelling{}{SILVER}Type {BLACK}naar {WHITE}Alle instellingstypen
-STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Toon alle zoekresultaten per instelling{}{SILVER}Categorie {BLACK}to {WHITE}{STRING} {BLACK}and {SILVER}Type {BLACK}naar {WHITE}Alle instellingstypen
+STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING}
+STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Type {BLACK}naar {WHITE}alle instellingstypen
+STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING} {BLACK}en {SILVER}type {BLACK}naar {WHITE}Alle instellingstypen
STR_CONFIG_SETTINGS_NONE :{WHITE}- Geen -
STR_CONFIG_SETTING_OFF :Uit
@@ -1162,24 +1166,24 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Niet toestaan d
STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Indien ingeschakeld zullen treinen niet omkeren in niet-eind stations, zelfs als er een kortere weg naar hun volgende bestemming is bij omkeren
STR_CONFIG_SETTING_DISASTERS :Rampen: {STRING}
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Schakel rampen die af en toe voertuigen of infrastructuur kunnen blokkeren of vernietigen in/uit
-STR_CONFIG_SETTING_CITY_APPROVAL :De houding van de gemeenteraad ten opzichte van herstructurering gebied: {STRING}
+STR_CONFIG_SETTING_CITY_APPROVAL :Houding van gemeentebestuur ten opzichte van herstructurering omgeving: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Kies hoeveel lawaai en schade aan het milieu door bedrijven de stadswaardering en hun acties beïnvloeden in hun bouwgebied
-STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximum kaarthoogte: {STRING}
+STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximale kaarthoogte: {STRING}
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Stel de maximum toegestane hoogte voor bergen op de kaart in
-STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximum kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger
+STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximale kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger.
STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpassen onder gebouwen, spoorwegen, enz. toestaan: {STRING}
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Staat het aanpassen van funderingen onder gebouwen en sporen toe zonder deze te verwijderen
STR_CONFIG_SETTING_CATCHMENT :Gebruik meer realistische handelsgebieden: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Heb verschillende grootte verzorgingsgebied voor verschillende typen stations en luchthavens
STR_CONFIG_SETTING_EXTRADYNAMITE :Sta verwijderen van meer stedelijke wegen, bruggen en tunnels toe: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Maakt het gemakkelijker om door de stad beheerde infrastructuur en gebouwen te verwijderen.
-STR_CONFIG_SETTING_TRAIN_LENGTH :Maximum lengte van treinen: {STRING}
-STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Stel de maximum lengte van treinen in
+STR_CONFIG_SETTING_TRAIN_LENGTH :Maximale lengte van treinen: {STRING}
+STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Stel de maximale lengte van treinen in
STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} tegel{P 0 "" s}
STR_CONFIG_SETTING_SMOKE_AMOUNT :Hoeveelheid rook/vonken: {STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Bepaal hoeveel rook of hoeveel vonken door de voertuigen worden uitgestoten.
-STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Trein acceleratie model: {STRING}
+STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Treinacceleratiemodel: {STRING}
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selecteer de physics model voor de trein acceleratie. Het "originele" model straft hellingen gelijk voor alle voertuigen. Het "realistische" model bestraft hellingen en bochten, afhankelijk van de verschillende eigenschappen van de inhoud, zoals lengte en trekkracht
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Wegvoertuig acceleratie model: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selecteer de physics model voor wegvoertuigacceleratie. Het "originele" model straft hellingen gelijk voor alle voertuigen. Het "realistische" model bestraft hellingen, afhankelijk van verschillende eigenschappen van het voertuig, bijvoorbeeld 'trekkracht'
@@ -1188,18 +1192,18 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steilheid van e
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsterkte voor wegvoertuigen: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steilheid van een schuine tegel voor een wegvoertuig. Hogere waarden maken het moeilijker om een heuvel te beklimmen
-STR_CONFIG_SETTING_FORBID_90_DEG :Verbied treinen en schepen om 90° te draaien: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG :Treinen en schepen mogen niet 90° draaien: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Draaiingen met 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties. Dit geldt ook voor de draaicirkel van schepen
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Sta het samenvoegen van indirect aansluitende stations toe: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Sta toe dat er aanvullende onderdelen aan een station worden geplaatst zonder dat reeds bestaande onderdelen beïnvloed worden. Ctrl+klik is vereist tijdens het plaatsen van nieuwe onderdelen.
STR_CONFIG_SETTING_INFLATION :Inflatie: {STRING}
STR_CONFIG_SETTING_INFLATION_HELPTEXT :Schakel inflatie in de economie in, waardoor de kosten iets sneller stijgen dan de betalingen
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maximum bruglengte: {STRING}
-STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maximum lengte voor te bouwen bruggen
-STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maximum brughoogte: {STRING}
+STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maximale lengte voor te bouwen bruggen
+STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maximale brughoogte: {STRING}
STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maximum hoogte om bruggen te bouwen
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maximum tunnellengte: {STRING}
-STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maximum lengte voor te bouwen tunnels
+STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maximale lengte voor te bouwen tunnels
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Handmatige bouwmethode voor primaire industrieën: {STRING}
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Wijze van financiering van een primaire industrie. 'geen' betekent dat het niet mogelijk is om te financieren, 'prospectie' betekent dat financiering mogelijk is, maar de bouw vindt plaats in een willekeurige plek op de kaart en kan mislukken ook, "als andere bedrijfstakken": ruwe industrieën kan worden geconstrueerd door bedrijven als verwerkende industrie in elke positie zij willen
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Geen
@@ -1209,7 +1213,7 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Plat gebied ron
STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Hoeveelheid ruimte rond een industrie. Dit zorgt ervoor dat lege ruimte rond een industrie beschikbaar blijft voor sporen, stations, wegen enz.
STR_CONFIG_SETTING_MULTIPINDTOWN :Meerdere vergelijkbare industrieën per stad toestaan: {STRING}
STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaal zal een stad niet meer dan één industrie van ieder type toestaan. Door deze optie in te schakelen zullen steden meerdere industrieën van één soort accepteren.
-STR_CONFIG_SETTING_SIGNALSIDE :Toon seinen: {STRING}
+STR_CONFIG_SETTING_SIGNALSIDE :Seinen weergeven: {STRING}
STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Kies aan welke kans van het sppor de seinen worden geplaatst
STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Aan de linker kant
STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Aan de rij zijde
@@ -1229,13 +1233,13 @@ STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Uitgeschakeld
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hoofdkijkvenster, alleen volledig scherm
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hoofdkijkvenster
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Elk kijkvenster
-STR_CONFIG_SETTING_BRIBE :Omkopen van de gemeente toestaan: {STRING}
+STR_CONFIG_SETTING_BRIBE :Omkopen van gemeentebestuur toestaan: {STRING}
STR_CONFIG_SETTING_BRIBE_HELPTEXT :Toestaan dat bedrijven mogen proberen de plaatselijke autoriteiten om te kopen. Als de omkoping wordt opgemerkt door een inspecteur, zal de onderneming niet in staat zijn om in de stad actie te ondernemen voor zes maanden
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Kopen van exclusieve transportrechten toestaan: {STRING}
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Wanneer een bedrijf de exclusieve transportrechten van een stad koopt, ontvangen de stations (zowel passagiers als vracht) van de tegenstanders geen vracht voor één heel jaar.
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Financiering van gebouwen toestaan: {STRING}
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Deze optie staat bedrijven toe meer geld te geven aan steden voor de financiering van nieuwe huizen.
-STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Financieren van lokale wegherbouwing toestaan: {STRING}
+STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Financieren van lokale wegreconstructie toestaan: {STRING}
STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Deze optie staat bedrijven toe geld te geven aan steden voor het herbouwen van wegen, zodat op wegbedrijven gesaboteerd worden.
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Geld geven aan andere bedrijven toestaan: {STRING}
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Sta toe dat bedrijven geld naar elkaar overmaken in een multiplayerspel.
@@ -1249,7 +1253,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Kies de kans op
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Verminderd
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normaal
-STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Sta toe dat doorrijwegstops worden geplaatst op door stad beheerde wegen: {STRING}
+STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Haltes plaatsen op door stad beheerde wegen toestaan: {STRING}
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op stedelijke wegen
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Sta doorrijhaltes op wegen van tegenstanders toe: {STRING}
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op wegen van andere bedrijven
@@ -1257,6 +1261,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Deze ins
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Onderhoud infrastructuur: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wanneer dit is ingeschakeld, veroorzaakt de infrastructuur onderhoudskosten. De kosten groeien boven-proportioneel met de grootte van het netwerk, waardoor grotere bedrijven hierdoor meer worden beïnvloed dan kleinere
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Beginkleur voor bedrijf: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Kies de beginkleur voor het bedrijf
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Vliegvelden verlopen niet: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Het inschakelen van deze instelling zorgt ervoor dat elke luchthaven soort altijd beschikbaar blijft na de introductie
@@ -1274,7 +1280,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verl
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wanneer ingeschakeld, alle voertuig modellen blijven voor altijd beschikbaar na hun introductie
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vernieuw voertuig automatisch wanneer deze oud wordt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wanneer ingeschakeld, wordt een voertuig die het einde van zijn levensduur nadert automatisch vervangen als aan de vernieuw voorwaarden worden voldaan
-STR_CONFIG_SETTING_AUTORENEW_MONTHS :Vernieuw voertuigen automatisch na {STRING} maximum leeftijd
+STR_CONFIG_SETTING_AUTORENEW_MONTHS :Vernieuw voertuigen automatisch na {STRING} maximumleeftijd
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relatieve leeftijd van een voertuig wanneer deze in aanmerking komt voor automatisch vervangen
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} maand{P 0 "" en} voor
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} maand{P 0 "" en} na
@@ -1283,12 +1289,12 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimale hoevee
STR_CONFIG_SETTING_ERRMSG_DURATION :Duur van foutbericht: {STRING}
STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het weergeven van foutberichten in een rood venster. Merk op dat sommige (kritische) foutmeldingen niet automatisch worden gesloten na deze tijd, deze moeten handmatig worden gesloten
STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n}
-STR_CONFIG_SETTING_HOVER_DELAY :Toon tooltips: {STRING}
+STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING}
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat tooltips worden weergegeven wanneer de muis over een interface-element. Als alternatief kunnen tooltips worden gebonden aan de rechtermuisknop wanneer de waarde 0 is.
STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Wijs aan voor {COMMA} seconde{P 0 "" n}
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik
STR_CONFIG_SETTING_POPULATION_IN_LABEL :Geef het inwoneraantal bij een stad weer: {STRING}
-STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Toon de populatie van een stad in hun tekst op de kaart
+STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Aantal inwoners van een stad weergeven bij naam op de kaart
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Dikte van de lijnen in grafieken: {STRING}
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de lijnen in de grafiek. Een dunne lijn is preciezer leesbaar, een dikke lijn is makkelijker te zien en kleuren zijn makkelijker om te onderscheiden
@@ -1302,7 +1308,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terrein type: {
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Alleen TerraGenesis) Heuvelachtigheid van het landschap
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichtheid: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stel in hoeveel industrieën moeten worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd
-STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum afstand van de rand voor Olierafinaderijen: {STRING}
+STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor Olierafinaderijen: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaart grens, dat is aan de kust van eiland kaarten
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Instellen op welke hoogte de sneeuw begint in sub-arctische landschap. Sneeuw heeft ook invloed op de industrie generatie en stadsgroei eisen
@@ -1331,9 +1337,9 @@ STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Eén of
STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Eén of meer vakjes aan de rand zijn geen water
STR_CONFIG_SETTING_STATION_SPREAD :Maximale stationsgrootte: {STRING}
-STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximum gebied waar onderdelen van één station op verspreid mogen zijn. Grotere gebieden vertragen het spel!
+STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximaal oppervlak waarover onderdelen van één station verspreid mogen zijn. Grotere oppervlakken vertragen het spel!
STR_CONFIG_SETTING_SERVICEATHELIPAD :Helikopters automatisch repareren op helipads: {STRING}
-STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Pleeg onderhoud aan elke helikopter na een landing, ook wanneer er geen depot aanwezig is op de luchthaven.
+STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Helikopteronderhoud na landing, ook als er geen hangar is op de luchthaven.
STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Verbind de knoppenbalk voor terreinvorming met die voor spoor/weg/water/vliegveld: {STRING}
STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Bij het openen van een werkbalk voor constructie van transport ook een werkbalk openen voor landschapsvorming.
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Gebruiker land kleur op de kleine kaart: {STRING}
@@ -1349,7 +1355,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Verplaats kaart
STR_CONFIG_SETTING_SCROLLMODE_LMB :Verplaats kaart met LMB
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Vloeiend scrollen kijkvenster: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave naar een specifieke positie schuift bij het klikken op de minikaart of bij het uitvoeren van een commando om naar een specifiek object op de kaart te scrollen. Indien ingeschakeld, dan scrollt het kijkvenster soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek
-STR_CONFIG_SETTING_MEASURE_TOOLTIP :Toon dimensie-informatie bij het gebruik van diverse bouwgereedschappen: {STRING}
+STR_CONFIG_SETTING_MEASURE_TOOLTIP :Maten weergeven bij het gebruik van diverse bouwgereedschappen: {STRING}
STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Geef tegelafstanden en hoogteverschillen weer bij het slepen tijdens het bouwen
STR_CONFIG_SETTING_LIVERIES :Laat alle voertuigkleuren zien: {STRING}
STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Beheer het gebruik van voertuigspecifieke levering voor voertuigen (in tegenstelling tot bedrijfsspecifieke leveringen).
@@ -1382,7 +1388,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Sluit window me
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Sluit een venster door met de rechtermuisknop erin te klikken. Schakelt de tooltip uit met de rechtermuisknop!
STR_CONFIG_SETTING_AUTOSAVE :Automatisch opslaan: {STRING}
-STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Kies interval tussen automatische spelopslag
+STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Kies tijdsduur voor automatische spelopslag
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Gebruik {STRING} datumformaat voor naamgeving van opgeslagen spellen
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formaat van de datum in savegamebestandsnamen
@@ -1400,11 +1406,11 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alles behalve l
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alle mogelijkheden
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Gebruik groepen voor voertuigenlijst: {STRING}
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakel het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen
-STR_CONFIG_SETTING_LOADING_INDICATORS :Gebruik laadindicatoren: {STRING}
+STR_CONFIG_SETTING_LOADING_INDICATORS :Laadpercentages gebruiken: {STRING}
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laadindicatoren worden weergegeven boven ladende of lossende voertuigen
-STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Toon dienstregeling in tikken ipv in dagen: {STRING}
-STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Toon reistijden in tijdtabellen in het spelticks in plaats van dagen
-STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Toon aankomst- en vertrektijden in dienstregeling: {STRING}
+STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING}
+STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in tijdtabellen in speltikken weergeven in plaats van dagen
+STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Aankomst- en vertrektijden in dienstregeling weergeven: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling
STR_CONFIG_SETTING_QUICKGOTO :Snel voertuigorders maken: {STRING}
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-selecteer de 'Ga naar cursor' bij het openen van de orders venster
@@ -1413,7 +1419,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Spoortype om te
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Eerst beschikbare
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Laatst beschikbare
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Meest gebruikte
-STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Toon gereserveerd spoor: {STRING}
+STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Gereserveerd spoor weergeven: {STRING}
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Geef gereserveerde tracks een andere kleur om te helpen met de problemen met treinen te weigeren een route op basis van blokken in te gaan
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Hou bouwgereedschappen actief na gebruik: {STRING}
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik
@@ -1421,11 +1427,11 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Groepeer uitgav
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster
STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING}
-STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffect voor samenvatting nieuwsberichten
+STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Geluidseffect afspelen bij korte nieuwsberichten
STR_CONFIG_SETTING_SOUND_NEWS :Krant: {STRING}
-STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Speel geluidseffect bij het tonen van de krant
+STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Geluidseffect weergeven bij nieuwsbericht
STR_CONFIG_SETTING_SOUND_NEW_YEAR :Einde jaar: {STRING}
-STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Speel geluidseffecten bij de samenvatting van resultaten gedurende het jaar ten opzichte van het jaar ervoor aan het einde van het jaar
+STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Geluidseffect afspelen bij jaaroverzicht van bedrijf t.o.v. vorig jaar
STR_CONFIG_SETTING_SOUND_CONFIRM :Bouw: {STRING}
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidseffecten bij succesvolle constructies of andere acties
STR_CONFIG_SETTING_SOUND_CLICK :Knop kliks: {STRING}
@@ -1439,14 +1445,14 @@ STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Speel omgevings
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Bouwen van infrastructuur uitschakelen wanneer geen geschikt voertuig beschikbaar is: {STRING}
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Wanneer je dit inschakelt, is de infrastructuur alleen beschikbaar als er ook voertuigen beschikbaar zijn. Dit voorkomt verspilling van tijd en geld aan onbruikbare infrastructuur
-STR_CONFIG_SETTING_MAX_TRAINS :Maximum aantal treinen per bedrijf: {STRING}
-STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maximum aantal treinen dat een bedrijf kan hebben
-STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximum aantal wegvoertuigen per bedrijf: {STRING}
+STR_CONFIG_SETTING_MAX_TRAINS :Maximumaantal treinen per bedrijf: {STRING}
+STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maximumaantal treinen dat een bedrijf kan hebben
+STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximumaantal wegvoertuigen per bedrijf: {STRING}
STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maximum aantal wegvoertuigen dat een bedrijf kan hebben
-STR_CONFIG_SETTING_MAX_AIRCRAFT :Maximum aantal vliegtuigen per bedrijf: {STRING}
-STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maximum aantal vliegtuigen dat een bedrijf kan hebben
-STR_CONFIG_SETTING_MAX_SHIPS :Maximum aantal schepen per bedrijf: {STRING}
-STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Maximum aantal schepen dat een bedrijf kan hebben
+STR_CONFIG_SETTING_MAX_AIRCRAFT :Maximumaantal vliegtuigen per bedrijf: {STRING}
+STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maximumaantal vliegtuigen dat een bedrijf kan hebben
+STR_CONFIG_SETTING_MAX_SHIPS :Maximumaantal schepen per bedrijf: {STRING}
+STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Maximumaantal schepen dat een bedrijf kan hebben
STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Treinen voor de computer uitschakelen: {STRING}
STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Het inschakelen van deze instelling maakt het bouwen van treinen onmogelijk voor een computerspeler
@@ -1466,55 +1472,55 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilijk
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Laat computerspelers toe in netwerkspel: {STRING}
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sta door computer gegenereerde speler toe deel te nemen in multiplayerspellen
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes voordat scripts worden gestopt: {STRING}
-STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximum aantal berekeningsstappen die een script kan maken in een beurt
+STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximumaantal berekeningsstappen die een script kan maken in een beurt
-STR_CONFIG_SETTING_SERVINT_ISPERCENT :Interval tussen onderhoud is een percentage: {STRING}
+STR_CONFIG_SETTING_SERVINT_ISPERCENT :Onderhoudstermijnen in procenten: {STRING}
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kies of onderhoud van de voertuigen wordt geactiveerd door verstreken tijd sinds het laatste onderhoud of door het zakken van de betrouwbaarheid met een bepaald percentage van de maximale betrouwbaarheid
-STR_CONFIG_SETTING_SERVINT_TRAINS :Standaard onderhoudsinterval voor treinen: {STRING}
-STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Stel de standaard service-interval voor nieuwe railvoertuigen, als er geen expliciete service-interval is ingesteld voor het voertuig
+STR_CONFIG_SETTING_SERVINT_TRAINS :Standaardonderhoudstermijn voor treinen: {STRING}
+STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Standaardonderhoudstermijn instellen voor nieuwe treinen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig
STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" en}/%
STR_CONFIG_SETTING_SERVINT_DISABLED :Uitgeschakeld
-STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standaard onderhoudsinterval voor wegvoertuigen: {STRING}
-STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Stel de standaard service-interval voor nieuwe wegvoertuigen, als er geen expliciete service-interval is ingesteld voor het voertuig
-STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standaard onderhoudsinterval voor vliegtuigen: {STRING}
-STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Stel de standaard service-interval voor nieuwe vliegtuigen, als er geen expliciete service-interval is ingesteld voor het voertuig
-STR_CONFIG_SETTING_SERVINT_SHIPS :Standaard onderhoudsinterval voor schepen: {STRING}
-STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Stel de standaard service-interval voor nieuwe schepen, als er geen expliciete service-interval is ingesteld voor het voertuig
-STR_CONFIG_SETTING_NOSERVICE :Schakel onderhoud uit wanneer defecten uit staan: {STRING}
-STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld zullen voertuigen niet onderhouden worden als niet kapot kunnen gaan.
+STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standaardonderhoudstermijn voor wegvoertuigen: {STRING}
+STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Standaardonderhoudstermijn voor nieuwe wegvoertuigen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig
+STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standaardonderhoudstermijn voor vliegtuigen: {STRING}
+STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Standaardonderhoudsterrmijn voor nieuwe vliegtuigen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig
+STR_CONFIG_SETTING_SERVINT_SHIPS :Standaardonderhoudstermijn voor schepen: {STRING}
+STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Standaardonderhoudstermijn voor nieuwe schepen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig
+STR_CONFIG_SETTING_NOSERVICE :Onderhoud uitschakelen wanneer defecten uit staan: {STRING}
+STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld worden voertuigen niet onderhouden als ze niet kapot kunnen gaan.
STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Schakel snelheidslimieten voor wagons aan: {STRING}
STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wanneer ingeschakeld, ook gebruik maken van snelheidsbeperkingen van wagons voor het bepalen van de maximale snelheid van een trein
STR_CONFIG_SETTING_DISABLE_ELRAILS :Schakel elektrische sporen uit: {STRING}
STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Het inschakelen van deze instelling schakelt de verplichting voor spoorelektrificatie voor elektrische treinen uit
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Eerste voertuig bij eigen station: {STRING}
-STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Toon een krant als het eerste voertuig arriveert op een station van de speler
+STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Nieuwsbericht weergeven als het eerste voertuig arriveert op een station van de speler
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Eerste voertuig bij station van een concurrent: {STRING}
-STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Toon een krant als het eerste voertuig arriveert op een nieuw station van een concurrent
+STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Nieuwsbericht weergeven als het eerste voertuig arriveert op een nieuw station van een concurrent
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Ongelukken / rampen: {STRING}
-STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Toon een krant bij ongevallen of rampen
+STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Nieuwsbericht weergeven bij ongevallen of rampen
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Bedrijfsinformatie: {STRING}
-STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Toon een krant als een nieuw bedrijf start, of wanneer een bedrijf het risico loopt om falliet te gaan
+STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Nieuwsbericht weergeven als een nieuw bedrijf start en wanneer een bedrijf bijna falliet gaat
STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Openen van industrieën: {STRING}
-STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Toon een krant als nieuwe industrieën worden geopend
+STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Nieuwsbericht weergeven als een nieuwe industrie worden opgericht
STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE :Sluiten van industrieën: {STRING}
-STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Toon een krant als industrieën sluiten
+STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Nieuwsbericht weergeven als een industrie sluit
STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Veranderingen in de economie: {STRING}
-STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Toon een krant over wereldwijde wijzigingen in de economie
+STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Nieuwsbericht weergeven over wereldwijde wijzigingen in de economie
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Productieveranderingen van industrieën bediend door het bedrijf: {STRING}
-STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Toon een krant als het productieniveau van een industrie verandert, die worden bediend door het bedrijf
+STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Nieuwsbericht weergeven als het productieniveau van een industrie verandert die wordt bediend door het bedrijf
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Productieveranderingen van industrieën bediend door concurrent(en): {STRING}
-STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Toon een krant als het productieniveau van een industrie verandert, die worden bediend door concurrenten
+STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Nieuwsbericht weergeven als het productieniveau van een industrie verandert die wordt bediend door een concurrent
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andere productieveranderingen van industrieën: {STRING}
-STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Toon een krant als het productieniveau van de industrie verandert, die niet worden bediend door het bedrijf of de concurrenten
+STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Nieuwsbericht weergeven als het productieniveau van een industrie verandert die niet wordt bediend door het bedrijf of een concurrent
STR_CONFIG_SETTING_NEWS_ADVICE :Advies / informatie over voertuigen van het bedrijf: {STRING}
-STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Toon berichten over voertuigen die aandacht nodig hebben
+STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Berichten weergeven over voertuigen die aandacht nodig hebben
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nieuwe voertuigen: {STRING}
-STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Toon een krant als een nieuw type voertuig beschikbaar komt
+STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Nieuwsbericht weergeven als een nieuw type voertuig beschikbaar komt
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Verandering van geaccepteerde vrachtsoorten: {STRING}
-STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Toon een bericht over gewijzigde acceptatie van goederen van stations
+STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Bericht weergeven over gewijzigde acceptatie van goederen van stations
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsidies: {STRING}
-STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Toon een krant over subsidie gerelateerde gebeurtenissen
+STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Nieuwsbericht weergeven over gebeurtenissen met subsidies
STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Algemene informatie: {STRING}
STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Geef krant weer over algemene gebeurtenissen, zoals de aankoop van exclusieve rechten of financiering van wegherstelling
@@ -1539,7 +1545,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecteer het g
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Plaats automatisch armseinen voor: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stel het jaar waarin elektrische seinen zal worden gebruikt voor sporen. Voor dit jaar zal niet-elektrische seinen worden gebruikt (die exact dezelfde functie hebben, maar verschillend uiterlijk)
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activeer de seininterface: {STRING}
-STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Toon een venster waar je de soorten seinen kunt kiezen om te bouwen in plaats van alleen vensterloze seintyperotatie met Ctrl+klikken op gebouwde seinen
+STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Een venster weergeven waar je de soorten seinen kunt kiezen om te bouwen in plaats van alleen bladeren door seintypes met Ctrl+klikken op gebouwde seinen
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Seintype dat standaard moet worden gebouwd: {STRING}
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Standaard te gebruiken sein.
STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normale seinen
@@ -1559,7 +1565,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 raster
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 raster
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Willekeurig
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Steden mogen wegen bouwen: {STRING}
-STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Sta steden toe om wegen te bouwen ten behoeve van groei. Schakel deze optie uit om gemeentebesturen ervan te weerhouden zelf wegen te bouwen.
+STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Steden toestaan om wegen te bouwen ten behoeve van groei. Schakel deze optie uit als je niet wilt dat gemeenten zelf wegen bouwen.
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Steden mogen gelijkvloerse kruisingen bouwen: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Door deze optie in te schakelen, kunnen steden gelijkvloerse kruisingen bouwen.
STR_CONFIG_SETTING_NOISE_LEVEL :Geluidsniveaucontrole door steden voor vliegvelden toestaan: {STRING}
@@ -1584,7 +1590,7 @@ STR_CONFIG_SETTING_SNAP_RADIUS :Windowssnap rad
STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen vensters voordat het venster wordt verplaatst wordt automatisch uitgelijnd naar de nabijgelegen vensters
STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s}
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Uitgeschakeld
-STR_CONFIG_SETTING_SOFT_LIMIT :Maximum aantal (niet-sticky) vensters: {STRING}
+STR_CONFIG_SETTING_SOFT_LIMIT :Maximumaantal (niet-blijvende) vensters: {STRING}
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Aantal niet-klevende open vensters voor oude vensters automatisch worden gesloten om ruimte voor nieuwe vensters te maken
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :uitgeschakeld
@@ -1605,7 +1611,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Langzaam
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normaal
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Snel
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Heel snel
-STR_CONFIG_SETTING_LARGER_TOWNS :Verhouding van gemeenten die steden zullen worden: {STRING}
+STR_CONFIG_SETTING_LARGER_TOWNS :Verhouding van gemeenten die uitgroeien tot steden: {STRING}
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Aantal steden die een stad worden, dus een stad die groter begint en sneller groeit
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 op {COMMA}
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Geen
@@ -1637,25 +1643,25 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. Cargodist zal de kortste route eerst verzadigen, gebruik dan de tweede kortste route tot die verzadigd is en ga zo maar door. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Zodra alle routes verzadigd zijn, maar er is meer vraag, zal alle wegen overbelast worden, die met hoge capaciteit eerst. In veel gevallen zat het algoritme niet nauwkeurig de capaciteit inschatten, helaas. Met deze instelling kunt u aangeven tot welk percentage een korter pad moet worden verzadigd eer de eerst volgende langere route wordt gekozen. Zet deze op minder dan 100% om overvolle stations in geval van overschat capaciteit te voorkomen.
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Snelheidseenheden: {STRING}
-STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een snelheid wordt weergegeven in de gebruikersinterface, dan moet het worden getoond in de geselecteerde eenheden
+STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een snelheid wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiaal (mph)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Voertuigkrachteenheden: {STRING}
-STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in de gebruikersinterface, dan moet het worden getoond in de geselecteerde eenheden
+STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperiaal (hp)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metrisch (hp)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Gewichtseenheden: {STRING}
-STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Wanneer er gewichten worden weergegeven in de gebruikersinterface, dan moeten ze worden getoond in de geselecteerde eenheden
+STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Wanneer gewichten worden weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperiaal (short t/ton)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metrisch (t/ton)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Volume-eenheden: {STRING}
-STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Wanneer volumes worden getoond in de gebruikersinterface, dan moeten ze worden getoond in de geselecteerde eenheden
+STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Wanneer volumes worden weergeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperiaal (gal)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metrisch (l)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³)
@@ -1667,7 +1673,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metrisch (kgf)
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Hoogte-eenheden: {STRING}
-STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Wanneer hoogtes worden weergegeven in de gebruikersinterface, moet het worden getoond in de geselecteerde eenheden
+STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Wanneer hoogtes worden weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperiaal (ft)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrisch (m)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
@@ -1707,7 +1713,7 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Routezoeker voo
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Routezoeker voor schepen: {STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Routezoeker voor schepen
STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisch omdraaien bij seinen: {STRING}
-STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Staat toe dat treinen omdraaien bij een sein als ze hier lang hebben staan wachten.
+STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Treinen mogen keren bij een sein als ze hier lang staan wachten
STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Verander waarde
@@ -1746,7 +1752,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Scoretab
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Instellingen
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen
STR_INTRO_ONLINE_CONTENT :{BLACK}Online inhoud zoeken
-STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Spel script Instellingen
+STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI-/spelscriptinstellingen
STR_INTRO_QUIT :{BLACK}Afsluiten
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start een nieuw spel. Ctrl+klik slaat de kaartconfiguratie over
@@ -1761,12 +1767,12 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Kies sub
STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies subtropisch klimaat
STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Kies speelgoedlandschap
-STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Toon spelopties
-STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Toon scoretabel
+STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Spelopties weergeven
+STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Scoretabel weergeven
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Scherminstellingen
-STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Toon NewGRF-instellingen
+STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen weergeven
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken naar nieuwe en aangepaste inhoud om te downloaden
-STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Toon AI/Game script instellingen
+STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}AI-/spelscriptinstellingen weergeven
STR_INTRO_TOOLTIP_QUIT :{BLACK}Verlaat 'OpenTTD'
STR_INTRO_BASESET :{BLACK}De huidige gekozen graphics set mist {NUM} afbeelding{P "" en}. Controleer of er updates zijn voor deze basisset.
@@ -1791,8 +1797,8 @@ STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
# Abandon game
-STR_ABANDON_GAME_CAPTION :{WHITE}Verlaat spel
-STR_ABANDON_GAME_QUERY :{YELLOW}Weet je zeker dat je dit spel wilt afsluiten?
+STR_ABANDON_GAME_CAPTION :{WHITE}Spel sluiten
+STR_ABANDON_GAME_QUERY :{YELLOW}Weet je zeker dat je dit spel wilt sluiten?
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je zeker dat je dit scenario wilt sluiten?
# Cheat window
@@ -1804,8 +1810,8 @@ STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spelen
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnels mogen elkaar kruisen: {ORANGE}{STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}Straalvliegtuigen storten niet (vaak) neer op kleine vliegvelden: {ORANGE} {STRING}
-STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Wijzig de maximum kaarthoogte: {ORANGE}{NUM}
-STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Wijzig de maximum hoogte van bergen op de kaart
+STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Wijzig de maximale kaarthoogte: {ORANGE}{NUM}
+STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Wijzig de maximale hoogte van bergen op de kaart
STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Gematigd landschap
STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Subarctisch landschap
STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Subtropisch landschap
@@ -1815,16 +1821,16 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wijzig h
STR_CHEAT_SETUP_PROD :{LTBLUE}Sta aanpassen productiewaarden toe: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nieuw kleurenschema
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - kleurenschema
-STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurenschema's
-STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Toon kleurenschema's voor treinen
-STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Toon kleurenschema's voor wegvoertuigen
-STR_LIVERY_SHIP_TOOLTIP :{BLACK}Toon kleurenschema's voor schepen
-STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Toon kleurenschema's voor vliegtuigen
+STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Algemene kleurenschema's weergeven
+STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Kleurenschema's voor treinen weergeven
+STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Kleurenschema's voor wegvoertuigen weergeven
+STR_LIVERY_SHIP_TOOLTIP :{BLACK}Kleurenschema's voor schepen weergeven
+STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Kleurenschema's voor vliegtuigen weergeven
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Kies de tweede kleur voor het geselecteerde schema. Ctrl+klik om deze kleur in alle schema's te gebruiken
-STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen, of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan/uit om het gebruik van het schema aan/uit te zetten
+STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan-uit om het schema aan-uit te zetten
STR_LIVERY_DEFAULT :Standaard kleurenschema
STR_LIVERY_STEAM :Stoomlocomotief
@@ -1975,13 +1981,13 @@ STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bescherm
STR_NETWORK_START_SERVER_UNADVERTISED :Nee
STR_NETWORK_START_SERVER_ADVERTISED :Ja
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s}
-STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum aantal spelers:
+STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximumaantal spelers:
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden
STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedr{P ijf ijven}
-STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximum aantal bedrijven:
+STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximumaantal bedrijven:
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal bedrijven
STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} toeschouwer{P "" s}
-STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximum aantal toeschouwers:
+STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximumaantal toeschouwers:
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal toeschouwers
STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Gesproken taal:
STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andere spelers zullen weten welke taal er wordt gesproken op de server
@@ -2275,15 +2281,15 @@ STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, Ope
# Transparency settings window
STR_TRANSPARENCY_CAPTION :{WHITE}Doorzichtigheidsopties
-STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Schakel transparantie voor stationsnamen aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Schakel transparantie voor bomen aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Schakel transparantie voor huizen aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Schakel transparantie voor industrieën aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Schakel transparantie voor gebouwen zoals stations, depots en controleposten aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Schakel transparantie voor bruggen aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Schakel transparantie voor gebouwen zoals vuurtorens en antennes aan/uit. Ctrl+klik om vast te zetten
-STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Schakel transparantie voor bovenleiding aan/uit. Ctrl+klik voor onthouden
-STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Schakel transparantie voor laadindicatoren aan/uit. Ctrl+klik om vast te zetten
+STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Transparantie voor stationsnamen aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Transparantie voor bomen aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Transparantie voor huizen aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Transparantie voor industrieën aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Transparantie aan-uit voor gebouwen zoals stations, remises en routepunten. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Transparantie voor bruggen aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Transparantie voor gebouwen zoals vuurtorens en zendmasten aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Transparantie voor bovenleiding aan-uit. Ctrl+klik om vast te zetten.
+STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transparantie voor laadpercentages aan-uit. Ctrl+klik om vast te zetten.
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Maak objecten onzichtbaar in plaats van transparant
# Linkgraph legend window
@@ -2311,8 +2317,8 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Biedt aa
STR_JOIN_STATION_CAPTION :{WHITE}Station samenvoegen
STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bouw een losstaand station
-STR_JOIN_WAYPOINT_CAPTION :{WHITE}Controlepost samenvoegen
-STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bouw een losstaande controlepost
+STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepunt samenvoegen
+STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Bouw spoorwegen
@@ -2322,13 +2328,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bouw magneetzwe
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Plaats spoor. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bouw spoor met de Autorail-methode. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten
-STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bouw treindepot (om treinen te kopen en te onderhouden). Shift schakelt tussen bouwen/inschatting van de kosten
-STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Bouw spoor om naar controlepost. Houd Ctrl ingedrukt om samen te voegen met andere controlepost. Shift schakelt tussen bouwen/inschatting van de kosten
+STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Remise bouwen (om treinen te kopen en te onderhouden). Shift schakelt tussen bouwen/kosten weergeven.
+STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Spoor ombouwen naar routepunt. Ctrl om samen te voegen met ander routepunt. Shift schakelt tussen bouwen/kosten weergeven.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bouw treinstation. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten
-STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Plaats seinen. Ctrl wisselt tussen armseinen/lichtseinen{}Slepen plaatst seinen langs een recht stuk spoor. Ctrl bouwt seinen tot de volgende wissel{}Ctrl+klik schakelt het openen van het keuzescherm voor seinen aan/uit. Shift schakelt tussen bouwen/inschatting van de kosten
+STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Seinen bouwen. Ctrl wisselt tussen armseinen/lichtseinen{}Slepen plaatst seinen langs een recht stuk spoor. Ctrl bouwt seinen tot de volgende wissel{}Ctrl+klik schakelt het openen van seinkeuzelijst aan-uit. Shift schakelt tussen bouwen/kosten weergeven.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bouw spoorbrug. Shift schakelt tussen bouwen/inschatting van de kosten
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Graaf spoortunnel. Shift schakelt tussen bouwen/inschatting van de kosten
-STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Kies tussen bouwen en verwijderen van sporen, seinen, controleposten en stations. Houd Ctrl ingedrukt om ook het spoor van controleposten en stations te verwijderen
+STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Schakelt tussen bouwen en verwijderen van sporen, seinen, routepunten en stations. Ctrl verwijdert ook het spoor van routepunten en stations.
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Verander spoortype. Shift schakelt tussen bouwen/inschatting van de kosten
STR_RAIL_NAME_RAILROAD :Spoorweg
@@ -2337,12 +2343,12 @@ STR_RAIL_NAME_MONORAIL :Monorail
STR_RAIL_NAME_MAGLEV :Zweeftrein
# Rail depot construction window
-STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Richting van treindepot
-STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van treindepot
+STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Richting van remise
+STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van remise
# Rail waypoint construction window
-STR_WAYPOINT_CAPTION :{WHITE}Controlepost
-STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecteer type controlepost
+STR_WAYPOINT_CAPTION :{WHITE}Routepunt
+STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Type routepunt selecteren
# Rail station construction window
STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Stationskeuze
@@ -2359,26 +2365,26 @@ STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selectee
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecteer het type station om te bouwen
STR_STATION_CLASS_DFLT :Standaardstation
-STR_STATION_CLASS_WAYP :Controleposten
+STR_STATION_CLASS_WAYP :Routepunten
# Signal window
-STR_BUILD_SIGNAL_CAPTION :{WHITE}Seinkeuze
+STR_BUILD_SIGNAL_CAPTION :{WHITE}Seinselectie
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Bloksein (armsein){}Dit is het simpelste soort sein dat slechts één trein tegelijk in hetzelfde blok toelaat
-STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Ingangssein (semafoor){}Groen zolang als er één of meer groene uitgangsseinen zijn volgend na dit sein. Anders is deze rood
-STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Uitgangssein (armsein){}Gedraagt zich hetzelfde als een gewoon bloksein, maar is nodig om ingangs- en combinatieseinen te sturen
-STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Combinatiesein (armsein){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van beginseinen maken
+STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Ingangssein (armsein){}Groen als er een groen uitgangssein is uit het volgende blok. Anders rood.
+STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Uitgangssein (armsein){}Gedraagt zich hetzelfde als een standaardsein, maar is nodig om ingangs- en combinatie-voorseinen aan te sturen
+STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Combinatiesein (armsein){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van voorseinen maken
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Routesein (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd
-STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd
+STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Eénrichtingsroutesein (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eénrichtingsrouteseinen kunnen niet van achteren worden gepasseerd.
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standaardsein (elektrisch){}Seinen zijn nodig om te voorkomen dat treinen botsen bij netwerken met meer dan één trein
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Ingangssein (elektrisch){}Groen als er meer dan één groen uitgangssein is in de volgende sectie. Anders is deze rood
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Uitgangssein (elektrisch){}Gedraagt zich hetzelfde als een standaardsein, maar is nodig om ingangs- & combinatie-seinen aan te sturen
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combinatiesein (elektrisch){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van beginseinen maken
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Routeseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd
-STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd
-STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Sein ombouwen{}Als dit geselecteerd is, dan zal door te klikken op een bestaand sein deze worden omgebouwd naar het geselecteerde seintype en variant, Ctrl+klik verandert de bestaande variant (armsein/elektrisch). Shift+klik toont de geschatte ombouwkosten
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dichtheid van seinen bij het slepen
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Verklein dichtheid van seinen bij het slepen
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Vergroot dichtheid van seinen bij het slepen
+STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Eénrichtingsroutesein (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eénrichtingsrouteseinen kunnen niet van achteren worden gepasseerd.
+STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Sein ombouwen{}Als dit geselecteerd is, dan kun je door klikken een bestaand sein ombouwen naar het geselecteerde seintype en variant, Ctrl+klik verandert de bestaande variant (armsein/elektrisch). Shift+klik geeft de geschatte ombouwkosten.
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen verkleinen
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen vergroten
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies type spoorbrug
@@ -2386,14 +2392,14 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Kies typ
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuze - klik op de gewenste brug om die te bouwen
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
-STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, Staal
-STR_BRIDGE_NAME_GIRDER_STEEL :Koker, Staal
-STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, Staal
-STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hangend, Beton
+STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, staal
+STR_BRIDGE_NAME_GIRDER_STEEL :Ligger, staal
+STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, staal
+STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hangend, beton
STR_BRIDGE_NAME_WOODEN :Hout
STR_BRIDGE_NAME_CONCRETE :Beton
-STR_BRIDGE_NAME_TUBULAR_STEEL :Buis, Staal
-STR_BRIDGE_TUBULAR_SILICON :Buis, Silicium
+STR_BRIDGE_NAME_TUBULAR_STEEL :Buis, staal
+STR_BRIDGE_TUBULAR_SILICON :Buis, silicium
# Road construction toolbar
@@ -2420,8 +2426,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Kies tus
# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Richting van garage
STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecteer richting van garage
-STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Richting van tramdepot
-STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecteer richting van tramdepot
+STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Richting van tramremise
+STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecteer richting van tramremise
# Road vehicle station construction window
STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Richting van bushalte
@@ -2466,7 +2472,7 @@ STR_AIRPORT_SMALL :Klein
STR_AIRPORT_CITY :Stad
STR_AIRPORT_METRO :Grootstedelijk
STR_AIRPORT_INTERNATIONAL :Internationaal vliegveld
-STR_AIRPORT_COMMUTER :Pendel
+STR_AIRPORT_COMMUTER :Forens
STR_AIRPORT_INTERCONTINENTAL :Intercontinentaal
STR_AIRPORT_HELIPORT :Heliport
STR_AIRPORT_HELIDEPOT :Helihangar
@@ -2474,7 +2480,7 @@ STR_AIRPORT_HELISTATION :Helikopterstati
STR_AIRPORT_CLASS_SMALL :Kleine vliegvelden
STR_AIRPORT_CLASS_LARGE :Grote vliegvelden
-STR_AIRPORT_CLASS_HUB :Centraal vliegveld
+STR_AIRPORT_CLASS_HUB :Knooppuntvliegvelden
STR_AIRPORT_CLASS_HELIPORTS :Helikoptervliegvelden
STR_STATION_BUILD_NOISE :{BLACK}Geluidsoverlast: {GOLD}{COMMA}
@@ -2483,12 +2489,12 @@ STR_STATION_BUILD_NOISE :{BLACK}Geluidso
STR_LANDSCAPING_TOOLBAR :{WHITE}Terreinvorming
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Verlaag een hoek van het land. Slepen verlaagt de eerste geselecteerde hoek en brengt het geselecteerde gebied naar de hoogte van die hoek. Ctrl selecteert het gebied diagonaal. Shift maakt een inschatting van de kosten
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Verhoog een hoek van het land. Slepen verhoogt de eerste geselecteerde hoek en brengt het geselecteerde gebied naar de hoogte van die hoek. Ctrl selecteert het gebied diagonaal. Shift maakt een inschatting van de kosten
-STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Egaliseer land naar de hoogte van de eerst geselecteerde hoek. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/tonen verwachte kosten
-STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Koop land voor toekomstig gebruik. Shift+klik wisselt tussen bouwen/tonen verwachte kosten
+STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Land egaliseren op hoogte van eerst geselecteerde hoek. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven.
+STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Land kopen voor toekomstig gebruik. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven.
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Keuze van object
-STR_OBJECT_BUILD_TOOLTIP :{BLACK}Kies het te bouwen object. Shift+Klik wisselt tussen bouwen/tonen verwachte kosten
+STR_OBJECT_BUILD_TOOLTIP :{BLACK}Object selecteren voor bouwen. Shift+Klik wisselt tussen bouwen/verwachte kosten weergeven.
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Kies klasse van het te bouwen object
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Bekijk het object
STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} tegels
@@ -2500,7 +2506,7 @@ STR_OBJECT_CLASS_TRNS :Zendmasten
STR_PLANT_TREE_CAPTION :{WHITE}Bomen
STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, zullen er meer bomen van verschillende types bijkomen, onafhankelijk van het geselecteerde type.
STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen
-STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plant bomen van willekeurige soort. Shift+klik wisselt tussen bouwen/toont verwachte kosten
+STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten.
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant bomen willekeurig over de kaart
@@ -2521,7 +2527,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Weet je
# Town generation window (SE)
STR_FOUND_TOWN_CAPTION :{WHITE}Stadsontwikkeling
STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nieuwe stad
-STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Sticht nieuwe stad. Shift+klik toont alleen de verwachte kosten
+STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Nieuwe stad stichten. Shift+klik geeft alleen de verwachte kosten.
STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Willekeurige stad
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Sticht stad op willekeurige locatie
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veel willekeurige steden
@@ -2568,14 +2574,14 @@ STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Accepter
STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Huizen
STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klik op de industrie om de leveranciers en klanten te zien
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klik op de vracht om de leveranciers en klanten te zien
-STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Toon keten
-STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Toon vracht leverende en accepterende industrieën
+STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Keten weergeven
+STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Industrieën weergeven die vracht leveren en accepteren
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link naar de kleine kaart
-STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Kies de getoonde industrie ook in de kleine kaart
+STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Weergegeven industrieën ook op de kleine kaart selecteren
STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Kies vracht
-STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Kies de vracht om te tonen
+STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Vracht selecteren voor weergeven
STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Kies bedrijf
-STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Kies het bedrijf om te tonen
+STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Bedrijf selecteren voor weergeven
# Land area window
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Landinformatie
@@ -2657,7 +2663,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Vrachtwagenlaad
STR_LAI_STATION_DESCRIPTION_BUS_STATION :Bushalte
STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Haven
STR_LAI_STATION_DESCRIPTION_BUOY :Boei
-STR_LAI_STATION_DESCRIPTION_WAYPOINT :Controlepost
+STR_LAI_STATION_DESCRIPTION_WAYPOINT :Routepunt
STR_LAI_WATER_DESCRIPTION_WATER :Water
STR_LAI_WATER_DESCRIPTION_CANAL :Kanaal
@@ -2691,57 +2697,57 @@ STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Aquaduct
STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Radiomast
STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Vuurtoren
-STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Bedrijfshoofdkwartier
+STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Hoofdkantoor
STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedrijfseigendom
# About OpenTTD window
STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD
-STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele copyright {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden
+STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele auteursrecht {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden
STR_ABOUT_VERSION :{BLACK}OpenTTD-versie {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Het OpenTTD-team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Het OpenTTD-team
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Frame rate
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
-STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulatiesnelheid: {STRING}
-STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde gameticks per seconde.
-STR_FRAMERATE_RATE_BLITTER :{WHITE}Graphics frame rate: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulatiesnelheid: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde speltikken per seconde.
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafische framesnelheid: {STRING}
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal videoframes die weergegeven worden per seconde.
-STR_FRAMERATE_SPEED_FACTOR :{WHITE}Huidige spelsnelheidsfactor: {DECIMAL}x
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Huidige spelsnelheidsfactor: {DECIMAL}x
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe snel het spel momenteel draait, vergeleken met de verwachte snelheid bij een normale simulatiesnelheid.
STR_FRAMERATE_CURRENT :{WHITE}Huidig
STR_FRAMERATE_AVERAGE :{WHITE}Gemiddelde
-STR_FRAMERATE_DATA_POINTS :{WHITE}Gegevens gebaseerd op {COMMA} metingen
-STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms
-STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms
-STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms
-STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} frames/s
-STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} frames/s
-STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} frames/s
+STR_FRAMERATE_DATA_POINTS :{BLACK}Gegevens gebaseerd op {COMMA} metingen
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
-STR_FRAMERATE_GAMELOOP :{WHITE}Gamelooptotaal:
-STR_FRAMERATE_GL_ECONOMY :{WHITE} Cargoafhandeling:
-STR_FRAMERATE_GL_TRAINS :{WHITE} Treinticks:
-STR_FRAMERATE_GL_ROADVEHS :{WHITE} Wegvoertuigticks:
-STR_FRAMERATE_GL_SHIPS :{WHITE} Schipticks:
-STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Vliegtuigticks:
-STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Wereldticks:
-STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Link grafiekvertraging:
-STR_FRAMERATE_DRAWING :{WHITE}Graphics weergeven:
-STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Wereldkijkvensters:
-STR_FRAMERATE_VIDEO :{WHITE}Video-output:
-STR_FRAMERATE_SOUND :{WHITE}Geluid mixen:
+STR_FRAMERATE_GAMELOOP :{BLACK}Spellustotaal:
+STR_FRAMERATE_GL_ECONOMY :{BLACK} Vrachtafhandeling:
+STR_FRAMERATE_GL_TRAINS :{BLACK} Treintikken:
+STR_FRAMERATE_GL_ROADVEHS :{BLACK} Wegvoertuigtikken:
+STR_FRAMERATE_GL_SHIPS :{BLACK} Scheepstikken:
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Vliegtuigtikken:
+STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Wereldtikken:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Vertraging koppelinggrafiek:
+STR_FRAMERATE_DRAWING :{WHITE}Grafische weergave:
+STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Wereldkijkvensters:
+STR_FRAMERATE_VIDEO :{BLACK}Video-uitvoer:
+STR_FRAMERATE_SOUND :{BLACK}Geluid mengen:
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Gameloop
STR_FRAMETIME_CAPTION_GL_ECONOMY :Cargoafhandeling
-STR_FRAMETIME_CAPTION_GL_TRAINS :Treinticks
-STR_FRAMETIME_CAPTION_GL_ROADVEHS :Wegvoertuigticks
-STR_FRAMETIME_CAPTION_GL_SHIPS :Schipticks
-STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigticks
-STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldticks
+STR_FRAMETIME_CAPTION_GL_TRAINS :Treintikken
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Wegvoertuigtikken
+STR_FRAMETIME_CAPTION_GL_SHIPS :Scheepstikken
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigtikken
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldtikken
STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Link grafiekvertraging
STR_FRAMETIME_CAPTION_DRAWING :Graphics weergeven
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Wereldkijkvenster weergeven
@@ -2772,6 +2778,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spel det
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen informatie beschikbaar
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
+STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtertekenreeks:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Bestand overschrijven
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Weet je zeker dat je het bestaande bestand wilt overschrijven?
STR_SAVELOAD_OSKTITLE :{BLACK}Voer een naam in voor het spel dat moet worden opgeslagen
@@ -2783,9 +2792,9 @@ STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Aantal steden:
STR_MAPGEN_DATE :{BLACK}Datum:
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Aantal industrieën:
-STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximum kaarthoogte
-STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog de maximum hoogte van bergen op de kaart met één
-STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verklein de maximum hoogte van bergen op de kaart met één
+STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximale kaarthoogte
+STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog de maximale hoogte van bergen op de kaart met één
+STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verklein de maximale hoogte van bergen op de kaart met één
STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hoogte van sneeuwgrens:
STR_MAPGEN_SNOW_LINE_UP :{BLACK}Verhoog de sneeuwgrens met één
STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Verlaag de sneeuwgrens met één
@@ -2815,7 +2824,7 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Naam van
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grootte:
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
-STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Wijzig maximum kaarthoogte
+STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Maximale kaarthoogte wijzigen
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Verander hoogte van sneeuwgrens
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander startjaar
@@ -2889,7 +2898,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versie:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Laagste compatibele versie: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standaard (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standaard (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Oorspronkelijk (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Oorspronkelijk (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Geen
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Geen informatie beschikbaar
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Bestand niet gevonden
@@ -2964,12 +2978,14 @@ STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laden van {1:ST
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte sprite (sprite {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Onbekende Action 0-eigenschap {4:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldig ID te gebruiken (sprite {3:NUM})
-STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige afbeelding. Alle ongeldige afbeeldingen worden getoond als een rood vraagteken (?)
+STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige sprite. Alle ongeldige sprites worden weergegeven als een rood vraagteken (?).
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere Action 8-invoer (sprite {3:NUM})
STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-sprite gelezen (sprite {3:NUM})
STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-middelen niet beschikbaar (sprite {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldig/onbekend spritelay-outformaat (sprite {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (sprite {3:NUM}, eigenschap {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Waarschuwing!
@@ -3034,7 +3050,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Geef een
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Steden
STR_TOWN_DIRECTORY_NONE :{ORANGE} Geen
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
-STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Groeistad){BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (groeistad){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Plaatsnamen - klik op naam om het scherm te centreren op de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad
STR_TOWN_POPULATION :{BLACK}Wereldbevolking: {COMMA}
@@ -3070,7 +3086,7 @@ STR_LOCAL_AUTHORITY_CAPTION :{WHITE} Gemeent
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Reputatie van transportbedrijven:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Mogelijkheden:
-STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lijst met dingen die mogelijk zijn in deze gemeente - klik op een item voor meer details
+STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lijst met dingen die mogelijk zijn in deze gemeente - klik op een onderdeel voor meer details
STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Doe het
STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Voer de actie uit die in de bovenstaande lijst is geselecteerd
@@ -3081,7 +3097,7 @@ STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Betaal wegrepar
STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Bouw standbeeld van directeur
STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financier nieuwe gebouwen
STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koop exclusieve transportrechten
-STR_LOCAL_AUTHORITY_ACTION_BRIBE :Koop de gemeenteraad om
+STR_LOCAL_AUTHORITY_ACTION_BRIBE :Gemeentebestuur omkopen
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin een kleine reclamecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG}
@@ -3089,7 +3105,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin e
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een herstelling van het wegennetwerk. Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bouw een standbeeld ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financier de bouw van nieuwe commerciële gebouwen in de stad.{}Kosten: {CURRENCY_LONG}
-STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Koop 1 jaar exclusieve transportrechten in deze plaats. De gemeenteraad staat passagiers en vracht alleen toe om jouw stations te gebruiken.{}Kosten: {CURRENCY_LONG}
+STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1 jaar exclusieve transportrechten kopen in deze plaats. Het gemeentebestuur staat alleen passagiers en vracht toe bij jouw stations.{}Kosten: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop het plaatselijk gezag om om je reputatie te verhogen met het risico op een strenge sanctie wanneer je gepakt wordt.{}Kosten: {CURRENCY_LONG}
# Goal window
@@ -3102,7 +3118,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- Niet
STR_GOALS_PROGRESS :{ORANGE}{STRING}
STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING}
STR_GOALS_COMPANY_TITLE :{BLACK}Bedrijfsdoelen:
-STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel om venster te centreren op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op industrie/stad/tegel locatie
+STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel centreert venster op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op de locatie van de industrie/stad/tegel.
# Goal question window
STR_GOAL_QUESTION_CAPTION_QUESTION :Vraag
@@ -3141,8 +3157,8 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING
STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op de dienst om het dorp/industrie te centreren. Ctrl+klik opent een nieuw venster op de locatie van het dorp/industrie
# Story book window
-STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Verhaallijn
-STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Algemene verhaallijn
+STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} - verhaal
+STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Algemeen verhaal
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Spring naar een bepaalde pagina door deze te selecteren in deze keuzelijst.
@@ -3154,7 +3170,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Ongeldige
# Station list window
STR_STATION_LIST_TOOLTIP :{BLACK}Stationsnamen - klik op naam om het scherm te centreren op het station. Ctrl+klik opent een nieuw venster op de locatie van het station
-STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Houd Ctrl ingedrukt om meer items te kiezen
+STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Houd Ctrl ingedrukt om meer onderdelen te kiezen
STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Station{P "" s}
STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES}
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
@@ -3230,12 +3246,12 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom
# Waypoint/buoy view window
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
-STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centreer scherm op de locatie van de controlepost. Ctrl+klik opent een nieuw venster op de locatie van de controlepost
-STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Verander naam controlepost
-STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centreer hoofdscherm op boeilocatie. Ctrl+klik opent een nieuw venster op de locatie van de boei
-STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Verander naam boei
+STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Scherm centreren op routepunt. Ctrl+klik opent nieuw venster op locatie van routepunt.
+STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Naam routepunt aanpassen
+STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Hoofdscherm centreren op locatie van boei. Ctrl+klik opent een nieuw venster op de locatie van de boei.
+STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Naam van boei aanpassen
-STR_EDIT_WAYPOINT_NAME :{WHITE}Naam controlepost aanpassen
+STR_EDIT_WAYPOINT_NAME :{WHITE}Naam routepunt aanpassen
# Finances window
STR_FINANCES_CAPTION :{WHITE}{COMPANY} Financiën {BLACK}{COMPANY_NUM}
@@ -3259,7 +3275,7 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN
STR_FINANCES_TOTAL_CAPTION :{WHITE}Totaal:
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Banksaldo
STR_FINANCES_LOAN_TITLE :{WHITE}Lening
-STR_FINANCES_MAX_LOAN :{WHITE}Maximum lening: {BLACK}{CURRENCY_LONG}
+STR_FINANCES_MAX_LOAN :{WHITE}Maximale lening: {BLACK}{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}Leen {CURRENCY_LONG}
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Vergroot lening. Ctrl+klik om zoveel als mogelijk te lenen
@@ -3289,12 +3305,12 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA}
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} vliegveld{P "" en}
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Geen
-STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bouw bedrijfshoofdkwartier
-STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bouw bedrijfshoofdkwartier
-STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Bekijk bedrijfshoofdkwartier
-STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Toon bedrijfshoofdkwartier
-STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Verplaats bedrijfshoofdkwartier
-STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Herbouw bedrijfshoofdkwartier ergens anders voor 1% van de bedrijfswaarde. Shift+klik toont verwachte kosten zonder hoofdkwartier te verplaatsen
+STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Hoofdkantoor bouwen
+STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Hoofdkantoor bouwen
+STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Hoofdkantoor bekijken
+STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Hoofdkantoor weergeven
+STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Hoofdkantoor verplaatsen
+STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Hoofdkantoor verplaatsen voor 1% van de bedrijfswaarde. Shift+klik geeft de verwachte kosten zonder hoofdkantoor te verplaatsen.
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Bekijken gedetailleerde aantallen infrastructuur
@@ -3309,8 +3325,8 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Verander
STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Koop een aandeel van 25% in dit bedrijf
STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Verkoop een aandeel van 25% in dit bedrijf
-STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Koop een aandeel van 25% in dit bedrijf. Shift+klik toont verwachte kosten zonder te kopen
-STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Verkoop een aandeel van 25% in dit bedrijf. Shift+klik toont verwachte kosten zonder te kopen
+STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Koop een aandeel van 25% in dit bedrijf. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Verkoop een aandeel van 25% in dit bedrijf. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Bedrijfsnaam
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Naam van directeur
@@ -3347,21 +3363,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wachtend{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander productie (veelvoud van 8, maximaal 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander productieniveau (percentage, maximaal 800%)
@@ -3378,7 +3387,7 @@ STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Vliegtui
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Winst dit jaar: {CURRENCY_LONG} (vorig jaar: {CURRENCY_LONG})
-STR_VEHICLE_LIST_AVAILABLE_TRAINS :Beschikbare railvoertuigen
+STR_VEHICLE_LIST_AVAILABLE_TRAINS :Beschikbare spoorvoertuigen
STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Beschikbare wegvoertuigen
STR_VEHICLE_LIST_AVAILABLE_SHIPS :Beschikbare schepen
STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Beschikbare vliegtuigen
@@ -3414,6 +3423,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepen
STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om een groep te creëren
STR_GROUP_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde groep
STR_GROUP_RENAME_TOOLTIP :{BLACK}Hernoem de geselecteerde groep
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Wijzig het uiterlijk van de geselecteerde groep
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik om deze groep te beschermen tegen globaal automatisch vervangen
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Verwijder groep
@@ -3457,30 +3467,31 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacite
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Aangedreven wagons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Om te bouwen naar: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Alle vrachttypen
+STR_PURCHASE_INFO_NONE :Geen
STR_PURCHASE_INFO_ALL_BUT :Alles behalve {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. trekkracht: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Bereik: {GOLD}{COMMA} tegels
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Vliegtuig type: {GOLD}{STRING}
-STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Spoorvoertuigkeuzelijst. Klik op een spoorvoertuig voor informatie. Ctrl+klik voor het aan/uitzetten van het verbergen van het voertuigtype
-STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigkeuzelijst. Klik op een wegvoertuig voor informatie. Ctrl+klik om het verbergen van het voertuigtype aan/uit te zetten.
-STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Schipskeuzelijst. Klik op een schip voor informatie. Ctrl+klik voor het aan/uitzetten voor het verbergen van het schipstype
-STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigkeuzelijst. Klik op een vliegtuig voor informatie. Ctrl+klik voor om het verbergen van het vliegtuigtype aan te zetten
+STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Spoorvoertuigkeuzelijst. Klik op een spoorvoertuig voor informatie. Ctrl+klik voor spoorvoertuigtype weergeven-verbergen.
+STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigkeuzelijst. Klik op wegvoertuig voor informatie. Ctrl+klik voor voertuigtype weergeven-verbergen.
+STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Scheepskeuzelijst. Klik op een schip voor informatie. Ctrl+klik voor scheepstype weergeven-verbergen.
+STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigkeuzelijst. Klik op vliegtuig voor informatie. Ctrl+klik voor vliegtuigtype weergeven-verbergen.
-STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Koop spoorvoertuig
-STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Koop wegvoertuig
-STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Koop schip
-STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Koop vliegtuig
+STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Spoorvoertuig kopen
+STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Wegvoertuig kopen
+STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schip kopen
+STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Vliegtuig kopen
-STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde spoorvoertuig. Shift+klik toont verwachte kosten zonder te kopen
-STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik toont verwachte kosten zonder te kopen
-STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik toont verwachte kosten zonder te kopen
-STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik toont verwachte kosten zonder te kopen
+STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Geselecteerd spoorvoertuig bouwen. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik geeft de verwachte kosten zonder te kopen
+STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik geeft de verwachte kosten zonder te kopen.
-STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoem
-STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoem
-STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoem
-STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Hernoem
+STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoemen
+STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoemen
+STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoemen
+STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Hernoemen
STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Hernoem type spoorvoertuig
STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Hernoem type wegvoertuig
@@ -3488,21 +3499,21 @@ STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Hernoem
STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Hernoem type vliegtuig
STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Verberg
-STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verberg
-STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}Verberg
-STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}Verberg
+STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen
+STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen
+STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen
-STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}Toon
-STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}Toon
-STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Toon
-STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Toon
+STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven
+STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven
+STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven
+STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven
-STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het treintype
-STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het wegvoertuigtype
-STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het schipstype
-STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het vliegtuigtype
+STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Type spoorvoertuig weergeven-verbergen
+STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wegvoertuigtype weergeven-verbergen
+STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Scheepstype weergeven-verbergen
+STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vliegtuigtype weergeven-verbergen
-STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Hernoem type van railvoertuig
+STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Hernoem type spoorvoertuig
STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Hernoem type van wegvoertuig
STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Hernoem type van schip
STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Hernoem type van vliegtuig
@@ -3511,7 +3522,7 @@ STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Hernoem
STR_DEPOT_CAPTION :{WHITE}{DEPOT}
STR_DEPOT_RENAME_TOOLTIP :{BLACK}Hernoem depot
-STR_DEPOT_RENAME_DEPOT_CAPTION :Hernoem depot
+STR_DEPOT_RENAME_DEPOT_CAPTION :Depot hernoemen
STR_DEPOT_NO_ENGINE :{BLACK}-
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
@@ -3523,7 +3534,7 @@ STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoert
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Schepen - rechts-klik op schip voor informatie
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuig - rechts-klik op vliegtuig voor informatie
-STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Sleep railvoertuig hier om het te verkopen
+STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Sleep trein hierheen om te verkopen
STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Sleep wegvoertuig hier om het te verkopen
STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Sleep schip hier om het te verkopen
STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Sleep vliegtuig hier om het te verkopen
@@ -3540,12 +3551,12 @@ STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Vervang
STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Vervang automatisch alle schepen in het dok
STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Vervang automatisch alle vliegtuigen in de hangar
-STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe railvoertuigen
+STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe treinen
STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe wegvoertuigen
STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe schepen
STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe vliegtuigen
-STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw railvoertuig
+STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuwe trein
STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw wegvoertuig
STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw schip
STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw vliegtuig
@@ -3555,15 +3566,15 @@ STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Kloon we
STR_DEPOT_CLONE_SHIP :{BLACK}Kloon schip
STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Kloon vliegtuig
-STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van een trein inclusief wagons. Klik op deze knop en dan op een trein binnen of buiten het depot. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
-STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van een wegvoertuig. Klik op deze knop en dan op een wegvoertuig binnen of buiten de garage. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
-STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van een schip. Klik op deze knop en dan op een schip binnen of buiten het dok. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
-STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hierdoor wordt een kopie gekocht van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
+STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een trein, inclusief wagons. Klik op deze knop en dan op een trein binnen of buiten het depot. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een wegvoertuig. Klik op deze knop en dan op een wegvoertuig binnen of buiten de garage. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een schip. Klik op deze knop en dan op een schip binnen of buiten het dok. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hiermee koop je een kopie van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
-STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van het treindepot. Ctrl+klik opent een nieuw scherm op de locatie van het treindepot
+STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Scherm centreren op remise. Ctrl+klik opent een nieuw scherm op locatie van remise.
STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de garage. Ctrl+klik opent een nieuw scherm op de locatie van de garage
STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centreer hoofdscherm op de locatie van het dok. Ctrl+klik opent een nieuw scherm op de locatie van het dok
-STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de hangar. Ctrl+klik opent een nieuw venster op de hangar locatie
+STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Scherm centreren op hangar. Ctrl+klik opent een nieuw venster op de hangarlocatie.
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Geef een lijst van alle treinen met dit depot in hun orders
STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Geef een lijst van alle wegvoertuigen met deze garage in hun orders
@@ -3628,7 +3639,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klik op
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Wissel tussen locomotief- en wagonvervangvensters
STR_REPLACE_ENGINES :Motoren
STR_REPLACE_WAGONS :Wagons
-STR_REPLACE_ALL_RAILTYPE :Alle spoorvoertuigen
+STR_REPLACE_ALL_RAILTYPE :Alle treinen
STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecteer een spoortype waar je locomotieven voor wilt vervangen
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Dit geeft weer waarmee de links geselecteerde locomotief vervangen wordt
@@ -3653,10 +3664,10 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur we
STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur schip naar dok. Ctrl+klik voor alleen onderhoud
STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur vliegtuig naar hangar. Ctrl+klik voor alleen onderhoud
-STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hierdoor wordt een kopie gekocht van deze trein inclusief wagons. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
-STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hierdoor wordt een kopie gekocht van dit wegvoertuig. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
-STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hierdoor wordt een kopie gekocht van dit schip. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
-STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van dit vliegtuig. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen
+STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hiermee koop je een kopie van deze trein, inclusief wagons. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hiermee koop je een kopie van dit wegvoertuig. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hiermee koop je een kopie gekocht van dit schip. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
+STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hiermee koop je een kopie van dit vliegtuig. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forceer trein verder te rijden zonder te wachten op een groen sein
@@ -3668,15 +3679,15 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Bouw vli
STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Keer trein om
STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Dwing het wegvoertuig te keren.
-STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Toon orders van de trein. Ctrl+klik toont het tijdschema van de trein
-STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Toon orders van het wegvoertuig. Ctrl+klik toont tijdschema van het voertuig
-STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Toon orders van het schip. Ctrl+klik toont tijdschema van het schip
-STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Toon orders van het vliegtuig. Ctrl+klik toont het tijdschema van het vliegtuig
+STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Orders van trein weergeven. Ctrl+klik geeft dienstregeling van trein.
+STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Orders van wegvoertuig weergeven. Ctrl+klik geeft de dienstregeling van het voertuig.
+STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Orders van schip weergeven. Ctrl+klik geeft dienstregeling van schip.
+STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Orders van vliegtuig weergeven. Ctrl+klik geeft de dienstregeling van het vliegtuig.
-STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van trein
-STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van wegvoertuig
-STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van schip
-STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van vliegtuig
+STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Details van trein weergeven
+STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Details van wegvoertuig weergeven
+STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Details van schip weergeven
+STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Details van vliegtuig weergeven
STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van trein - klik hier om de trein te starten/stoppen. Ctrl+klik om naar bestemming te scrollen
STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van wegvoertuig - klik hier om voertuig te starten/stoppen. Ctrl+klik om naar bestemming te scrollen
@@ -3737,10 +3748,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacite
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Geldoverdracht: {LTBLUE}{CURRENCY_LONG}
-STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Onderhoudsinterval: {LTBLUE}{COMMA}{NBSP}dagen{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG}
-STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Onderhoudsinterval: {LTBLUE}{COMMA}%{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG}
-STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Vergroot onderhoudsinterval met 10. Ctrl+klik verhoogt interval met 5
-STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Verklein onderhoudsinterval met 10. Ctrl+klik verlaagt interval met 5
+STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}{NBSP}dagen{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG}
+STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}%{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG}
+STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Onderhoudstermijn met 10 verlengen. Ctrl+klik verlengt termijn met 5.
+STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Onderhoudstermijn met 10 verkorten. Ctrl+klik verkort termijn met 5
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Wijzig onderhoudsintervaltype
STR_VEHICLE_DETAILS_DEFAULT :Standaard
@@ -3856,6 +3867,7 @@ STR_ORDER_CONDITIONAL_AGE :Leeftijd (jaren
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Heeft onderhoud nodig
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Altijd
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Resterende levensverwachting (jaren)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximale betrouwbaarheid
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Op welke manier vergelijken van de voertuiginfo bij de opgegeven waarde
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is gelijk aan
@@ -3886,7 +3898,7 @@ STR_ORDER_CONDITIONAL :Voorwaardelijk
STR_ORDER_SHARE :Orders delen
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Voeg een nieuwe order toe voor de geselecteerde order, of voeg het toe aan het eind van de lijst. Ctrl+klik maakt stationsorders "Eén soort vracht volledig laden", controlepost-orders "Ga non-stop via" en depot-orders "Onderhoud bij". "Orders delen" of Ctrl laat dit voertuig de orders delen met het geselecteerde voertuig. Klikken op een voertuig kopieert de orders van dat voertuig. Een depot order schakelt automatisch onderhoud van een voertuig uit.
-STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Toon alle voertuigen met dezelfde gedeelde orders
+STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Alle voertuigen weergeven met dezelfde gedeelde orders
# String parts to build the order string
STR_ORDER_GO_TO_WAYPOINT :Ga via {WAYPOINT}
@@ -3897,7 +3909,7 @@ STR_ORDER_SERVICE_NON_STOP_AT :Onderhoud non-s
STR_ORDER_NEAREST_DEPOT :het dichtstbijzijnde
STR_ORDER_NEAREST_HANGAR :de dichtstbijzijnde hangar
-STR_ORDER_TRAIN_DEPOT :Treindepot
+STR_ORDER_TRAIN_DEPOT :Remise
STR_ORDER_ROAD_VEHICLE_DEPOT :Garage
STR_ORDER_SHIP_DEPOT :Dok
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
@@ -3964,20 +3976,20 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Dienstre
STR_TIMETABLE_NO_TRAVEL :Niet rijden
STR_TIMETABLE_NOT_TIMETABLEABLE :Rijd (automatisch; volgens dienstregeling bij volgende handmatige bestemming)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Reis (geen dienstregeling)
-STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reis met maximaal {2:VELOCITY} (geen tijdschema)
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reis met maximaal {2:VELOCITY} (geen dienstregeling)
STR_TIMETABLE_TRAVEL_FOR :Reis naar {STRING}
STR_TIMETABLE_TRAVEL_FOR_SPEED :Reis {STRING} met maximaal {VELOCITY}
-STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Reis (gedurende {STRING}, geen tijdschema)
-STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Reis (gedurende {STRING}, geen tijdschema) maximaal {VELOCITY}
-STR_TIMETABLE_STAY_FOR_ESTIMATED :(wacht gedurende {STRING}, geen tijdschema)
-STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis gedurende {STRING}, geen tijdschema)
+STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Reis (gedurende {STRING}, geen dienstregeling)
+STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Reis (gedurende {STRING}, geen dienstregeling) maximaal {VELOCITY}
+STR_TIMETABLE_STAY_FOR_ESTIMATED :(wacht gedurende {STRING}, geen dienstregeling)
+STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis gedurende {STRING}, geen dienstregeling)
STR_TIMETABLE_STAY_FOR :en blijf voor {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :en rijd naar {STRING}
STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" en}
STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P "" ken}
-STR_TIMETABLE_TOTAL_TIME :{BLACK}Dit tijdschema duurt {STRING} om te volbrengen
-STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Dit tijdschema duurt minstens {STRING} om te volbrengen (niet alles geselecteerd)
+STR_TIMETABLE_TOTAL_TIME :{BLACK}Deze dienstregeling duurt {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Deze dienstregeling duurt minstens {STRING} (niet alles ingeroosterd)
STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dit voertuig is op tijd
STR_TIMETABLE_STATUS_LATE :{BLACK}Dit voertuig heeft {STRING} vertraging
@@ -3986,7 +3998,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Deze die
STR_TIMETABLE_STATUS_START_AT :{BLACK}Deze dienstregeling begint bij {STRING}
STR_TIMETABLE_STARTING_DATE :{BLACK}Startdatum
-STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als uitgangspunt van dit tijdschema. Ctrl + klik geeft het startpunt van dit tijdschema en distribueert alle voertuigen die deze orders delen gelijkmatig op basis van hun relatieve volgorde, indien de order volledig is ingeroosterd
+STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als startpunt voor deze dienstregeling. Ctrl + klik geeft het startpunt van deze dienstregeling en verdeelt alle voertuigen die deze orders delen gelijkmatig op basis van hun relatieve volgorde, als de order volledig is ingeroosterd.
STR_TIMETABLE_CHANGE_TIME :{BLACK}Verander de tijd
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren
@@ -3995,7 +4007,7 @@ STR_TIMETABLE_CLEAR_TIME :{BLACK}Verwijde
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de tijdsduur die de geselecteerde order mag duren
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Wijzig Maximumsnelheid
-STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximum snelheid voor de gekozen order
+STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximumsnelheid voor de gekozen order
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Verwijder Snelheidslimiet
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Verwijder de maximumsnelheid van de gekozen order
@@ -4024,28 +4036,28 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Selectee
# AI debug window
-STR_AI_DEBUG :{WHITE}AI/Spelscriptdebug
+STR_AI_DEBUG :{WHITE}Probleemoplossing AI/spelscript
STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM})
STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Naam van het script
STR_AI_DEBUG_SETTINGS :{BLACK}Instellingen
-STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Wijzig de instellingen van het script
-STR_AI_DEBUG_RELOAD :{BLACK}Herlaad computerspeler
-STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Verwijder computerspeler, herlaad het script en herstart computerspeler
-STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Afbreken in/uitschakelen als een AI-logbericht overeenstemt met de afbreektekst
+STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Instellingen van script wijzigen
+STR_AI_DEBUG_RELOAD :{BLACK}Computerspeler opnieuw laden
+STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Computerspeler verwijderen, script opnieuw laden en computerspeler opnieuw starten
+STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Afbreken in-uitschakelen als een AI-logbericht overeenstemt met de afbreektekst
STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Afbreken op:
STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Afbreken aan
STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Als een AI-logbericht overeenstemt met deze string, dan wordt het spel gepauzeerd
STR_AI_DEBUG_MATCH_CASE :{BLACK}Hoofdlettergevoelig
-STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Hoofdlettergevoeligheid aan/uizetten bij het vergelijken van AI-logberichten t.o.v. de afbreekstring
+STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Hoofdlettergevoeligheid aan-uitzetten bij het vergelijken van AI-logberichten t.o.v. de afbreektekst
STR_AI_DEBUG_CONTINUE :{BLACK}Doorgaan
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Het spel vervolgen en de AI voortzetten
-STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Toon debuggegevens van deze AI
+STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Probleemgegevens van deze AI weergeven
STR_AI_GAME_SCRIPT :{BLACK}Spelscript
-STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Controleer de log van het spelscript
+STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Controleer het logboek van het spelscript
STR_ERROR_AI_NO_AI_FOUND :Geen geschikte AI gevonden.{} Deze AI is een 'dummy' en voert niets uit.{}Verschillende AI's kunnen worden gedownload via het 'Online Content' systeem
-STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van de actieve scripts is vastgelopen. Meld dit a.u.b. bij de auteur van dit script met een schermprint van het AI/Spel script Debugscherm
-STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Spel script debugvenster is alleen beschikbaar voor de server
+STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van de actieve scripts is vastgelopen. Meld dit a.u.b. bij de auteur van dit script met een schermafdruk van het AI-/spelscript-probleemvenster.
+STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI-/spelscript-probleemvenster is alleen beschikbaar voor de server
# AI configuration window
STR_AI_CONFIG_CAPTION :{WHITE}AI/Spelscriptconfiguratie
@@ -4058,18 +4070,18 @@ STR_AI_CONFIG_NONE :(geen)
STR_AI_CONFIG_MOVE_UP :{BLACK}Omhoog verplaatsen
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Geselecteerde AI omhoog verplaatsen in de lijst
STR_AI_CONFIG_MOVE_DOWN :{BLACK}Omlaag verplaatsen
-STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}De geselecteerde AI naar omlaag verplaatsen in de lijst
+STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Geselecteerde AI naar omlaag verplaatsen in de lijst
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spelscript
STR_AI_CONFIG_AI :{SILVER}AI's
-STR_AI_CONFIG_CHANGE :{BLACK}Kies{STRING}
+STR_AI_CONFIG_CHANGE :{BLACK}{STRING} selecteren
STR_AI_CONFIG_CHANGE_NONE :
STR_AI_CONFIG_CHANGE_AI :AI
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Spelscript
-STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Laad een ander script
-STR_AI_CONFIG_CONFIGURE :{BLACK}Configureer
-STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configureer de parameters van het script
+STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Ander script laden
+STR_AI_CONFIG_CONFIGURE :{BLACK}Configureren
+STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}De parameters van het script configureren
# Available AIs window
STR_AI_LIST_CAPTION :{WHITE}Beschikbaar {STRING}
@@ -4079,19 +4091,19 @@ STR_AI_LIST_TOOLTIP :{BLACK}Klik om
STR_AI_LIST_AUTHOR :{LTBLUE}Auteur: {ORANGE}{STRING}
STR_AI_LIST_VERSION :{LTBLUE}Versie: {ORANGE}{NUM}
-STR_AI_LIST_URL :{LTBLUE}URL: {ORANGE}{STRING}
+STR_AI_LIST_URL :{LTBLUE}Webadres: {ORANGE}{STRING}
-STR_AI_LIST_ACCEPT :{BLACK}Accepteer
-STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selecteer gemarkeerd script
+STR_AI_LIST_ACCEPT :{BLACK}Accepteren
+STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Gemarkeerd script selecteren
STR_AI_LIST_CANCEL :{BLACK}Annuleren
-STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script niet veranderen
+STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script niet wijzigen
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION_AI :AI
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelscript
STR_AI_SETTINGS_CLOSE :{BLACK}Sluiten
-STR_AI_SETTINGS_RESET :{BLACK}Herstellen
+STR_AI_SETTINGS_RESET :{BLACK}Terugstellen
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Aantal dagen dat deze AI start na de vorige (ongeveer): {ORANGE}{STRING}
@@ -4172,7 +4184,7 @@ STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote sc
STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermafdruk heeft een resolutie van {COMMA} x {COMMA} pixels. De schermafdruk maken kan even duren. Verder gaan?
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding succesvol opgeslagen als '{STRING}'
-STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermprint mislukt!
+STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermfoto mislukt!
# Error message titles
STR_ERROR_MESSAGE_CAPTION :{YELLOW}Bericht
@@ -4199,9 +4211,9 @@ STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRIN
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Niet toegestaan wanneer gepauzeerd
# Local authority errors
-STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}De gemeenteraad van {TOWN} staat dit niet toe
-STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}De gemeenteraad van {TOWN} staat bouwen van nog een vliegveld niet toe
-STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} lokale autoriteiten weigeren toestemming te geven voor vliegveld wegens zorgen om geluidsoverlast
+STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}Gemeentebestuur van {TOWN} staat dit niet toe
+STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Gemeentebestuur van {TOWN} staat bouwen van nog een vliegveld niet toe
+STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Gemeentebestuur van {TOWN} weigert toestemming voor vliegveld wegens zorgen om geluidsoverlast
STR_ERROR_BRIBE_FAILED :{WHITE}Je omkopingspoging is ontdekt door een regionale controleur
# Levelling errors
@@ -4291,13 +4303,13 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... door
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... weg is eenrichtingsverkeer of geblokkeerd
# Station destruction related errors
-STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan deel van station niet weghalen...
+STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan deel van station niet verwijderen...
STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Treinstation moet eerst verwijderd worden
STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kan busstation niet verwijderen...
STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan vrachtwagenlaadstation niet verwijderen...
STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan passagierstramstation niet verwijderen...
STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan vrachttramhalte niet verwijderen...
-STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Moet wegstop eerst weghalen
+STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Moet halte eerst verwijderen
STR_ERROR_THERE_IS_NO_STATION :{WHITE}...er is hier geen station
STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Verwijder eerst treinstation
@@ -4309,20 +4321,20 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Verwijde
STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Verwijder eerst vliegveld
# Waypoint related errors
-STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Voegt meer dan één bestaande controlepost samen
-STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Te dicht bij een andere controlepost
+STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Ligt naast meer dan één bestaand routepunt
+STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Te dicht bij een ander routepunt
-STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Kan hier geen treincontrolepost bouwen...
+STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Kan hier geen routepunt bouwen...
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Kan boei hier niet plaatsen...
-STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan naam controlepost niet aanpassen...
+STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan naam routepunt niet aanpassen...
-STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan hier treincontrolepost niet weghalen...
-STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Controlepost moet eerst verwijderd worden
+STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan hier geen routepunt verwijderen...
+STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Routepunt moet eerst verwijderd worden
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boei in de weg
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boei is in gebruik door een ander bedrijf!
# Depot related errors
-STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan hier geen treindepot bouwen...
+STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan hier geen remise bouwen...
STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan hier geen garage bouwen...
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan hier geen tramdepot bouwen...
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Kan dok hier niet bouwen...
@@ -4342,7 +4354,7 @@ STR_ERROR_INCOMPATIBLE_RAIL_TYPES :spoortypes niet
STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Kan voertuig niet verplaatsen...
STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}De achterste locomotief zal altijd het voorste deel volgen
-STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan geen route naar lokale depot vinden
+STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan geen route naar lokaal depot vinden
STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan geen lokaal depot vinden
STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerd depot-type
@@ -4356,13 +4368,13 @@ STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(onvoldoende ge
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Onmogelijke spoorcombinatie
STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Sein moet eerst worden verwijderd
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen bruikbaar spoor
-STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Bestaand spoor moet eerst weggehaald worden
+STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Moet spoor eerst verwijderen
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Weg is eenrichtingsverkeer of geblokkeerd
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Gelijkvloerse kruisingen zijn niet toegestaan voor dit type spoor
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan hier geen seinen plaatsen...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan hier geen spoor leggen...
-STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan hier geen spoor weghalen...
-STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan hier geen seinen weghalen...
+STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan hier geen spoor verwijderen...
+STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan hier geen sein verwijderen...
STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Kan sein hier niet ombouwen...
STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...er is hier geen spoorlijn
STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...er zijn geen seinen
@@ -4370,11 +4382,11 @@ STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...er zi
STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kan spoortype hier niet veranderen...
# Road construction errors
-STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet weg eerst weghalen
+STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet weg eerst verwijderen
STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... eenrichtingswegen kunnen geen kruisingen hebben
STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan hier geen weg bouwen...
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan hier geen tramrails bouwen...
-STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan hier geen weg weghalen...
+STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan hier geen weg verwijderen...
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan de tramrails hier niet verwijderen...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...er is geen weg
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...er is geen tramlijn
@@ -4421,7 +4433,7 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tunn
STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... te veel objecten
STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Kan object niet bouwen...
STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Object in de weg
-STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... bedrijfshoofdkwartier in de weg
+STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... hoofdkantoor in de weg
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Kan dit stuk land niet kopen...
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... het is al van jou!
@@ -4460,28 +4472,28 @@ STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Kan wegv
STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan schip niet naar dok sturen...
STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Kan vliegtuig niet naar hangar sturen...
-STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Kan railvoertuig niet kopen...
+STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Kan trein niet kopen...
STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Kan wegvoertuig niet kopen...
STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Kan schip niet kopen...
STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Kan vliegtuig niet kopen...
-STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Kan type van railvoertuig niet hernoemen...
+STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Kan treintype niet hernoemen...
STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Kan type van wegvoertuig niet hernoemen...
STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Kan type van schip niet hernoemen...
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Kan type van vliegtuig niet hernoemen...
-STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Kan railvoertuig niet verkopen...
+STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Kan spoorvoertuig niet verkopen...
STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan wegvoertuig niet verkopen...
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Kan schip niet verkopen...
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Kan vliegtuig niet verkopen...
-STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Railvoertuig is niet beschikbaar
+STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Spoorvoertuig is niet beschikbaar
STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Wegvoertuig is niet beschikbaar
STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Schip is niet beschikbaar
STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Vliegtuig is niet beschikbaar
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Te veel voertuigen in het spel
-STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan onderhoudsinterval niet aanpassen...
+STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan onderhoudstermijn niet aanpassen...
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... voertuig is vernietigd
@@ -4533,15 +4545,15 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan bord
STR_DESKTOP_SHORTCUT_COMMENT :Een simulatiespel gebaseerd op Transport Tycoon Deluxe
# Translatable descriptions in media/baseset/*.ob* files
-STR_BASEGRAPHICS_DOS_DESCRIPTION :Originele graphics van de Transport Tycoon Deluxe DOS-versie.
-STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie.
-STR_BASEGRAPHICS_WIN_DESCRIPTION :Originele graphics van de Transport Tycoon Deluxe Windows-versie.
-STR_BASESOUNDS_DOS_DESCRIPTION :Originele geluiden van de Transport Tycoon Deluxe DOS-versie.
-STR_BASESOUNDS_WIN_DESCRIPTION :Originele geluiden van de Transport Tycoon Deluxe Windows-versie.
-STR_BASESOUNDS_NONE_DESCRIPTION :Een geluidset zonder geluid.
+STR_BASEGRAPHICS_DOS_DESCRIPTION :Originele grafische elementen van Transport Tycoon Deluxe voor DOS.
+STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originele grafische elementen van Transport Tycoon Deluxe voor DOS, Duitse versie.
+STR_BASEGRAPHICS_WIN_DESCRIPTION :Originele grafische elementen van Transport Tycoon Deluxe voor Windows.
+STR_BASESOUNDS_DOS_DESCRIPTION :Originele geluiden van Transport Tycoon Deluxe voor DOS.
+STR_BASESOUNDS_WIN_DESCRIPTION :Originele geluiden van Transport Tycoon Deluxe voor Windows.
+STR_BASESOUNDS_NONE_DESCRIPTION :Een geluidenset zonder geluid.
STR_BASEMUSIC_WIN_DESCRIPTION :Originele muziek van de Transport Tycoon Deluxe Windows-versie.
-STR_BASEMUSIC_DOS_DESCRIPTION :Originele Transport Tycoon Deluxe DOS-editiemuziek.
-STR_BASEMUSIC_TTO_DESCRIPTION :Originele Transport Tycoon (Original/World Editor) DOS-editiemuziek.
+STR_BASEMUSIC_DOS_DESCRIPTION :Originele muziek van Transport Tycoon Deluxe voor DOS.
+STR_BASEMUSIC_TTO_DESCRIPTION :Originele muziek van Transport Tycoon (Original/World Editor) voor DOS.
STR_BASEMUSIC_NONE_DESCRIPTION :Een muziekset zonder muziek.
##id 0x2000
@@ -4926,21 +4938,21 @@ STR_FORMAT_DATE_SHORT :{STRING} {NUM}
STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM}
STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING}
-STR_FORMAT_BUOY_NAME :{TOWN} Boei
-STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Boei #{COMMA}
+STR_FORMAT_BUOY_NAME :Boei {TOWN}
+STR_FORMAT_BUOY_NAME_SERIAL :Boei {TOWN} {COMMA}
STR_FORMAT_COMPANY_NUM :(Bedrijf {COMMA})
STR_FORMAT_GROUP_NAME :Groep {COMMA}
-STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
-STR_FORMAT_WAYPOINT_NAME :{TOWN} Controlepost
-STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Controlepost #{COMMA}
+STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN}
+STR_FORMAT_WAYPOINT_NAME :Routepunt {TOWN}
+STR_FORMAT_WAYPOINT_NAME_SERIAL :Routepunt {TOWN} {COMMA}
-STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Treindepot
-STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Treindepot #{COMMA}
-STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Garage
-STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Garage #{COMMA}
-STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Dok
-STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Dok #{COMMA}
-STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangar
+STR_FORMAT_DEPOT_NAME_TRAIN :Remise {TOWN}
+STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Remise {TOWN} {COMMA}
+STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Garage {TOWN}
+STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garage {TOWN} {COMMA}
+STR_FORMAT_DEPOT_NAME_SHIP :Dok {TOWN}
+STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Dok {TOWN} {COMMA}
+STR_FORMAT_DEPOT_NAME_AIRCRAFT :Hangar {STATION}
STR_UNKNOWN_STATION :onbekend station
STR_DEFAULT_SIGN_NAME :Bord
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 0bb6ff9c5b..856ca2f81a 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -190,6 +190,7 @@ STR_COLOUR_BROWN :Brown
STR_COLOUR_GREY :Grey
STR_COLOUR_WHITE :White
STR_COLOUR_RANDOM :Random
+STR_COLOUR_DEFAULT :Default
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -1820,7 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c
STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}New Colour Scheme
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Colour Scheme
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general colour schemes
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train colour schemes
@@ -2703,7 +2704,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l
STR_ABOUT_OPENTTD :{WHITE}About OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Frame rate
@@ -2778,6 +2779,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No infor
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING1}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overwrite File
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Are you sure you want to overwrite the existing file?
STR_SAVELOAD_OSKTITLE :{BLACK}Enter a name for the savegame
@@ -2894,8 +2897,13 @@ STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID:
STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. compatible version: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{RAW_STRING}
-STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{RAW_STRING}
+STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Default (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Default (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING1}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :None
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No information available
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matching file not found
@@ -3355,21 +3363,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre t
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING}, {STRING}{RAW_STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{RAW_STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:RAW_STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{RAW_STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%)
@@ -3422,6 +3423,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups -
STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group
STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group
STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group
@@ -3465,6 +3467,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacity
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING2}
STR_PURCHASE_INFO_ALL_TYPES :All cargo types
+STR_PURCHASE_INFO_NONE :None
STR_PURCHASE_INFO_ALL_BUT :All but {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tractive Effort: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Range: {GOLD}{COMMA} tiles
diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt
index bf71047a94..63b5461a53 100644
--- a/src/lang/english_AU.txt
+++ b/src/lang/english_AU.txt
@@ -2656,7 +2656,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l
STR_ABOUT_OPENTTD :{WHITE}About OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3252,18 +3252,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre t
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%)
diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt
index 98e007bc1b..8e806f0e02 100644
--- a/src/lang/english_US.txt
+++ b/src/lang/english_US.txt
@@ -2696,7 +2696,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l
STR_ABOUT_OPENTTD :{WHITE}About OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3302,21 +3302,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center t
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%)
diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt
index bff065d1fa..a6346cb35d 100644
--- a/src/lang/esperanto.txt
+++ b/src/lang/esperanto.txt
@@ -2261,7 +2261,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanie poseda
STR_ABOUT_OPENTTD :{WHITE}Pri OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Origina kopirajto {COPYRIGHT} 1995 Chris Sawyer, Ĉiuj rajtoj rezervitaj
STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 La teamo de OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 La teamo de OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -2726,18 +2726,8 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la industrio. Stir+Klak por malfermi novan vidujon ĉe la industrioloko.
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkta nivelo: {YELLOW}{COMMA}%
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING}, {STRING.n}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING}, {STRING.n}{STRING}, {STRING.n}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produktas: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produktas: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Ŝanĝu produktadon (multoble de 8, ĝis 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ŝanĝu produktan nivelon (procento, limigo je 800%)
diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt
index a8f130e67d..862206a4d7 100644
--- a/src/lang/estonian.txt
+++ b/src/lang/estonian.txt
@@ -532,6 +532,7 @@ STR_ABOUT_MENU_SCREENSHOT :Ekraanitõmmis
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suurendatud ekraanitõmmis
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Tavasuurendusega ekraanitõmmis
STR_ABOUT_MENU_GIANT_SCREENSHOT :Terve kaardi ekraanitõmmis
+STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Kontuuride kuvamine
@@ -979,6 +980,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Lõuna-Aafrika
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Omatehtud...
STR_GAME_OPTIONS_CURRENCY_GEL :Gruusia lari (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Iraani rial (IRR)
+STR_GAME_OPTIONS_CURRENCY_MXN :Mehhiko Peeso (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Sõidukid
@@ -1270,10 +1272,10 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Sisse lülitami
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Ülesanded on esialgselt «Peatusteta»: {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Tavaliselt peatub sõiduk igas peatuses, mida ta läbib. Selle seadega sõidab sõiduk lõppsihini ilma vahejaamades peatumata. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada
STR_CONFIG_SETTING_STOP_LOCATION :Esialgne platvormi peatumisosa uute rongide ülesannetes: {STRING}
-STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Esialgne peatumiskoht rongiplatvormil. «Lõpu lähedal» tähendab sisenemispunkti lähistel. «Keskel» tähendab keset platvormi. «Kaugel lõpus» tähendab kaugel sisenemispunktist. NB! Selle seadega sõidab sõiduk lõppsihini ilma vahejaamades peatumata. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada
-STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :lõpu lähedal
+STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Esialgne peatumiskoht rongiplatvormil. «alguses» tähendab sisenemispunkti lähistel. «keskel» tähendab keset platvormi. «lõpus» tähendab sisenemispunktist kaugeimal. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada
+STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alguses
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskel
-STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :täiesti lõpus
+STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :lõpus
STR_CONFIG_SETTING_AUTOSCROLL :Vaate liikumine, kui hiireosuti on akna servas: {STRING}
STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Sisse lülitamisel liigub vaade, kui hiireosuti on aknaserva lähedal
STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Väljas
@@ -1308,6 +1310,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Sõiduki
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Taristu hooldamine: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Taristuga kaasnevad halduskulud. Kulud kasvavad taristu hulga suhtes ebaproportsionaalselt, ning mõjutavad pigem suurettevõtteid
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vali ettevõttele esialgne värvus
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aegumatud lennuväljad: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Selle seade sisse lülitamine jätab kõik lennujaamade tüübid avatuks lõpmata ajaks peale nende avanemist
@@ -1423,6 +1426,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klõps
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klõps
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Väljas
+STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Akna sulgemine paremklõpsuga: {STRING}
STR_CONFIG_SETTING_AUTOSAVE :Automaatne salvestamine: {STRING}
STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vali automaatse salvestamise intervall
@@ -1857,7 +1861,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuda jo
STR_CHEAT_SETUP_PROD :{LTBLUE}Tootmisväärtuste muutmine: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Uus värvivalik
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Värvivalik
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita üldiseid värvistikke
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvistikke
@@ -2739,12 +2743,25 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ettevõtte maa
STR_ABOUT_OPENTTD :{WHITE}OpenTTD lisainfo
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Algne autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud
STR_ABOUT_VERSION :{BLACK}OpenTTD osa {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD meeskond
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD meeskond
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Kaadrisagedus
+STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Renderdatud videokaadrite arv sekundis.
+STR_FRAMERATE_AVERAGE :{WHITE}Keskmine
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kaadrit/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kaadrit/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kaadrit/s
############ Leave those lines in this order!!
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Õhusõiduki sammud:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Ahelgraafiku viide:
+STR_FRAMERATE_DRAWING :{BLACK}Graafika renderdamine:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Õhusõiduki sammud
############ End of leave-in-this-order
@@ -3032,6 +3049,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Sisesta
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Linnad
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Puudub -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Linn){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Linnanimed - vajuta linnanimele, et viia vaade linnale. Ctrl+klõps avab uue vaate linna asukohast
STR_TOWN_POPULATION :{BLACK}Maailma rahvastik: {COMMA}
@@ -3039,6 +3057,7 @@ STR_TOWN_POPULATION :{BLACK}Maailma
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Linn)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Rahvaarv: {ORANGE}{COMMA}{BLACK} Ehitisi: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} eelmisel kuul: {ORANGE}{COMMA}{BLACK} Suurim: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Veoseid linna kasvamiseks:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vajalik
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} on talvel vajalik
@@ -3343,18 +3362,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate ke
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikkuse tase: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööstus teatab kohesest sulgemisest!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuda tootlikkuse taset (protsent, kuni 800%)
@@ -3417,6 +3426,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Eemalda kõik s
STR_GROUP_RENAME_CAPTION :{BLACK}Rühma nime vahetamine
+STR_GROUP_PROFIT_THIS_YEAR :Kasum sellel aastal:
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Uued rööbassõidukid
@@ -3583,6 +3593,9 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnethõljukve
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Tippkiirus: {VELOCITY} Võimsus: {POWER}{}Käituskulud: {CURRENCY_LONG}/aastas{}Kandevõime: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Kiirus: {VELOCITY} Võimsus: {POWER} Veojõud: {6:FORCE}{}Käituskulud: {4:CURRENCY_LONG}/aasta{}Mahutavus: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING}{}kandevõime: {CARGO_LONG}{}Käitluskulud: {CURRENCY_LONG}/a
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING} Lennukaugus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}, {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING} Lennukaugus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Asenda {STRING} - {STRING}
@@ -3704,6 +3717,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} aasta{P
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} aasta{P "" t} ({COMMA})
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Lennuki tüüp: {LTBLUE}{STRING}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Veojõud: {LTBLUE}{FORCE}
@@ -3923,9 +3937,9 @@ STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Maha mitte laa
STR_ORDER_AUTO_REFIT_ANY :võimalikud kaubad
-STR_ORDER_STOP_LOCATION_NEAR_END :[lõpu lähedal]
+STR_ORDER_STOP_LOCATION_NEAR_END :[alguses]
STR_ORDER_STOP_LOCATION_MIDDLE :[keskel]
-STR_ORDER_STOP_LOCATION_FAR_END :[täiesti lõpus]
+STR_ORDER_STOP_LOCATION_FAR_END :[lõpus]
STR_ORDER_OUT_OF_RANGE :{RED} (Järgmine sihtpunkt on väljaspool tegevusraadiust)
@@ -4269,6 +4283,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... see
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tee on vales suunas
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... nurgad ei saa läbisõidupeatustes olla
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... ristmikud ei saa olla läbisõidupeatustes
+STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... tee on ühesuunaline või blokeeritud
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Siinset jaamablokki ei saa lammutada...
diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt
index 3465a72111..e42bfe3bfa 100644
--- a/src/lang/faroese.txt
+++ b/src/lang/faroese.txt
@@ -2421,7 +2421,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ogn hjá fyrit
STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upprunalig upphavsrættindi {COPYRIGHT} 1995 Chris Sawyer, Øll rættindi umbiðin
STR_ABOUT_VERSION :{BLACK}OpenTTD útgáva {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD toymi
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD toymi
# Framerate display window
############ Leave those lines in this order!!
@@ -2916,18 +2916,8 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Savna høvuðs sýni á ídnaðin. Ctrl+trýst letur nýggjan sýnisglugga upp við sýni á ídnaðin
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Framleiðslu støði: {YELLOW}{COMMA}%
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Framleiður: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Framleiður: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Broyt framleiðslu (fald av 8, upp til 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Broyt framleiðslu støði (prosent, upp til 800%)
diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt
index 0450afa0b3..8a49261424 100644
--- a/src/lang/finnish.txt
+++ b/src/lang/finnish.txt
@@ -132,7 +132,7 @@ STR_QUANTITY_N_A :-
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINY_FONT}MA
STR_ABBREV_COAL :{TINY_FONT}HL
-STR_ABBREV_MAIL :{TINY_FONT}SP
+STR_ABBREV_MAIL :{TINY_FONT}PO
STR_ABBREV_OIL :{TINY_FONT}ÖL
STR_ABBREV_LIVESTOCK :{TINY_FONT}KA
STR_ABBREV_GOODS :{TINY_FONT}TA
@@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :Oranssi
STR_COLOUR_BROWN :Ruskea
STR_COLOUR_GREY :Harmaa
STR_COLOUR_WHITE :Valkoinen
+STR_COLOUR_RANDOM :Satunnainen
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -927,6 +928,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Oma...
STR_GAME_OPTIONS_CURRENCY_GEL :Georgian lari (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Iranin rial (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Uusi Venäjän rupla (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Meksikon peso (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot
@@ -1814,7 +1816,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuta ny
STR_CHEAT_SETUP_PROD :{LTBLUE}Salli tuotantomäärien muuttaminen: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Uusi väriteema
+STR_LIVERY_CAPTION :{WHITE}{COMPANY}: Väriteema
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näytä yleiset väriteemat
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junan väriteemat
@@ -2697,7 +2699,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Yhtiön omistam
STR_ABOUT_OPENTTD :{WHITE}Tietoja OpenTTD:stä
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Alkuperäiset oikeudet {COPYRIGHT} 1995 Chris Sawyer, kaikki oikeudet pidätetään
STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus
@@ -3326,21 +3328,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa pikaisesta sulkeutumisestaan!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} odottamassa{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa tuotantoa (8:n kerroin, 2040 asti)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuta tuotantotasoa (prosentteina, 800{NBSP}% asti)
@@ -3840,7 +3832,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Miten ku
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :on yhtä kuin
STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :ei ole yhtä kuin
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :on pienempi kuin
-STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :on suurempi kuin
+STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :on pienempi tai yhtä kuin
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :on enemmän kuin
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :on enemmän tai yhtä kuin
STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :on tosi
diff --git a/src/lang/french.txt b/src/lang/french.txt
index cc5b331ea0..3b108cb9ed 100644
--- a/src/lang/french.txt
+++ b/src/lang/french.txt
@@ -191,6 +191,7 @@ STR_COLOUR_BROWN :Marron
STR_COLOUR_GREY :Gris
STR_COLOUR_WHITE :Blanc
STR_COLOUR_RANDOM :Aléatoire
+STR_COLOUR_DEFAULT :Défaut
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -931,6 +932,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personnalisée.
STR_GAME_OPTIONS_CURRENCY_GEL :Lari Géorgien (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iranien (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Nouveau rouble russe (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Peso méxicain (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Véhicules routiers
@@ -1820,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Modifier
STR_CHEAT_SETUP_PROD :{LTBLUE}Permettre la modification des valeurs de production{NBSP}: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nouvelle couleur
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Couleur
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montrer les livrées générales
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montrer les livrées de trains
@@ -2381,9 +2383,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Signal c
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Signal de chemin (électrique){}Un signal de chemin autorise plus d'un train à entrer dans un bloc de signaux en même temps, si le train peut réserver un chemin jusqu'à un point d'attente sûr. Les signaux de chemin peuvent être passés par l'arrière.
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Signal de chemin à sens unique (électrique){}Un signal de chemin autorise plus d'un train à entrer dans un bloc de signaux en même temps, si le train peut réserver un chemin jusqu'à un point d'attente sûr. Les signaux de chemin à sens unique ne peuvent pas être passés par l'arrière.
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversion de signal.{}Si sélectionné, cliquer sur un signal existant le convertit vers le type et la variante choisis.{}Ctrl-clic pour alterner entre les variantes existantes.{}Shift pour afficher seulement le coût estimé.
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densité de signaux
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Réduire l'intervalle entre les signaux (augmenter la densité)
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenter l'intervalle entre les signaux (réduire la densité)
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Intervalle entre les signaux
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Réduire l'intervalle entre les signaux
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenter l'intervalle entre les signaux
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Choisir un pont ferroviaire
@@ -2703,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrain apparte
STR_ABOUT_OPENTTD :{WHITE}À propos de OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Tous droits réservés
STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'équipe OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 L'équipe OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Fréquence d'images
@@ -2895,7 +2897,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version{
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Version compatible min.{NBSP}: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum{NBSP}: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette{NBSP}: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Défaut (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Défaut (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Ancienne (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Ancienne (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramètres{NBSP}: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Aucuns
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Pas d'informations disponibles
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Module correspondant non trouvé
@@ -3355,21 +3362,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nécessite{NBSP}:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}{NBSP}: {CARGO_SHORT} en attente{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Changer la production (multiple de 8, max. 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Changer le niveau de production (pourcentage, max. 800{NBSP}%)
@@ -3422,6 +3422,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groupes
STR_GROUP_CREATE_TOOLTIP :{BLACK}Créer un groupe de véhicules
STR_GROUP_DELETE_TOOLTIP :{BLACK}Supprimer le groupe sélectionné
STR_GROUP_RENAME_TOOLTIP :{BLACK}Renommer le groupe sélectionné
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Changer la couleur du groupe sélectionné
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Cliquer pour protéger ce groupe contre l'auto-remplacement global
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Supprimer un groupe
@@ -3465,6 +3466,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacit
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Wagons motorisés{NBSP}: {GOLD}+{POWER}{BLACK} − Poids{NBSP}: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Réaménageable pour{NBSP}: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Tous les types de cargaison
+STR_PURCHASE_INFO_NONE :Aucune cargaison
STR_PURCHASE_INFO_ALL_BUT :Tous sauf {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Effort de traction max.{NBSP}: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rayon d'action{NBSP}: {GOLD}{COMMA}{NBSP}cases
diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt
index 2cbd7023b1..42e7b17554 100644
--- a/src/lang/gaelic.txt
+++ b/src/lang/gaelic.txt
@@ -2926,7 +2926,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tìr a' chompan
STR_ABOUT_OPENTTD :{WHITE}Mu dheidhinn OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Còir-lethbhreac tùsail {COPYRIGHT} 1995 Chris Sawyer, a h-uile còir glèidhte
STR_ABOUT_VERSION :{BLACK}OpenTTD tionndadh {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 An sgioba OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An sgioba OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3530,21 +3530,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Meadhana
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ìre an dèanadais: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tha an gnìomhachas gu bhith a dhùnadh a dh'aithghearr!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Feum air:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a' feitheamh{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Atharraich an saothrachaidh (iomadach aig 8, suas gu 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Atharraich ìre an saothrachaidh (ceudad, suas gu 800%)
diff --git a/src/lang/galician.txt b/src/lang/galician.txt
index c0896f1728..604a82102b 100644
--- a/src/lang/galician.txt
+++ b/src/lang/galician.txt
@@ -2686,7 +2686,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreo propieda
STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright orixinal {COPYRIGHT} 1995 Chris Sawyer, Tódolos dereitos reservados
STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 O equipo de OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 O equipo de OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3290,21 +3290,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Require:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} agardando{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambiar produción (múltiplo de 8, ata 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambiar o nivel de produción (porcentaxe, ata 800%)
diff --git a/src/lang/german.txt b/src/lang/german.txt
index c7a63de4e4..03d338b19d 100644
--- a/src/lang/german.txt
+++ b/src/lang/german.txt
@@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :Orange
STR_COLOUR_BROWN :Braun
STR_COLOUR_GREY :Grau
STR_COLOUR_WHITE :Weiß
+STR_COLOUR_RANDOM :Zufällig
+STR_COLOUR_DEFAULT :Standard
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -476,6 +478,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot (Sta
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot in Nahaufnahme
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot mit normalem Zoom
STR_ABOUT_MENU_GIANT_SCREENSHOT :Riesiger Screenshot (Standard: Strg+G)
+STR_ABOUT_MENU_SHOW_FRAMERATE :Bildwiederholrate anzeigen
STR_ABOUT_MENU_ABOUT_OPENTTD :Über OpenTTD
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-Ausrichtung
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Hüllquader anzeigen/ausblenden
@@ -651,6 +654,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------
+STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Keine Musik verfügbar
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}"
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Track
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel
@@ -671,11 +675,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Zufälli
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zeige Musiktitelauswahl
# Playlist window
+STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Musikprogramm - '{STRING}'
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Track Inhalt
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programm - '{STRING}'
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Bereinigen
+STR_PLAYLIST_CHANGE_SET :{BLACK}Set ändern
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Lösche laufendes Programm (nur für Benutzerdefiniert 1 und 2)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ein anderes Musik-Set auswählen)
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicke auf einen Musiktitel, um ihn in das laufende Programm zu übernehmen (nur für Benutzerdefiniert 1 und 2)
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicke auf einen Musiktitel, um ihn aus der aktuellen Liste zu entfernen (nur für Benutzerdefiniert 1 und 2)
@@ -811,6 +818,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Manager)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} finanziert die Gründung der Stadt {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Eine neue Stadt mit dem Namen {TOWN} wurde errichtet!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Neue{G r "" s ""} {STRING} {G 0 wird wird wird werden} nahe {TOWN} gebaut!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Neue{G r "" s ""} {STRING} {G 0 wird wird wird werden} nahe {TOWN} angepflanzt!
@@ -878,9 +886,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ansicht {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}In Zusatzansicht kopieren
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Zusatzansicht ändern
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Aktuelle Position der Hauptansicht in diese Zusatzansicht kopieren
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Aus Zusatzansicht einfügen
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Hauptansicht ändern
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Hauptansicht zur Position dieser Zusatzansicht scrollen
# Game options window
@@ -910,7 +918,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Niederländisch
STR_GAME_OPTIONS_CURRENCY_NOK :Norwegische Kronen (NOK)
STR_GAME_OPTIONS_CURRENCY_PLN :Polnische Zloty (PLN)
STR_GAME_OPTIONS_CURRENCY_RON :Rumänische Lei (RON)
-STR_GAME_OPTIONS_CURRENCY_RUR :Russische Rubel (RUR)
+STR_GAME_OPTIONS_CURRENCY_RUR :Alte Russische Rubel (RUR)
STR_GAME_OPTIONS_CURRENCY_SIT :Slovenische Taler (SIT)
STR_GAME_OPTIONS_CURRENCY_SEK :Schwedische Kronen (SEK)
STR_GAME_OPTIONS_CURRENCY_TRY :Türkische Lire (TRY)
@@ -923,6 +931,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Südafrikanisch
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Eigene...
STR_GAME_OPTIONS_CURRENCY_GEL :Georgischer Lari (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Iranischer Rial (IRR)
+STR_GAME_OPTIONS_CURRENCY_RUB :Russische Rubel (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Mexikanischer Peso (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Fahrzeuge
@@ -1219,7 +1229,7 @@ STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :am Anfang
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :in der Mitte
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :am Ende
STR_CONFIG_SETTING_AUTOSCROLL :Spielfeld scrollen, wenn die Maus am Bildrand anstößt: {STRING}
-STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Falls aktiv wird der Kartenausschnit scrollen, wenn die Maus nahe dem Fensterrand ist
+STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Falls aktiv, wird der Kartenausschnitt scrollen, wenn die Maus nahe dem Fensterrand ist
STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Ausgeschaltet
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hauptfenster, nur bei Vollbildschirm
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hauptfenster
@@ -1252,6 +1262,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Diese Ei
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Instandhaltung der Infrastruktur: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Unterhaltskosten für Infrastruktur einschalten. Die Unterhaltskosten wachsen mit zunehmender Netzwerkgröße überproportional an, so dass sie größere Firmen stärker belasten als kleinere
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Firmenfarbe zu Spielbeginn: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wähle die Firmenfarbe zu Spielbeginn
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flughäfen veralten nie: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wird diese Option aktiviert, können Flughäfen, die einmal eingeführt wurden, das ganze Spiel über gebaut werden und veralten nie
@@ -1336,6 +1348,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farbe von Landf
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grün
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dunkelgrün
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Lila
+STR_CONFIG_SETTING_SCROLLMODE :Verhalten beim Verschieben der Zusatzansicht: {STRING}
+STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalten beim Verschieben der Karte
+STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Bewege Zusatzansicht mit rechter Maustaste, Mausposition fixiert
+STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Bewege die Karte mit rechter Maustaste, Mausposition fixiert
+STR_CONFIG_SETTING_SCROLLMODE_RMB :Bewege die Karte mit rechter Maustaste
+STR_CONFIG_SETTING_SCROLLMODE_LMB :Bewege die Karte mit linker Maustaste
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Weicher Bildlauf beim Springen zu einer Position: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Lege fest, auf welche Weise die Hauptansicht an eine bestimmte Position wechselt (z.B. wenn ein Punkt auf der Weltkarte angeklickt wird oder der Standort eines Bahnhofs angezeigt werden soll). Ist diese Option eingeschaltet, schwenkt die Ansicht über die Karte, bis sie am gewünschten Punkt angekommen ist. Ist sie ausgeschaltet, springt die Ansicht sofort an die gewünschte Position
STR_CONFIG_SETTING_MEASURE_TOOLTIP :Beim Bauen Tooltip mit Abmessungen anzeigen: {STRING}
@@ -1804,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändert
STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaube manuelles Ändern der Produktionsleistungen: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Neues Farbschema
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Farbschema
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Allgemeines Farbschema anzeigen
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zugfarbschema anzeigen
@@ -2280,6 +2298,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legende
STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Keine
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Anzuzeigende Firmen auswählen
+STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}unbenutzt
@@ -2686,12 +2705,55 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firmeneigenes G
STR_ABOUT_OPENTTD :{WHITE}OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Transport Tycoon-Urheberrecht {COPYRIGHT} 1995 Chris Sawyer, alle Rechte vorbehalten
STR_ABOUT_VERSION :{BLACK}OpenTTD-Version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-Team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-Team
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Bildwiederholrate
+STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsrate: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Anzahl an simulierten Ticks pro Sekunde.
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildwiederholrate: {STRING}
+STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Anzahl an Einzelbildern, die pro Sekunde gerendert werden.
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktueller Geschwindigkeitsfaktor des Spiels: {DECIMAL}x
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wie schnell das Spiel aktuell läuft, verglichen mit der erwarteten Geschwindigkeit bei normaler Simulationsrate.
+STR_FRAMERATE_CURRENT :{WHITE}Momentan
+STR_FRAMERATE_AVERAGE :{WHITE}Durchschnitt
+STR_FRAMERATE_DATA_POINTS :{BLACK}Daten basierend auf {COMMA} Messungen
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Bilder/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Bilder/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Bilder/s
+STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
+STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
+STR_FRAMERATE_GAMELOOP :{BLACK}Spielschleifen insgesamt:
+STR_FRAMERATE_GL_ECONOMY :{BLACK}Warenumschlag:
+STR_FRAMERATE_GL_TRAINS :{BLACK}Ticks (Züge):
+STR_FRAMERATE_GL_ROADVEHS :{BLACK}Ticks (Straßenfahrzeuge):
+STR_FRAMERATE_GL_SHIPS :{BLACK}Ticks (Schiffe):
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK}Ticks (Luftfahrzeuge)
+STR_FRAMERATE_GL_LANDSCAPE :{BLACK}Welt-Ticks:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK}Intervall für Neuberechnung des Verteilungsgraphen:
+STR_FRAMERATE_DRAWING :{BLACK}Grafik-Rendering:
+STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK}Kartenansichten:
+STR_FRAMERATE_VIDEO :{BLACK}Videoausgabe:
+STR_FRAMERATE_SOUND :{BLACK}Sound-Abmischung:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GAMELOOP :Spielschleife
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Warenumschlag
+STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks (Züge)
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ticks (Straßenfahrzeuge)
+STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks (Schiffe)
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks (Luftfahrzeuge)
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Welt-Ticks
+STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Intervall für Neuberechnung des Verteilungsgraphen
+STR_FRAMETIME_CAPTION_DRAWING :Grafik-Rendering
+STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Karten-Rendering
+STR_FRAMETIME_CAPTION_VIDEO :Videoausgabe
+STR_FRAMETIME_CAPTION_SOUND :Sound-Abmischung
############ End of leave-in-this-order
@@ -2717,6 +2779,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spielsta
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Keine Informationen verfügbar
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
+STR_SAVELOAD_FILTER_TITLE :{BLACK}Suchtext:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Datei überschreiben
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Existierende Datei wirklich überschreiben?
STR_SAVELOAD_OSKTITLE :{BLACK}Namen für den Spielstand eingeben
@@ -2834,7 +2899,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatible Version: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-Summe: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Farbpalette: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :veraltet (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :veraltet (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Keine
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Keine Informationen verfügbar
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Zugehörige Datei nicht gefunden
@@ -2907,7 +2977,7 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :der NewGRF-Date
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Zu viele NewGRFs geladen
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Das Laden von {1:STRING} als statisches NewGRF mit {STRING} könnte Synchronisationsfehler hervorrufen
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Unerwartetes Sprite (Sprite {3:NUM})
-STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Unbekannte Action 0 - Property {4:HEX} (Sprite {3:NUM})
+STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Unbekannte Action 0 - Eigenschaft {4:HEX} (Sprite {3:NUM})
STR_NEWGRF_ERROR_INVALID_ID :Zugriff auf eine ungültige ID (Sprite {3:NUM})
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} enthält fehlerhafte Grafiken. Diese werden als Fragezeichen (?) dargestellt
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Enthält mehrere Action 8 - Einträge (Sprite {3:NUM})
@@ -2915,6 +2985,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lesezugriff üb
STR_NEWGRF_ERROR_GRM_FAILED :Die angeforderte GRF-Ressource ist nicht verfügbar (Sprite {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} wurde von {STRING} deaktiviert
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ungültiges oder unbekanntes Format für Spritelayout (Sprite {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zu viele Elemente in Eigenschaftswert-Liste (Sprite {3:NUM}, Eigenschaft {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ungültige Produktions-Rückruffunktion (Sprite {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Achtung!
@@ -2944,13 +3016,13 @@ STR_BROKEN_VEHICLE_LENGTH :{WHITE}Zug '{VE
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' liefert falsche Informationen
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fracht / Ersetzungs - Informationen für '{1:ENGINE}' weichen von der Einkaufsliste nach dem Kauf ab. Das kann dazu führen, dass das Umrüsten beim autmatisches Ersetzen oder Erneuern nicht korrekt funktioniert
-STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' verursachte eine Endlosschleife im 'Production callback'
+STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' verursachte eine Endlosschleife in Produktions-Rückruffunktion
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} lieferte des unbekannte und ungülte Resultat {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :
STR_NEWGRF_INVALID_CARGO_ABBREV :??
-STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} of
+STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} Einheiten
STR_NEWGRF_INVALID_ENGINE :
STR_NEWGRF_INVALID_INDUSTRYTYPE :
@@ -2979,6 +3051,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Text fü
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Städte
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Keine -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (City){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Städtenamen - Klick auf den Namen zentriert Hauptansicht auf die Stadt. Strg+Klick öffnet neue Zusatzansicht zentriert auf die Stadt
STR_TOWN_POPULATION :{BLACK}Weltbevölkerung: {COMMA}
@@ -2986,6 +3059,7 @@ STR_TOWN_POPULATION :{BLACK}Weltbev
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Großstadt)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Einwohner: {ORANGE}{COMMA}{BLACK} Häuser: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} im letzten Monat: {ORANGE}{COMMA}{BLACK} Max.: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Für Stadtwachstum benötigte Fracht:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} benötigt
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} im Winter benötigt
@@ -3290,21 +3364,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptans
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wartend{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Produktion ändern (Vielfache von 8, maximal 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Produktionsrate ändern (prozentual, bis zu 800%)
@@ -3357,6 +3424,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen
STR_GROUP_CREATE_TOOLTIP :{BLACK}Neue Gruppe erstellen
STR_GROUP_DELETE_TOOLTIP :{BLACK}Ausgewählte Gruppe löschen
STR_GROUP_RENAME_TOOLTIP :{BLACK}Ausgewählte Gruppe umbenennen
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Farbschema der ausgewählten Gruppe ändern
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Diese Gruppe von der automatischen Fahrzeugersetzung ausschließen
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Gruppe löschen
@@ -3400,6 +3468,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazit
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Angetriebene Waggons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Umrüstbar auf: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Alle Frachtarten
+STR_PURCHASE_INFO_NONE :Keine
STR_PURCHASE_INFO_ALL_BUT :Alles außer {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Zugkraft: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Reichweite: {GOLD}{COMMA} Felder
@@ -3799,6 +3868,7 @@ STR_ORDER_CONDITIONAL_AGE :Fahrzeugalter (
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Wartung erforderlich
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Immer
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Verbleibende Laufzeit (Jahre)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximale Zuverlässigkeit
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Die Bedingung, die erfüllt werden muss
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :gleich
@@ -4231,6 +4301,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... dies
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... Straße verläuft in die falsche Richtung
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... Bus- und Lkw-Haltestellen können nicht um die Kurve gehen
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... Bus- und Lkw-Haltestellen können keine Abzweigung haben
+STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}...Einbahnstraße oder blockierter Weg
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Dieser Teil der Station kann nicht entfernt werden...
@@ -4482,6 +4553,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Original Transp
STR_BASESOUNDS_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Basissounds.
STR_BASESOUNDS_NONE_DESCRIPTION :Basissounds ohne Sound.
STR_BASEMUSIC_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Musikset.
+STR_BASEMUSIC_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS edition music.
+STR_BASEMUSIC_TTO_DESCRIPTION :Original Transport Tycoon (Original/World Editor) DOS edition music.
STR_BASEMUSIC_NONE_DESCRIPTION :Ein Musikset ohne Musik.
##id 0x2000
diff --git a/src/lang/greek.txt b/src/lang/greek.txt
index 8251cfa6e7..76ff7a1755 100644
--- a/src/lang/greek.txt
+++ b/src/lang/greek.txt
@@ -2803,7 +2803,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτη
STR_ABOUT_OPENTTD :{WHITE}Σχετικά με το OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Αρχικά Πνευματικά Δικαιώματα {COPYRIGHT} 1995 Chris Sawyer, Όλα τα δικαιώματα διατηρούνται
STR_ABOUT_VERSION :{BLACK}Έκδοση OpenTTD{REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Η ομάδα του OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Η ομάδα του OpenTTD
# Framerate display window
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο.
@@ -3433,21 +3433,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντ
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} σε αναμονή{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Αλλαγή παραγωγής (πολλαπλάσιο του 8, μέχρι το 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Αλλαγή του επιπέδου παραγωγής (ποσοστιαία, μέχρι το 800%)
diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt
index 8ef90cdc7c..37630feeb0 100644
--- a/src/lang/hebrew.txt
+++ b/src/lang/hebrew.txt
@@ -2708,7 +2708,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :שטח בבעל
STR_ABOUT_OPENTTD :{WHITE}OpenTTD אודות
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}כל הזכויות שמורות , {COPYRIGHT}1995 כריס סויר - זכויות יוצרים מקוריות
STR_ABOUT_VERSION :{BLACK}{REV} גירסה , OpenTTD
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}קצב ריענון
@@ -3343,21 +3343,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}מקד
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}רמת הפקה: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}התעשייה הכריזה על סגירה מתקרבת!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{YELLOW}{1:STRING}{0:STRING}{BLACK} : דורש
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{YELLOW}{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :דורש
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{YELLOW}{5:STRING}{4:STRING},{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :דורש
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}דורש:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ממתין{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{YELLOW}{1:STRING}{0:STRING}{BLACK} :מייצר
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{YELLOW}{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :מייצר
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}שנה תפוקה (כפולות של 8, עד 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}שינוי ברמת ההפקה (עד 800% אחוז)
diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt
index 8125f2a649..1b4de73eb1 100644
--- a/src/lang/hungarian.txt
+++ b/src/lang/hungarian.txt
@@ -941,9 +941,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}{COMMA}. látkép
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Látkép aktualizálása
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Látkép átállítása
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}A látképre a fő nézet pozícióját másolja
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Látkép visszatöltése
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Fő nézet ideállítása
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}A látkép pozícióját a fő nézetre másolja
# Game options window
@@ -2427,9 +2427,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombiná
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Irányjelző (fény){}Egy irányjelző lehetővé teszi, hogy amennyiben a vonatok le tudnak foglalni maguknak egy biztonságos vágányutat a következő jelzőig, több vonat is beléphessen ugyanabba a jelzőblokkba. Az irányjelzők mellett hátulról is el lehet haladni
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Egyirányú irányjelző (fény){}Egy irányjelző lehetővé teszi, hogy amennyiben a vonatok le tudnak foglalni maguknak egy biztonságos vágányutat a következő jelzőig, több vonat is beléphessen ugyanabba a jelzőblokkba. Az egyirányú jelzők mellett nem lehet hátulról elhaladni
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Jelző átalakítás{}Amikor ki van jelölve, egy meglévő jelzőre való kattintással átkonvertálja a kiválasztott jelzőtípusra és -variációra, CTRL+kattintás a variációt fogja változtatni. Shift+kattintással megmutatja a becsült átalakítási költséget
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Automata jelzőtelepítés sűrűsége
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés-sűrűség csökkentése
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Automata jelzőltelepítés-sűrűség növelése
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolsága
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolságának csökkentése
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolságának növelése
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Válassz egy vasúti hidat
@@ -2749,7 +2749,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Vállalat álta
STR_ABOUT_OPENTTD :{WHITE}Az OpenTTD-ről
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Eredeti copyright {COPYRIGHT} 1995 Chris Sawyer, Minden jog fenntartva
STR_ABOUT_VERSION :{BLACK}OpenTTD {REV} verzió
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Az OpenTTD csapat
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Az OpenTTD csapat
# Framerate display window
############ Leave those lines in this order!!
@@ -3353,21 +3353,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő n
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Elfogad:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} várakozik{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Termelés megváltoztatása (8 többszörösei 2040-ig)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Termelési szint megváltoztatása (százalékosan, 800%-ig)
diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt
index d847ba02e4..7cb78a8398 100644
--- a/src/lang/icelandic.txt
+++ b/src/lang/icelandic.txt
@@ -2530,7 +2530,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land í eigu fy
STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upphaflegur höfundarréttur {COPYRIGHT} 1995 Chris Sawyer, Öll réttindi áskilin
STR_ABOUT_VERSION :{BLACK}OpenTTD útgáfa {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD hópurinn
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD hópurinn
# Framerate display window
############ Leave those lines in this order!!
@@ -3076,18 +3076,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Miðja a
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Framleiðsla: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Iðnaðurinn hefur tilkynnt yfirvofandi lokun.
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Framleiðir: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Framleiðir: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Breyta framleiðslu (margfeldi af 8, allt að 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Breyta framleiðslumagni (prósentu hámark er 800%)
diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt
index 30447a88a8..322b5840d9 100644
--- a/src/lang/indonesian.txt
+++ b/src/lang/indonesian.txt
@@ -2693,7 +2693,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah milik Per
STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hak Cipta asli {COPYRIGHT} 1995 Chris Sawyer, Hak Cipta dilindungi
STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tim OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Tim OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
@@ -3319,20 +3319,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Arahkan
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tingkat produksi: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industri akan segera ditutup!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan:
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} menunggu{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Perubahan produksi (kelipatan 8, hingga 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ubah tingkat produksi (dalam persen, hingga 800%)
diff --git a/src/lang/irish.txt b/src/lang/irish.txt
index 86dbcbcb62..450c8e9689 100644
--- a/src/lang/irish.txt
+++ b/src/lang/irish.txt
@@ -2681,7 +2681,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Talamh faoi úi
STR_ABOUT_OPENTTD :{WHITE}Maidir le OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Cóipcheart bunaidh {COPYRIGHT} 1995 Chris Sawyer, Gach ceart ar cosaint
STR_ABOUT_VERSION :{BLACK}OpenTTD leagan {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 An fhoireann OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An fhoireann OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3285,18 +3285,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Láraigh
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Leibhéal táirgeachta: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'fhógair an tionscal go ndúnfaidh sé gan mhoill!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Táirgtear: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Táirgtear: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Athraigh táirgeacht (iolra de 8, suas go 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Athraigh an ráta táirgeachta (céatadán, suas go 800%)
diff --git a/src/lang/italian.txt b/src/lang/italian.txt
index c16354f1ce..bd265fe7d3 100644
--- a/src/lang/italian.txt
+++ b/src/lang/italian.txt
@@ -191,6 +191,7 @@ STR_COLOUR_ORANGE :Arancio
STR_COLOUR_BROWN :Marrone
STR_COLOUR_GREY :Grigio
STR_COLOUR_WHITE :Bianco
+STR_COLOUR_RANDOM :Casuale
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -931,6 +932,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizzata.
STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraniano (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Nuovo rublo russo (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Peso messicano (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi
@@ -1282,6 +1284,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non è p
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenzione infrastrutture: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Se abilitata, le infrastrutture causano dei costi di manutenzione. I costi crescono in modo più che proporzionale alla dimensione della rete, influenzando maggiormente le compagnie più grandi rispetto alle piccole
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Colore iniziale compagnia: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Sceglie il colore iniziale della compagnia
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Non rendere mai obsoleti i tipi di aeroporto: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Abilitando questa impostazione, tutti i tipi di aeroporto rimangono disponibili indefinitamente dopo essere stati introdotti
@@ -2729,7 +2733,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno possedu
STR_ABOUT_OPENTTD :{WHITE}Informazioni su OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright originale {COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati
STR_ABOUT_VERSION :{BLACK}OpenTTD versione {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Il team OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Il team OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Frame rate
@@ -2921,7 +2925,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versione
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versione minima compatibile: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Somma MD5: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Tavolozza: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Predefinita (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Predefinita (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nessuno
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informazioni non disponibili
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}File corrispondente non trovato
@@ -3381,21 +3390,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Livello di produzione: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industria ha annunciato che a breve chiuderà!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} in attesa{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambia produzione (multiplo di 8, fino a 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambia livello di produzione (percentuale, fino a 800%)
@@ -3491,6 +3493,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacit
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagoni motorizzati: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Riadattabile per: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Tutti i tipi di carico
+STR_PURCHASE_INFO_NONE :Niente
STR_PURCHASE_INFO_ALL_BUT :Tutto tranne {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Sforzo di trazione massimo: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} riquadr{P o i}
diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt
index 880866c945..d89ade38ae 100644
--- a/src/lang/japanese.txt
+++ b/src/lang/japanese.txt
@@ -2682,7 +2682,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :社有地
STR_ABOUT_OPENTTD :{WHITE}OpenTTDについて
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}オリジナル版権{COPYRIGHT} 1995 Chris Sawyer All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD バージョン {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3286,19 +3286,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}メイ
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生産量: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}この産業拠点は間もなく閉鎖されます!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}と{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}、{STRING}{STRING}、{STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資:
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING}、{STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}生産量を変更 (8の倍数、最大2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}生産量を変更 (%表記、最大800%)
diff --git a/src/lang/korean.txt b/src/lang/korean.txt
index 8c5736136c..8305819cb6 100644
--- a/src/lang/korean.txt
+++ b/src/lang/korean.txt
@@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :주황
STR_COLOUR_BROWN :갈색
STR_COLOUR_GREY :회색
STR_COLOUR_WHITE :흰색
+STR_COLOUR_RANDOM :무작위
+STR_COLOUR_DEFAULT :기본
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -930,6 +932,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :사용자 설
STR_GAME_OPTIONS_CURRENCY_GEL :그루지야 라리 (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :이란 리알 (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :신 러시아 루블 (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :멕시코 페소 (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식
@@ -1259,6 +1262,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}이미
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :기반시설 유지비: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :이 설정을 켜면, 기반시설 유지비가 발생합니다. 유지비는 교통망의 규모에 비례하며 대형 회사는 소형 회사보다 많은 유지비가 들어갑니다.
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :시작시 회사 색상: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택하세요.
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다.
@@ -1817,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}현재
STR_CHEAT_SETUP_PROD :{LTBLUE}1차 산업시설 생산량 조절 허용: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}새 색상
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 색상
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}기본 색상 선택
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}열차 색상 선택
@@ -2700,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :회사 소유
STR_ABOUT_OPENTTD :{WHITE}OpenTTD에 대해서
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD 버전 {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 개발팀
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 개발팀
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}프레임레이트
@@ -2775,6 +2780,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}사용
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}검색할 문자열:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}파일 덮어쓰기
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}정말로 이미 존재하는 파일에 덮어씌우시겠습니까?
STR_SAVELOAD_OSKTITLE :{BLACK}게임을 저장할 파일명을 입력하세요
@@ -2892,7 +2899,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}버전:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}최소 이용 가능한 버전: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5합: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}색상표: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :도스
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :도스 / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Windows
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Windows / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}매개 변숫값: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :없음
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}관련 정보 없음
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}일치하는 파일을 찾을 수 없습니다
@@ -3352,21 +3364,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}받는 화물: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}생산 화물: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}받는 화물:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 대기중{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}생산량 변경 (8의 배수, 최대 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}생산 등급 변경 (퍼센트, 800%까지)
@@ -3419,6 +3424,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}그룹 -
STR_GROUP_CREATE_TOOLTIP :{BLACK}그룹 만들기
STR_GROUP_DELETE_TOOLTIP :{BLACK}선택한 그룹 삭제
STR_GROUP_RENAME_TOOLTIP :{BLACK}선택한 그룹 이름 바꾸기
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}선택한 그룹의 차량 색상을 변경합니다.
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}클릭하여 전체 자동 교체로부터 이 그룹을 보호합니다.
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}그룹 삭제
@@ -3462,6 +3468,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}수용
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}전원 화물차: {GOLD}+{POWER}{BLACK} 중량: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}개조가능 화물: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :모든 화물
+STR_PURCHASE_INFO_NONE :없음
STR_PURCHASE_INFO_ALL_BUT :{CARGO_LIST} 이외의 모든 화물
STR_PURCHASE_INFO_MAX_TE :{BLACK}최고 견인력: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}항속거리: {GOLD}{COMMA} 칸
@@ -3861,6 +3868,7 @@ STR_ORDER_CONDITIONAL_AGE :연령 (년)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :정비 필요성
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :항상
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :남은 수명 (년)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :최대 신뢰도
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}왼쪽의 비교조건과 오른쪽의 입력값을 비교할 연산자를 선택합니다.
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :=
diff --git a/src/lang/latin.txt b/src/lang/latin.txt
index d5a4a744dd..5de041dcf7 100644
--- a/src/lang/latin.txt
+++ b/src/lang/latin.txt
@@ -3503,21 +3503,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Movere c
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Quantitas productionis: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Haec industria mox claudetur!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} manet{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Mutare productionem (per octo multiplicatur, ad 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mutare productionem (centesima, ad 800%)
diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt
index 79788a54c1..34d12f9e6a 100644
--- a/src/lang/latvian.txt
+++ b/src/lang/latvian.txt
@@ -2627,7 +2627,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Uzņēmumam pie
STR_ABOUT_OPENTTD :{WHITE}Par OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oriģināla autortiesības {COPYRIGHT} 1995 Kriss Sojers. Visas tiesības paturētas
STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD darba grupa
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD darba grupa
# Framerate display window
STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x
@@ -3229,18 +3229,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Mainīt ražošanu (dalāmais ar 8, līdz pat 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mainīt ražošanas līmeni (procentos, līdz 800%)
diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt
index 631613d82d..0942333483 100644
--- a/src/lang/lithuanian.txt
+++ b/src/lang/lithuanian.txt
@@ -2900,7 +2900,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanijos žem
STR_ABOUT_OPENTTD :{WHITE}Apie OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pradinės versijos teisės priklauso {COPYRIGHT} 1995 Chris Sawyer, Visos teisės saugomos
STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD komanda
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD komanda
# Framerate display window
############ Leave those lines in this order!!
@@ -3504,18 +3504,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centruot
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Gamybos sparta: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Pramonės įmonė paskelbė apie jos neišvengiamą uždarymą!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING}, {STRING.ko}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING}, {STRING.ko}{STRING}, {STRING.ko}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gamina: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Gamina: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Keisti gamybos apimtį (8 daugiklis, iki 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Pakeisti gamybos spartą (procentais, iki 800%)
diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt
index 044d1b82f0..27e5f1594b 100644
--- a/src/lang/luxembourgish.txt
+++ b/src/lang/luxembourgish.txt
@@ -2685,7 +2685,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land am Firmenb
STR_ABOUT_OPENTTD :{WHITE}Iwwert OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original Copyright {COPYRIGHT} 1995 Chris Sawyer, All Rechter virbehalen
STR_ABOUT_VERSION :{BLACK}OpenTTD Versioun {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 D'OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 D'OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3289,21 +3289,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréi
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} um waarden{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}D'Produktioun änneren (Multipel vun 8, bis op 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Änner de Produktiounslevel (Prozenter, bis zu 800%)
diff --git a/src/lang/malay.txt b/src/lang/malay.txt
index 956b5c38f0..9bdbe9f443 100644
--- a/src/lang/malay.txt
+++ b/src/lang/malay.txt
@@ -2427,7 +2427,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah dimiliki
STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hakcipta Asal {COPYRIGHT} 1995 Chris Sawyer, Hakcipta terpelihara
STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -2984,19 +2984,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Pusatkan
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tahap produksi: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW} Industri mengumumkan penutupan serta merta!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Diperlukan:
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Ubah pengeluaran (gandaan 8, sehingga 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ubah tahap produksi (peratus, hingga 800%)
diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt
index 55b78fec69..203166898a 100644
--- a/src/lang/norwegian_bokmal.txt
+++ b/src/lang/norwegian_bokmal.txt
@@ -2689,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firma-eid lando
STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opprinnelig opphavsbeskyttet {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheter reservert
STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet
# Framerate display window
############ Leave those lines in this order!!
@@ -3293,21 +3293,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Gå til
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Endre produksjon (multiplum av 8, opptil 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Endre produksjonsnivå (prosentsats, opptil 800{NBSP}%)
diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt
index 587ce0cce1..28f6fb3e37 100644
--- a/src/lang/norwegian_nynorsk.txt
+++ b/src/lang/norwegian_nynorsk.txt
@@ -2604,7 +2604,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Feltet eigast a
STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opphaveleg opphavsbeskytta av {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheiter reservert
STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV}. Oversett til nynorsk av Thor Morten Skogrand med fleire.
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet
# Framerate display window
############ Leave those lines in this order!!
@@ -3204,18 +3204,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Midtstil
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Verksemda legg snarleg ned drifta!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Lagar: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Lagar: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Byt produksjon (8-gongen, opptil 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Endre produksjonsnivå (prosent, opp til 800%)
diff --git a/src/lang/polish.txt b/src/lang/polish.txt
index 628a398f29..039ba954f3 100644
--- a/src/lang/polish.txt
+++ b/src/lang/polish.txt
@@ -568,6 +568,7 @@ STR_COLOUR_ORANGE :Pomarańczowy
STR_COLOUR_BROWN :Brązowy
STR_COLOUR_GREY :Szary
STR_COLOUR_WHITE :Biały
+STR_COLOUR_RANDOM :Losowy
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -854,6 +855,7 @@ STR_ABOUT_MENU_SCREENSHOT :Zrzut ekranu
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zrzut ekranu z pełnym przybliżeniem
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zrzut ekranu z przybliżeniem domyślnym
STR_ABOUT_MENU_GIANT_SCREENSHOT :Zrzut ekranu całej mapy
+STR_ABOUT_MENU_SHOW_FRAMERATE :Pokaż ilość klatek na sekundę
STR_ABOUT_MENU_ABOUT_OPENTTD :Info o 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Wyrównywanie sprite'ów
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Włącz/wyłącz ramki
@@ -1056,6 +1058,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Wyczyść
STR_PLAYLIST_CHANGE_SET :{BLACK}Zmień zestaw
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Wyczyść obecny program (tylko Wlasny1 lub Wlasny2)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Zmień wybór muzyki na następny zainstalowany zestaw
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik na ścieżce aby dodać do obecnego programu (Wlasny1 i Wlasny2)
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknij na ścieżce muzycznej aby usunąć ją z wybranego programu (Wlasny1 lub Wlasny2)
@@ -1192,6 +1195,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Prezes)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponsoruje konstrukcję nowego miasta {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Zostało wybudowane nowe miasto o nazwie {TOWN}!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Rozpoczęto budowę nowe{G go j go} {STRING.d} blisko {TOWN}!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Now{G y a e} {STRING} został{G 0 "" a o} posadzon{G 0 y a e} blisko {TOWN}!
@@ -1304,6 +1308,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Południow
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Własna...
STR_GAME_OPTIONS_CURRENCY_GEL :Lari gruzińskie (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial irański (IRR)
+STR_GAME_OPTIONS_CURRENCY_RUB :Nowy rubel rosyjski (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Peso meksykańskie (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Pojazdy drogowe
@@ -1633,6 +1639,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmiana t
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Utrzymywanie infrastruktury: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kiedy włączone, utrzymanie infrastruktury jest naliczane w kosztach. Koszty wzrastają nadproporcjonalnie do rozmiarów sieci połączeń, a więc dotykają bardziej duże niż małe firmy
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wybierz początkowy kolor dla firmy
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Pozwól budować stare lotniska: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Włączona opcja sprawia, że każdy typ lotniska będzie dostępny na zawsze od chwili wprowadzenia
@@ -1776,7 +1783,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Wlącz obsług
STR_CONFIG_SETTING_LOADING_INDICATORS :Pokazuj wskaźniki załadunku: {STRING}
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wybierz, czy wskaźnik załadunku pokazuje się nad ładowanym/rozładowywanym pojazdem
STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokazuj rozkłady jazdy w tickach, a nie w dniach: {STRING}
-STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tyknięciach gry zamiast w dniach
+STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tickach gry zamiast w dniach
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjazdy i odjazdy w rozkładach: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach
STR_CONFIG_SETTING_QUICKGOTO :Szybkie tworzenie poleceń pojazdu: {STRING}
@@ -3070,17 +3077,31 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren w posiada
STR_ABOUT_OPENTTD :{WHITE}OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prawa Autorskie {COPYRIGHT} 1995 Chris Sawyer, Wszelkie prawa zastrzeżone
STR_ABOUT_VERSION :{BLACK}OpenTTD wersja {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Zespół OpenTTD
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę.
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę.
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji.
STR_FRAMERATE_CURRENT :{WHITE}Obecny
+STR_FRAMERATE_AVERAGE :{WHITE}Średnia
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} klatek/sek.
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} klatek/sek.
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} klatek/sek.
+STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
+STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} sek.
############ Leave those lines in this order!!
STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Opóźnienie wykresu połączeń:
+STR_FRAMERATE_DRAWING :{BLACK}Renderowanie grafiki:
STR_FRAMERATE_VIDEO :{WHITE}Wyjście video:
STR_FRAMERATE_SOUND :{WHITE}Miksowanie dźwięku:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_DRAWING :Renderowanie grafiki
STR_FRAMETIME_CAPTION_VIDEO :Wyjście wideo
STR_FRAMETIME_CAPTION_SOUND :Miksowanie dźwięku
############ End of leave-in-this-order
@@ -3370,6 +3391,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Wpisz na
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Miasta
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Żaden -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Miasto){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nazwy miast - klik na nazwie aby wycentrować widok na mieście. Ctrl+klik otwiera nowy podgląd na lokację miasta
STR_TOWN_POPULATION :{BLACK}Populacja świata: {COMMA}
@@ -3682,21 +3704,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centruj
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Potrzebuje:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} oczekuje{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmiana produkcji (wielokrotność 8, do 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmiana poziomu produkcji (procentowo, do 800%)
@@ -4197,6 +4209,7 @@ STR_ORDER_CONDITIONAL_AGE :Wiek (w latach)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Wymaga serwisowania
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Zawsze
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Pozostały czas życia (w latach)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksymalna niezawodność
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Jak porównać dane pojazdu z zadaną wartością
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :jest równy
diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt
index e50745fc71..1eff62076c 100644
--- a/src/lang/portuguese.txt
+++ b/src/lang/portuguese.txt
@@ -140,7 +140,7 @@ STR_ABBREV_GOODS :{TINY_FONT}BN
STR_ABBREV_GRAIN :{TINY_FONT}CR
STR_ABBREV_WOOD :{TINY_FONT}MD
STR_ABBREV_IRON_ORE :{TINY_FONT}FR
-STR_ABBREV_STEEL :{TINY_FONT}AÇ
+STR_ABBREV_STEEL :{TINY_FONT}AC
STR_ABBREV_VALUABLES :{TINY_FONT}VL
STR_ABBREV_COPPER_ORE :{TINY_FONT}CO
STR_ABBREV_MAIZE :{TINY_FONT}ML
@@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :Laranja
STR_COLOUR_BROWN :Castanho
STR_COLOUR_GREY :Cinzento
STR_COLOUR_WHITE :Branco
+STR_COLOUR_RANDOM :Aleatório
+STR_COLOUR_DEFAULT :Padrão
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph
@@ -261,7 +263,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Ao activ
STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ao activar este botão, os aviões ocultos também serão exibidos
# Query window
-STR_BUTTON_DEFAULT :{BLACK}Por Omissão
+STR_BUTTON_DEFAULT :{BLACK}Padrão
STR_BUTTON_CANCEL :{BLACK}Cancelar
STR_BUTTON_OK :{BLACK}Confirmar
@@ -476,7 +478,8 @@ STR_ABOUT_MENU_SCREENSHOT :Captura de ecr
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura com resolução máxima
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura com resolução normal
STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa
-STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o OpenTTD...
+STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de fotograma
+STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de gráficos
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar as caixas envolventes
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ligar/Desligar coloração de blocos sujos
@@ -603,7 +606,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Director
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Chefe Executivo
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director Executivo
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente
-STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnate
+STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnata
# Performance detail window
STR_PERFORMANCE_DETAIL :{WHITE}Detalhes de rendimentos
@@ -651,6 +654,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------
+STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Nenhuma música disponível
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}'{STRING}'
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Faixa
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título
@@ -671,11 +675,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Ligar/De
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Mostrar janela de selecção de faixas de música
# Playlist window
+STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Programa musical - '{STRING}'
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} '{STRING}'
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Índice de faixas
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}'
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Limpar
+STR_PLAYLIST_CHANGE_SET :{BLACK}Mudar conjunto
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Limpar programa actual (somente Personaliz. 1 ou Personaliz. 2)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mudar selecção musical para outro conjunto instalado
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para a adicionar ao programa actual (somente Personaliz. 1 ou Personaliz. 2)
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Faça clique numa faixa para a remover da lista (Personaliz. 1 ou Personaliz. 2 apenas)
@@ -811,6 +818,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} subsidiou a construção da nova cidade de {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uma nova cidade chamada {TOWN} foi construida!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G 0 o o a os as} {STRING} em construção em {TOWN}!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G 0 o o a os as} {STRING} est{G 0 á á á ão ão} a ser plantad{G 0 o o a os as} em {TOWN}!
@@ -878,10 +886,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Visualizador {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiar p/ o visualizador
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Alterar janela de exibição
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar a localização do visualizador global para este visualizador
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar do visualizador
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colar a localização deste visualizador para o visualizador global
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Alterar vista principal
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar a localização desta janela de exibição para a vista principal
# Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo
@@ -923,6 +931,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul Africa
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado...
STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano (IRR)
+STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Veículos rodoviários
@@ -1163,11 +1173,11 @@ STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolha quanto
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altura máxima do mapa: {STRING}
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Define altura máxima permitida para montanhas no mapa
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Pode aumentar a altura máxima do mapa para este valor. Pelo menos uma montanha no mapa é mais alta
-STR_CONFIG_SETTING_AUTOSLOPE :Permitir formação de terra sob os edifícios, vias, etc. (auto-declive): {STRING}
-STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permitir formação de terras debaixo de edifícios e linhas sem os remover
+STR_CONFIG_SETTING_AUTOSLOPE :Permite alteração de terra sob edifícios, vias, etc. (auto-declive): {STRING}
+STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite alteração de terra sob edifícios e vias sem os remover
STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista de áreas de abrangência: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Haver diferentes áreas de cobertura para diferentes tipos de estações e aeroportos
-STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir remover mais mais estradas, pontes e túneis detidos pela cidade: {STRING}
+STR_CONFIG_SETTING_EXTRADYNAMITE :Permite remover mais estradas, pontes e túneis detidos pela cidade: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoçar de edifícios e infraestruturas detidas pela cidade
STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de comboios: {STRING}
STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Assignar o tamanho máximo dos comboios
@@ -1186,7 +1196,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um q
STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios e barcos fazer curvas de 90º: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. Também se aplica ao raio de curvatura dos navios
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir juntar estações não adjacentes: {STRING}
-STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permitir adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes
+STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes
STR_CONFIG_SETTING_INFLATION :Inflação: {STRING}
STR_CONFIG_SETTING_INFLATION_HELPTEXT :Ativar inflação na economia, para que os preços subam ligeiramente mais rápido do que os pagamentos
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Tamanho máximo de ponte: {STRING}
@@ -1224,16 +1234,16 @@ STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Desligado
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualizador principal, só ecrã cheio
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Visualizador principal
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todos os visualizadores
-STR_CONFIG_SETTING_BRIBE :Permitir o suborno da autoridade local: {STRING}
-STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permitir que as companhias subornem as autoridades locais. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses
-STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir comprar exclusivo dos direitos de transportes: {STRING}
+STR_CONFIG_SETTING_BRIBE :Permite o suborno da autoridade local: {STRING}
+STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permite que as companhias tentem subornar a autoridade local. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses
+STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permite comprar direitos de transporte em exclusividade: {STRING}
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa compra direitos exclusivos de transporte para uma cidade, as estações dos concorrentes (passageiros e carga) não receberão cargo durante um ano
-STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir investir em edificios: {STRING}
-STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permitir que empresas doem dinheiro às cidades para financiar creação de novas casas
-STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir o financiamento de reconstrução de estradas locais:{STRING}
-STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que as companhias financiem reparações de estradas para sabotar serviços rodoviários dos oponentes.
-STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinheiro para outras empresas: {STRING}
-STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permitir transferencias de dinheiro entre empresas em modo multi-jogador
+STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permite investir em edifícios: {STRING}
+STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às cidades para financiar novas casas
+STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permite financiar a reconstrução de estradas locais:{STRING}
+STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permite que as companhias financiem reparações de estrada para sabotar serviços rodoviários dos oponentes.
+STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permite enviar dinheiro para outras empresas: {STRING}
+STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permite transferências de dinheiro entre empresas em modo multi-jogador
STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso para simular comboios pesados: {STRING}
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Define o impacto de carregar mercadoria nos combóios. Um valor superior torna o carregamento de meradoria mais exigente para os combóios, especialmente em terreno inclinado
STR_CONFIG_SETTING_PLANE_SPEED :Fator de velocidade de avião: {STRING}
@@ -1244,14 +1254,16 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Indicar a hipó
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
-STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir estações de passagem em estradas das cidades: {STRING}
+STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permite estações de passagem em estradas das cidades: {STRING}
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permite construção de paragens drive-through em ruas que são prorpiedade das povoações
-STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permitir estações de passagem em estradas do adversário: {STRING}
+STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permite estações de passagem em estradas do adversário: {STRING}
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Permite construção de paragens drive-through em ruas que são prorpiedade de outras companhias
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é possível mudar quando já existem veículos.
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de infraestruturas: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando activo, as infraestruturas têm custos de manutenção. O custo cresce mais do que proporcionalmente com o tamanho da rede e com isso afecta mais as companhias maiores comparado com as mais pequeneas
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Côr de inicio da empresa: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolher côr de inicio da empresa
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activar esta preferência torna cada tipo de aeroporto disponível para sempre após a sua introdução
@@ -1271,8 +1283,8 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Auto-renovaçã
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quando activo, um veículo a chegar ao fim de vida é automaticamente substituído quando as condições de renovação estão reunidas
STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automaticamente quando um veículo chega a {STRING} de idade
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa a partir da qual um veículo deva ser indicado para auto-renovação
-STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} mês{P 0 "" es} antes
-STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} mês{P 0 "" es} após
+STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} {P "mês" "meses"} antes
+STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} {P "mês" "meses"} após
STR_CONFIG_SETTING_AUTORENEW_MONEY :Dinheiro mínimo para fazer auto-renovação: {STRING}
STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantidade mínima de dinheiro que tem que estar no banco para auto-renovação de veículos ser considerada
STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING}
@@ -1336,6 +1348,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde Escuro
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta
+STR_CONFIG_SETTING_SCROLLMODE :Comportamento de deslocação da janela de exibição: {STRING}
+STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento na deslocação do mapa
+STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover janela de exibição com Botão Direito Rato, posição do rato bloqueada
+STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com Botão Direito Rato, posição do rato bloqueada
+STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com Botão Direito Rato
+STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo Rato
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da navegação no mapa: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a vista principal navega para uma posição específica ao clicar no mapa pequeno ou ao dar um comando para navegar para um objecto específico no mapa. Se activo, a vista principal navega suavemente, se inactivo a vista salta directamente para o destino.
STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas nas várias ferramentas de construção: {STRING}
@@ -1447,13 +1465,13 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barc
STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activar esta preferência impossibilita a construção de navios por um jogador controlado pelo computador
STR_CONFIG_SETTING_AI_PROFILE :Perfil de preferências por omissão: {STRING}
-STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolher o perfil de preferências a usar para AIs aleatórias ou para valores iniciais ao adicionar uma nova AI ou Game Script
+STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolher o perfil de preferências a usar para AIs aleatórias ou para valores iniciais ao adicionar uma nova AI ou Script de Jogo
STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil
STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Média
STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil
-STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IAs em multi-jogador: {STRING}
-STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permitir a jogadores controlados pelo computador a participação em jogos multijogador
+STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permite IAs em multi-jogador: {STRING}
+STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite a jogadores controlados pelo computador a participação em jogos multi-jogador
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de os scripts serem suspensos: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar num turno
@@ -1465,7 +1483,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dia{P 0
STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado
STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalo de serviço para veículos de estrada por omissão: {STRING}
STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Definir o intervalo de manutenção por omissão para novos veículos de estrada, se não for configurado um intervalo de manutenção explícito para o veículo
-STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de serviço para aeronaves por omissão: {STRING}
+STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de serviço para aeronaves padrão: {STRING}
STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo de manutenção por omissão para novas aeronaves, se não for configurado um intervalo de manutenção explícito para o veículo
STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de serviço para navios por omissão: {STRING}
STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo de manutenção por omissão para novos navios, se não for configurado um intervalo de manutenção explícito para o veículo
@@ -1548,7 +1566,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :grelha 2x2
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :grelha 3x3
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatório
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :As cidades têm permissão para construir estradas: {STRING}
-STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas
+STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permite às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Cidades podem construir passagens de nível: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activar esta preferência permite às cidades construir cruzamentos nivelados
STR_CONFIG_SETTING_NOISE_LEVEL :Permitir que a cidade controle o nível de ruído dos aeroportos: {STRING}
@@ -1683,7 +1701,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Cidades
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrias
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuição de Carga
STR_CONFIG_SETTING_AI :{ORANGE}Oponentes
-STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jogadores computador
+STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jogadores Computador
STR_CONFIG_SETTING_PATHFINDER_OPF :Original
STR_CONFIG_SETTING_PATHFINDER_NPF :NPF
@@ -1787,7 +1805,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Tem a c
# Cheat window
STR_CHEATS :{WHITE}Truques
STR_CHEATS_TOOLTIP :{BLACK}As caixas de verificação indicam se já usou este truque antes
-STR_CHEATS_WARNING :{BLACK} Atenção! Está prestes a trair seus concorrentes. Tenha em mente que a desonra vai ser lembrada para a eternidade
+STR_CHEATS_WARNING :{BLACK} Atenção! Está prestes a trair seus concorrentes. Tenha em mente que a desonra será lembrada para a eternidade
STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer mágico (destrói indústrias, objectos amovíveis etc.): {ORANGE}{STRING}
@@ -1804,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar
STR_CHEAT_SETUP_PROD :{LTBLUE}Activar modificação de valores de produção: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Novo Esquema de Cores
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquema de cores geral
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibir esquemas de cores dos comboios
@@ -2280,6 +2298,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda
STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todos
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nenhuma
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecione as companhias a serem mostradas
+STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}não usado
@@ -2364,9 +2383,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Co
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal (eléctrico){}Os sinais permitem que vários comboios entrem na mesma linha ao mesmo tempo, desde que consigam chegar ao seu destino em segurança. Sinais padrão podem ser passados no sentido contrário.
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (eléctrico){}Um sinal de trajecto permite que mais de um comboio passe ao mesmo tempo um sinal se, o comboio conseguir reservar um caminho para onde posteriormente possa parar sem prejudicar o seguinte. Sinais de um único sentido não podem ser passados no sentido contrário.
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversão de Sinal{}Quando seleccionado, ao fazer clique num sinal existente este será convertido no tipo e variante de sinal seleccionado, Ctrl+clique irá comutar a variante existente. Shift+Clique mostra estimativa do custo de conversão
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densidade de sinais
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir densidade de sinais
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar densidade de sinais
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância de arrasto de sinais
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reduzir distância de arrasto de sinais
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar a distância de arrasto de sinais
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Seleccione Ponte Ferroviária
@@ -2375,10 +2394,10 @@ STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selecç
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensa, Aço
-STR_BRIDGE_NAME_GIRDER_STEEL :Vigas, Aço
-STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Aço
+STR_BRIDGE_NAME_GIRDER_STEEL :Viga, Aço
+STR_BRIDGE_NAME_CANTILEVER_STEEL :Consola, Aço
STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Suspensa, Betão
-STR_BRIDGE_NAME_WOODEN :De madeira
+STR_BRIDGE_NAME_WOODEN :Madeira
STR_BRIDGE_NAME_CONCRETE :Betão
STR_BRIDGE_NAME_TUBULAR_STEEL :Tubular, Aço
STR_BRIDGE_TUBULAR_SILICON :Tubular, Silício
@@ -2457,8 +2476,8 @@ STR_AIRPORT_INTERNATIONAL :Internacional
STR_AIRPORT_COMMUTER :Transbordo
STR_AIRPORT_INTERCONTINENTAL :Intercontinental
STR_AIRPORT_HELIPORT :Heliporto
-STR_AIRPORT_HELIDEPOT :Heli-depósito
-STR_AIRPORT_HELISTATION :Heli-estação
+STR_AIRPORT_HELIDEPOT :Heli Hangar
+STR_AIRPORT_HELISTATION :Heliponto
STR_AIRPORT_CLASS_SMALL :Aeroportos pequenos
STR_AIRPORT_CLASS_LARGE :Aeroportos grandes
@@ -2660,17 +2679,17 @@ STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Túnel ferrovi
STR_LAI_TUNNEL_DESCRIPTION_ROAD :Túnel rodoviário
STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Ponte ferroviária suspensa em aço
-STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ponte ferroviária com vigas em aço
-STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Ponte ferroviária cantilever em aço
-STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Ponte ferroviária suspensa de betão reforçado
+STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ponte ferroviária em vigas de aço
+STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Ponte ferroviária em consolas de aço
+STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Ponte ferroviária suspensa de betão armado
STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Ponte ferroviária de madeira
STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Ponte ferroviária de betão
STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Ponte rodoviária tubular
STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ponte rodoviária suspensa em aço
STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ponte rodoviária com vigas em aço
-STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ponte rodoviária cantilever em aço
-STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Ponte rodoviária suspensa de betão reforçado
+STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ponte rodoviária em consolas de aço
+STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Ponte rodoviária suspensa de betão armado
STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Ponte rodoviária de madeira
STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Ponte rodoviária de betão
STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Ponte rodoviária tubular
@@ -2683,15 +2702,58 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sede de empresa
STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propriedade de uma empresa
# About OpenTTD window
-STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD...
+STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados
STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipa do OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipa do OpenTTD
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotograma
+STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Taxa de simulação: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Numero de quantidades de atraso no percurso simulados por segundo.
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Taxa de fotogramas dos gráficos: {STRING}
+STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas de video renderizados por segundo.
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidade actual do jogo: {DECIMAL}x
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está a ser executado, comparado com a velocidade esperada na taxa de simulação normal.
+STR_FRAMERATE_CURRENT :{WHITE}Actual
+STR_FRAMERATE_AVERAGE :{WHITE}Média
+STR_FRAMERATE_DATA_POINTS :{BLACK}Dados baseados em {COMMA} medições
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} fotograma/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fotograma/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fotograma/s
+STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
+STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
+STR_FRAMERATE_GAMELOOP :Total de loops no jogo
+STR_FRAMERATE_GL_ECONOMY :{BLACK} Movimentação de carga:
+STR_FRAMERATE_GL_TRAINS :{BLACK} Quantidade de atraso no percurso do Comboio:
+STR_FRAMERATE_GL_ROADVEHS :{BLACK}Quantidade de atraso no percurso do veículo rodoviário:
+STR_FRAMERATE_GL_SHIPS :{BLACK} Ship ticks:
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Quantidade de atraso no percurso de Aeronave:
+STR_FRAMERATE_GL_LANDSCAPE :{BLACK} World ticks:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Atraso no gráfico de ligação:
+STR_FRAMERATE_DRAWING :{BLACK}Renderização gráfica:
+STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Janelas de exibição do mundo:
+STR_FRAMERATE_VIDEO :{BLACK}Saída de video:
+STR_FRAMERATE_SOUND :{BLACK}Mistura de Som:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Movimentação de carga
+STR_FRAMETIME_CAPTION_GL_TRAINS :Quantidade de atraso no percurso do Comboio
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Quantidade de atraso no percurso do veículo rodoviário
+STR_FRAMETIME_CAPTION_GL_SHIPS :Quantidade de atraso no percurso do barco
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Quantidade de atraso no percurso de Aeronave
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Quantidade de Atraso no Percurso Mundial
+STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso no gráfico de ligação
+STR_FRAMETIME_CAPTION_DRAWING :Renderização gráfica
+STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de janela de exibição do mundo
+STR_FRAMETIME_CAPTION_VIDEO :Saída de video
+STR_FRAMETIME_CAPTION_SOUND :Mistura de Som
############ End of leave-in-this-order
@@ -2717,6 +2779,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
+STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro de sequência:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir Ficheiro
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem a certeza que deseja substituir o ficheiro existente?
STR_SAVELOAD_OSKTITLE :{BLACK}Introduza um nome para o jogo gravado
@@ -2798,7 +2863,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informa
STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Ficheiros NewGRF activos
STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Ficheiros NewGRF inactivos
STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Seleccionar predefinição:
-STR_NEWGRF_FILTER_TITLE :{ORANGE}Frase filtro:
+STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtro de sequência:
STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Carrega a predefinição seleccionada
STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Guardar
STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Guarda a lista numa predefinição
@@ -2834,7 +2899,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versão:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versão mínima compatível: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nenhum
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Sem informação disponível
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Ficheiro correspondente não encontrado
@@ -2915,6 +2985,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Leitura além d
STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF pedidos não disponíveis (sprite {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desactivado por {STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de Gráfico Inválido ou desconhecido (sprite {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Demasiados elementos na lista de valores de propriedade (sprite {3:NUM}, propriedade {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Revogação da produção industrial inválida (sprite {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta!
@@ -2979,6 +3051,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduz
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Cidades
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nenhuma -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Cidade){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das cidades - clique no nome para centrar a visualização na cidade. Ctrl+Clique abre um novo visualizador na localização da cidade
STR_TOWN_POPULATION :{BLACK}População Mundial: {COMMA}
@@ -2986,6 +3059,7 @@ STR_TOWN_POPULATION :{BLACK}Populaç
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Metrópole)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} ultimo mês: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Mercadoria necessária para o seu desenvolvimento:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED}É necessário {ORANGE}{STRING}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{BLACK}No inverno, é necessário {ORANGE}{STRING}
@@ -3225,10 +3299,10 @@ STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Nenhum
STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY_LONG}
STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% propriedade de {COMPANY})
STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraestrutura:
-STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} peça{P "" s} de caminho-de-ferro
-STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} peça{P "" s} de estrada
-STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} quadrado{P "" s} de água
-STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} quadrado{P "" s} de estação
+STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} {P "secção" "secções" } de caminho-de-ferro
+STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} {P "secção" "secções"} de estrada
+STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} bloco{P "" s} de água
+STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} bloco{P "" s} de estação
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} aeroporto{P "" s}
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhum
@@ -3262,15 +3336,15 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos
# Company infrastructure window
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraestrutura de {COMPANY}
-STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Peças de caminho-de-ferro:
+STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Secções de caminho-de-ferro:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais
-STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Peças de estrada:
+STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Secções de estrada:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Estrada
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Via para elétricos
-STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Quadrados de água:
+STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Blocos de água:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações:
-STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Quadrados de estações
+STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Blocos de estações
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Aeroportos
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENCY_LONG}/ano
@@ -3290,21 +3364,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requer:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a aguardar{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Modificar produção (múltiplo de 8, até 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mudar o nível de produção (percentagem, até 800%)
@@ -3357,6 +3424,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos -
STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo
STR_GROUP_DELETE_TOOLTIP :{BLACK}Remover o grupo seleccionado
STR_GROUP_RENAME_TOOLTIP :{BLACK}Mudar o nome do grupo seleccionado
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a imagem do grupo selecionado
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da autosubstituição global
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Apagar Grupo
@@ -3374,11 +3442,11 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}%
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Novos Veículos Ferroviários
-STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos comboios para carris electrificados
+STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos Veículos Ferroviários Elétricos
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Novos Veículos Monocarril
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos Maglev
-STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Novos Veículos Sobre Carris
+STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Novos Veículos Ferroviários
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Veículos Rodoviários
STR_BUY_VEHICLE_SHIP_CAPTION :Novos Barcos
STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave
@@ -3400,6 +3468,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões Motorizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reconvertível para: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos de carga
+STR_PURCHASE_INFO_NONE :Nenhum
STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. Força de Tracção: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados
@@ -3407,7 +3476,7 @@ STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de veículos ferroviários - clique num veículo para informações
STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de veículos rodoviários - clique num veículo para informações
-STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selecção de navios. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de navio
+STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selecção de barcos. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de barco
STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de aeronaves - clique na aeronave para informações
STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo
@@ -3725,7 +3794,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Lucro da conversão: {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo da adaptação: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Lucro da conversão: {GREEN}{CURRENCY_LONG}
-STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos a reaparelhar. Arrastando com o rato permite selecionar vários veículos. Clicando sobre um espaço vazio irá selecionar todo o veículo. Ctrl+Clique irá selecionar um veículo e composição
+STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos a readaptar. Arrastando com o rato permite selecionar vários veículos. Clicando sobre um espaço vazio irá selecionar todo o veículo. Ctrl+Clique irá selecionar um veículo e composição
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Seleccionar tipo de carga do comboio
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Seleccione o tipo de carga para o veículo
@@ -3799,6 +3868,7 @@ STR_ORDER_CONDITIONAL_AGE :Idade (anos)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requer manutenção
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida restante (anos)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Máxima fiabilidade
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar os dados do veículo com o parâmetro passado
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a
@@ -3973,7 +4043,7 @@ STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Nome do
STR_AI_DEBUG_SETTINGS :{BLACK}Definições
STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as definições do script
STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA
-STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Terminar a IA, recarrega o script e reinicia a IA
+STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Termina a IA, recarrega o script e reinicia a IA
STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activar/desactivar paragem quando o registo da IA for igual à string de paragem
STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em:
STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em
@@ -4231,6 +4301,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... estrada orientada na direcção incorrecta
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... estações de passagem não podem ter curvas
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... estações de passagem não podem ter cruzamentos
+STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... estrada de sentido único ou bloqueada
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Não é possível remover parte da estação...
@@ -4482,6 +4553,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Sons originais
STR_BASESOUNDS_WIN_DESCRIPTION :Sons originais da edição Windows de Transport Tycoon Deluxe.
STR_BASESOUNDS_NONE_DESCRIPTION :Um conjunto de sons vazio.
STR_BASEMUSIC_WIN_DESCRIPTION :Música original da edição Windows de Transport Tycoon Deluxe.
+STR_BASEMUSIC_DOS_DESCRIPTION :Música original da edição DOS do Transport Tycoon Deluxe.
+STR_BASEMUSIC_TTO_DESCRIPTION :Música original da edição DOS do Transport Tycoon (Original/Editor de Mundo)
STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de música vazio.
##id 0x2000
diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt
index 14bd028643..5a86b952dc 100644
--- a/src/lang/romanian.txt
+++ b/src/lang/romanian.txt
@@ -674,7 +674,9 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Lista melodiilor
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}'
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Şterge
+STR_PLAYLIST_CHANGE_SET :{BLACK}Schimbă setul
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Şterge programul curent (doar pentru cele personale)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Schimbă selecția muzicală pe un alt set instalat
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click pe o melodie pentru a o adăuga în programul personal curent
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Apasă pe melodie pentru a o elimina din programul actual (doar Custom1 sau Custom2)
@@ -997,6 +999,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecta
STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} fişier{P "" e} corupt{P "" e}
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de muzică de bază
+STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nu s-a putut obține lista de rezoluții suportate
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Comutarea pe întreg ecranul a eşuat
# Custom currency window
@@ -1112,6 +1115,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Setări joc (st
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Setări joc (stocate în salvări; afectează doar jocul curent)
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Setări companie (stocate în salvări; afectează doar jocurile noi)
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Setări compenia (stocate în salvări; afectează doar compania curentă)
+STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Arată toate rezultatele de căutare setând{}{SILVER}Categoria {BLACK}în {WHITE}{STRING}
STR_CONFIG_SETTINGS_NONE :{WHITE}- Nespecificat -
STR_CONFIG_SETTING_OFF :Inactiv
@@ -1286,6 +1290,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR :Generator teren
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
STR_CONFIG_SETTING_TERRAIN_TYPE :Tip teren: {STRING}
+STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Doar TerraGenesis) Frecvența dealurilor din peisaj
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitatea industriei: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distanța maximă de la marginea hărții pentru rafinării: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinăriile de petrol vor fi construite doar la marginea hărţii, sau pe coastă, în cazul harţilor insulare
@@ -1302,6 +1307,7 @@ STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Alegeți distri
STR_CONFIG_SETTING_TREE_PLACER_NONE :Niciunul
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Îmbunătăţit
+STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Alege banda pentru condus
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotaţie hartă înălţimi: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Spre stânga
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Spre dreapta
@@ -1632,6 +1638,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Localizare
STR_CONFIG_SETTING_SOUND :{ORANGE}Efecte sonore
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interfaţă
+STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}General
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Câmpuri vizuale
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Construcţie
STR_CONFIG_SETTING_ADVISORS :{ORANGE}Știri / Consilieri
@@ -1765,7 +1772,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Schimbă
STR_CHEAT_SETUP_PROD :{LTBLUE}Activează accesul la valorile de producţie: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Schemă de culori nouă
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Schemă de culori
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Afişează schemele generale de culori
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Arată schemele de culori pentru trenuri
@@ -2326,7 +2333,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Semnal d
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Semnal de cale cu sens unic (electric){}Un semnal de cale permite trecerea simultană a mai multor trenuri prin blocurile de semnale, dacă trenul poate rezerva o cale până la un punct sigur de oprire. Semnalele de cale cu sens unic permit trecerea intr-un singur sens
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversie semnal{}Când este selectat, click-ul pe un semafor existent îl va converti în tipul şi varianta selectată de semnalizare. Ctrl+Click va comuta varianta existentă. Shift+Click afişează costul estimat al conversiei
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densitatea semnalelor plasate prin tragerea cu mouse-ul
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Scade densitatea semnalelor plasate prin tragerea cu mouse-ul
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Redu distanța semnalelor plasate prin tragerea cu mouse-ul
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Creşte densitatea semnalelor plasate prin tragerea cu mouse-ul
# Bridge selection window
@@ -2646,10 +2653,15 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren în propr
STR_ABOUT_OPENTTD :{WHITE}Despre OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Toate drepturile rezervate
STR_ABOUT_VERSION :{BLACK}OpenTTD versiunea {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Echipa OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Echipa OpenTTD
# Framerate display window
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr de evenimente de joc simulate per secundă.
+STR_FRAMERATE_AVERAGE :{WHITE}Medie
+STR_FRAMERATE_DATA_POINTS :{BLACK}Date bazate pe măsurători {COMMA}
+STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
############ Leave those lines in this order!!
+STR_FRAMERATE_VIDEO :{BLACK}Ieșire video:
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
@@ -2940,6 +2952,7 @@ STR_TOWN_POPULATION :{BLACK}Populaţ
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Metropolă)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populaţia: {ORANGE}{COMMA}{BLACK} Locuinţe: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} luna trecută: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Transporturi necesare dezvoltării oraşului:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necesare
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necesare iarna
@@ -3243,18 +3256,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreaz
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producţiei: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunţat închiderea iminentă!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba productia (multiplu de 8, până la 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%)
@@ -3307,15 +3310,18 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupuri
STR_GROUP_CREATE_TOOLTIP :{BLACK}Click pentru a creea un grup
STR_GROUP_DELETE_TOOLTIP :{BLACK}Şterge grupul selectat
STR_GROUP_RENAME_TOOLTIP :{BLACK}Redenumeşte grupul selectat
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Schimbă uniforma grupului selectat
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click aici pentru a proteja acest grup de la înlocuirile automate globale
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Şterge Grup
+STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Sigur dorești ștergerea grupului și a descendenților lui?
STR_GROUP_ADD_SHARED_VEHICLE :Adaugă vehicule partajate
STR_GROUP_REMOVE_ALL_VEHICLES :Elimină toate vehiculele
STR_GROUP_RENAME_CAPTION :{BLACK}Redenumeşte un grup
+STR_GROUP_OCCUPANCY :Utilizare curentă:
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Noi vehicule feroviare
diff --git a/src/lang/russian.txt b/src/lang/russian.txt
index 7574bd8bfb..ed24128997 100644
--- a/src/lang/russian.txt
+++ b/src/lang/russian.txt
@@ -315,6 +315,8 @@ STR_COLOUR_ORANGE :Оранжев
STR_COLOUR_BROWN :Коричневый
STR_COLOUR_GREY :Серый
STR_COLOUR_WHITE :Белый
+STR_COLOUR_RANDOM :Случайный
+STR_COLOUR_DEFAULT :По умолчанию
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}мил{P я и ь}/ч
@@ -601,7 +603,7 @@ STR_ABOUT_MENU_SCREENSHOT :Снимок э
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Снимок экрана в макс. приближении
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Снимок экрана в обычном масштабе
STR_ABOUT_MENU_GIANT_SCREENSHOT :Снимок всей карты
-STR_ABOUT_MENU_SHOW_FRAMERATE :Показать кол-во кадров/с
+STR_ABOUT_MENU_SHOW_FRAMERATE :Информация о скорости игры
STR_ABOUT_MENU_ABOUT_OPENTTD :Об игре
STR_ABOUT_MENU_SPRITE_ALIGNER :Выравнивание спрайтов
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Переключить ограничивающие рамки
@@ -1074,6 +1076,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Своя...
STR_GAME_OPTIONS_CURRENCY_GEL :Грузинский лари (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Иранский риал (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Российский новый рубль (RUR)
+STR_GAME_OPTIONS_CURRENCY_MXN :Мексиканский песо (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Движение автомобилей
@@ -1410,6 +1413,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Изме
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Обслуживание инфраструктуры: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Включает затраты на содержание инфраструктуры. Стоимость непропорционально увеличивается с ростом транспортной сети, оказывая, таким образом, большее влияние на крупные компании, чем на малые.
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Фирменный цвет компании: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Выберите начальный фирменный цвет компании
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорты не устаревают: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включении все типы аэропортов доступны для строительства в любое время после их первоначального появления
@@ -1968,7 +1973,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Изме
STR_CHEAT_SETUP_PROD :{LTBLUE}Разрешить изменение производительности: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Новая цветовая схема
+STR_LIVERY_CAPTION :{WHITE}Цвета компании «{COMPANY}»
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Настройка основной цветовой схемы
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Настройка цветовой схемы поездов
@@ -2553,9 +2558,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комб
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутный светофор{}Позволяет нескольким поездам находиться в одном сигнальном блоке, если каждый из них может зарезервировать безопасный путь. Допускает следование поездов в обе стороны.
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Односторонний маршрутн. светофор{}Позволяет нескольким поездам находиться в одном сигнальном блоке, если каждый из них может зарезервировать безопасный путь. Не допускает следования поездов в обратную сторону.
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Изменение типа сигнала{}Когда кнопка нажата, щёлкните для преобразования существующего сигнала в сигнал выбранного типа и варианта, или щёлкните с нажатым Ctrl для перебора существующих вариантов. Shift+щелчок - оценка стоимости преобразования.
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Плотность расстановки сигналов при протягивании.
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Уменьшить плотность сигналов при протягивании
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличить плотность сигналов при протягивании
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Расстояние между сигналами при протягивании.
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Уменьшить расстояние между сигналами при протягивании
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличить расстояние между сигналами при протягивании
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Выберите железнодорожный мост
@@ -2879,12 +2884,19 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земля в
STR_ABOUT_OPENTTD :{WHITE}Об OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинальные авторские права {COPYRIGHT} 1995 Chris Sawyer. Все права защищены.
STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Команда разработчиков OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Команда разработчиков OpenTTD
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Скорость игры
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скорость расчёта игры: {STRING}
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду.
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Вывод на экран: {STRING}
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду.
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущая скорость игры: {DECIMAL}x
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактическая скорость игры
+STR_FRAMERATE_CURRENT :{WHITE}Сейчас
+STR_FRAMERATE_AVERAGE :{WHITE}В среднем
STR_FRAMERATE_DATA_POINTS :{BLACK}Данные по {COMMA} измерени{P ю ям ям}
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} мс
@@ -2895,11 +2907,32 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с
############ Leave those lines in this order!!
+STR_FRAMERATE_GAMELOOP :{BLACK}Расчёт игрового цикла:
+STR_FRAMERATE_GL_ECONOMY :{BLACK} Расчёт объёмов груза:
+STR_FRAMERATE_GL_TRAINS :{BLACK} Движение поездов:
+STR_FRAMERATE_GL_ROADVEHS :{BLACK} Движение автомобилей:
+STR_FRAMERATE_GL_SHIPS :{BLACK} Движение кораблей:
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Движение воздушных судов:
+STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Изменения на карте:
STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Задержка графа распределения:
+STR_FRAMERATE_DRAWING :{BLACK}Отрисовка изображения:
+STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна:
+STR_FRAMERATE_VIDEO :{BLACK}Вывод на экран:
+STR_FRAMERATE_SOUND :{BLACK}Обработка звука:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GAMELOOP :Расчёт игрового цикла
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Расчёт объёмов груза
+STR_FRAMETIME_CAPTION_GL_TRAINS :Движение поездов
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Движение автомобилей
+STR_FRAMETIME_CAPTION_GL_SHIPS :Движение кораблей
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Движение воздушных судов
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Расчёт изменений на карте
STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Задержка графа распределения
-STR_FRAMETIME_CAPTION_DRAWING :Отрисовка графики
+STR_FRAMETIME_CAPTION_DRAWING :Отрисовка изображения
+STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Отрисовка изображения в доп. окнах
+STR_FRAMETIME_CAPTION_VIDEO :Вывод на экран
+STR_FRAMETIME_CAPTION_SOUND :Обработка звука
############ End of leave-in-this-order
@@ -2925,6 +2958,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Инфо
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Нет информации.
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
+STR_SAVELOAD_FILTER_TITLE :{BLACK}Фильтр:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Перезапись файла
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Перезаписать файл?
STR_SAVELOAD_OSKTITLE :{BLACK}Введите название сохраняемой игры
@@ -3042,7 +3078,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Верс
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Совместимо с версией не ниже: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Палитра: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Стандартная (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Стандартная (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Устаревшая (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Устаревшая (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Параметры: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Нет
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Нет доступной информации
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл не найден
@@ -3123,6 +3164,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Чтение з
STR_NEWGRF_ERROR_GRM_FAILED :Запрошенные ресурсы GRF недоступны (спрайт {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} был отключён из-за {2:STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недопустимый/неизвестный формат расположения спрайтов (спрайт {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Слишком много элементов в списке значений (спрайт {3:NUM}, свойство {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Неверная обработка продукции предприятия (спрайт {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Осторожно!
@@ -3500,21 +3543,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Требует: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Требуется:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ожидает{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Изменить производительность (кратно 8, до 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Изменить производительность (в процентах, до 800%)
@@ -3567,6 +3603,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Щёлк
STR_GROUP_CREATE_TOOLTIP :{BLACK}Создать группу
STR_GROUP_DELETE_TOOLTIP :{BLACK}Удалить выбранную группу
STR_GROUP_RENAME_TOOLTIP :{BLACK}Переименовать выбранную группу
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Изменить цвет выбранной группы
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Защита транспорта в группе от глобальной автозамены
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Удаление группы
@@ -3610,6 +3647,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ёмко
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Ведущие вагоны: {GOLD}+{POWER}{BLACK} Вес: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Может перевозить: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Все типы грузов
+STR_PURCHASE_INFO_NONE :Нет
STR_PURCHASE_INFO_ALL_BUT :Всё, кроме {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. тяговое усилие: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Дальность: {GOLD}{COMMA} клет{P ка ки ок}
@@ -4019,6 +4057,7 @@ STR_ORDER_CONDITIONAL_AGE :Возраст
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Требуется обслуживание
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Всегда
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Оставшийся срок службы (лет)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Максимальная надёжность
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Условие перехода
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :равно
diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt
index 74b99a1f72..081e216b3b 100644
--- a/src/lang/serbian.txt
+++ b/src/lang/serbian.txt
@@ -2890,7 +2890,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemljište u po
STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originalni kopirajt {COPYRIGHT} 1995 Chris Sawyer, Sva prava zadržana
STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD tim
# Framerate display window
############ Leave those lines in this order!!
@@ -3496,21 +3496,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Prebacuj
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivo proizvodnje: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika je objavila da može svakog trenutka da se zatvori!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING}, {STRING.aku}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING}, {STRING.aku}{STRING}, {STRING.aku}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK} Zahteva:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čekaje {STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Promena proizvodnje
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Promena nivoa proizvodnje (u procentima, do 800%)
diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt
index 652972818d..ff5c5ec4ec 100644
--- a/src/lang/simplified_chinese.txt
+++ b/src/lang/simplified_chinese.txt
@@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司属地
STR_ABOUT_OPENTTD :{WHITE}关于 OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留一切权力。
STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 团队
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 团队
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}帧率
@@ -3310,20 +3310,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产程度: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 等待中{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}改变产量
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}修改产量 (百分比, 最高 800%)
diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt
index 0a127f4d61..f888fe61c0 100644
--- a/src/lang/slovak.txt
+++ b/src/lang/slovak.txt
@@ -2749,7 +2749,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou
STR_ABOUT_OPENTTD :{WHITE}OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pôvodný copyright: {COPYRIGHT} 1995 Chris Sawyer, všetky práva vyhradené
STR_ABOUT_VERSION :{BLACK}OpenTTD verzia {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 team OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 team OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3353,18 +3353,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentro
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Priemysel oznámil blížiace sa uzatvorenie!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmeniť produkciu (násobky 8, až do 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmeniť úroveň produkcie (percentuálne, až do 800%)
diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt
index ee1a36e19f..2e6554ce58 100644
--- a/src/lang/slovenian.txt
+++ b/src/lang/slovenian.txt
@@ -2835,7 +2835,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ozemlje v lasti
STR_ABOUT_OPENTTD :{WHITE}O OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prvotne avtorske pravice {COPYRIGHT} 1995 Chris Sawyer, vse pravice pridržane
STR_ABOUT_VERSION :{BLACK}OpenTTD različica {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 ekipa OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 ekipa OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3439,18 +3439,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Osredoto
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivo proizvodnje: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je napovedala zaprtje!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvaja: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvaja: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Spremeni proizvodnjo (večkratnik 8, do 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Spremeni nivo proizvodnje (odstotki, do 800%)
diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt
index 2679486be2..d13421cc77 100644
--- a/src/lang/spanish.txt
+++ b/src/lang/spanish.txt
@@ -931,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada..
STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraní (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo Rublo Ruso (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera
@@ -1073,7 +1074,7 @@ STR_RIVERS_FEW :Pocos
STR_RIVERS_MODERATE :Medio
STR_RIVERS_LOT :Muchos
-STR_DISASTER_NONE :Ninguna
+STR_DISASTER_NONE :Ninguno
STR_DISASTER_REDUCED :Reducidas
STR_DISASTER_NORMAL :Normales
@@ -1529,7 +1530,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cuando se activ
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje del beneficio total a pagar en transferencias: {STRING}
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de los beneficios dados a los transportes intermedios en sistemas de transferencias, dando un mayor control sobre el beneficio de cada vehículo
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Al arrastrar, colocar señales cada: {STRING}
-STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Fija la distancia de separación entre señales al construir señales hasta el próximo obstáculo al arrastrar el ratón
+STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Fija la distancia a la que se construirán las señales hasta el próximo obstáculo (señal, cruce), si estas son arrastradas
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} casilla{P 0 "" s}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Al arrastrar, mantener distancia fija entre señales: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Fija el comportamiento de la construcción de señales cuando se usa Ctrl+Arrastrar. Si se deshabilita, se colocan señales cerca de túneles y puentes para evitar largos trozos de vía sin señales. Si se activa, se colocan señales cada N casillas, haciendo que el alineamiento de vías paralelas sea más sencillo
@@ -1597,7 +1598,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x
STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x
STR_CONFIG_SETTING_TOWN_GROWTH :Velocidad crecimiento población: {STRING}
STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidad de crecimiento de los municipios
-STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ninguna
+STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ninguno
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Lenta
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rápida
@@ -1812,7 +1813,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar
STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificación de los valores de producción: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nuevo Esquema de Color
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de Color
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar esquema de colores general
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Ver esquema de color de los trenes
@@ -2373,9 +2374,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal c
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar a un bloque de señales a la vez, si el tren puede reservar una ruta hasta un lugar seguro. Pueden ser traspasadas desde atrás
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Una señal de ruta permite a más de un tren entrar a un bloque de señales a la vez, si el tren puede reservar una ruta hasta un lugar seguro. No pueden ser traspasadas desde atrás
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Convertir señal{}Cuando es seleccionado, pulsar sobre una señal existente la convierte en el tipo y variante indicados. Pulsar Ctrl+Click permite cambiar de variante. Shift+Click muestra una estimación del precio de conversión
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densidad de arrastre de señales
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir arrastre de intensidad de señales
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Incrementar arrastre de intensidad de señales
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia del arrastre de señales
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir distancia del arrastre de señales
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Incrementar distancia del arrastre de señales
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Seleccione Puente de Ferrocarril
@@ -2695,7 +2696,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied
STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright Original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados
STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 El equipo OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 El equipo OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS
@@ -2717,8 +2718,13 @@ STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ticks
STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks de barcos:
STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks de aeronaves:
STR_FRAMERATE_DRAWING :{BLACK}Renderizado gráfico:
+STR_FRAMERATE_VIDEO :{BLACK}Salida de vídeo:
+STR_FRAMERATE_SOUND :{BLACK}Mezcla de sonido:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes
+STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks de barcos
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks de aeronaves
STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico
STR_FRAMETIME_CAPTION_VIDEO :Salida de vídeo
STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido
@@ -2865,7 +2871,10 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Por Defecto (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Por Defecto (D) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguno
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hay información disponible
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado
@@ -3324,21 +3333,13 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necesita: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambiar producción (múltiplo de 8, máximo 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambiar nivel de producción (porcentaje, hasta un máximo de 800%)
@@ -3833,6 +3834,7 @@ STR_ORDER_CONDITIONAL_AGE :Edad (años)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requiere mantenimiento
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Siempre
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tiempo de vida restante (años)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilidad máxima
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar los datos del vehículo al valor dado
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :es igual a
diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt
index 6807929a4f..34493d885b 100644
--- a/src/lang/spanish_MX.txt
+++ b/src/lang/spanish_MX.txt
@@ -191,6 +191,7 @@ STR_COLOUR_BROWN :Café
STR_COLOUR_GREY :Gris
STR_COLOUR_WHITE :Blanco
STR_COLOUR_RANDOM :Aleatorio
+STR_COLOUR_DEFAULT :Predefinido
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -931,6 +932,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada..
STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraní (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo rublo ruso (RUR)
+STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera
@@ -1547,12 +1549,12 @@ STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar interfa
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar una ventana para elegir los tipos de señales a instalar. Si no se activa, se instalan las señales y se selecciona un tipo determinado mediante Ctrl+Clic, sin que aparezca ninguna interfaz
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal predeterminada a instalar: {STRING}
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal predeterminada a utilizar
-STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de bloqueo
+STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de tramo
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Señales de ruta
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Señales de ruta de un sentido
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cambiar entre tipos de señales: {STRING}
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Elegir entre qué señales se debe cambiar al usar Ctrl+Clic con la herramienta de señales
-STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de bloqueo
+STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de tramo
STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo señales de ruta
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas
@@ -1820,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar
STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir cambiar los valores de producción: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nueva cromática
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Cromática
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar cromática general
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostrar cromáticas para trenes
@@ -2330,7 +2332,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construi
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trenes (para comprar y dar mantenimiento a trenes). Mayús muestra una estimación del precio
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir punto guía sobre vías férreas. Ctrl activa la unión de puntos guías. Mayús muestra una estimación del precio
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estación de ferrocarril. Ctrl activa la ampliación de estaciones. Mayús muestra una estimación del precio
-STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Instalar señales de ferrocarril. Ctrl cambia entre señales mecánicas y eléctricas{}Al arrastrar sobre las vías se instalan señales a lo largo de un tramo recto elegido. Ctrl instala señales hasta el siguiente desvío u otra señal{}Ctrl+Clic cambia a la herramienta de selección de señales. Mayús muestra una estimación del precio
+STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Poner señales. Ctrl intercambia señales mecánicas y eléctricas{}Arrastrar sobre un tramo recto permite poner señales intercaladas. Ctrl pone señales hasta un desvío u otra señal{}Ctrl+Clic cambia al modo de selección de señales. Mayús muestra una estimación del precio
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir puente de ferrocarril. Mayús muestra una estimación del precio
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel de ferrocarril. Mayús muestra una estimación del precio
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Quitar vías férreas, señales, estaciones y puntos guías. Al mantener pulsado Ctrl se quitan también las vías al retirar estaciones o puntos guías
@@ -2368,22 +2370,22 @@ STR_STATION_CLASS_WAYP :Puntos guías
# Signal window
STR_BUILD_SIGNAL_CAPTION :{WHITE}Selección de señales
-STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Señal de bloqueo (mecánica){}Es el tipo de señal más básico que permite a un único tren ocupar al mismo tiempo un tramo de vía entre dos señales
-STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Señal de entrada (mecánica){}Abierta si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará cerrada
-STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Señal de salida (mecánica){}Igual que una señal de bloqueo pero es necesaria para activar la posición correcta de las señales de entrada y combo
-STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Señal de combo (mecánica){}La señal hace lo mismo que una señal de entrada y salida a la vez, lo que permite construir grandes "árboles" de señales condicionales
-STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Señal de ruta (mecánica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás
+STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Señal de tramo (mecánica){}Es la señal más básica. Permite a un solo tren ocupar un tramo de vía entre dos señales
+STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Señal de entrada (mecánica){}Se abre si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará cerrada
+STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Señal de salida (mecánica){}Igual que una señal de tramo pero es necesaria para activar la posición correcta de las señales de entrada y combo
+STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Señal combo (mecánica){}Hace lo mismo que las señales de entrada y de salida, lo que permite construir amplios "árboles" de señales condicionales
+STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Señal de ruta (mecánica){}Permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (mecánica){}Igual que una señal de ruta pero no puede ser pasada por detrás
-STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Señal de bloqueo (eléctrica){}Es el tipo de señal más básico que permite a un único tren ocupar al mismo tiempo un tramo de vía entre dos señales
-STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Señal de entrada (eléctrica){}Verde si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará en rojo
-STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal de salida (eléctrica){}Igual que una señal de bloqueo pero es necesaria para activar el color correcto de las señales de entrada y combo
-STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}La señal hace lo mismo que una señal de entrada y salida a la vez, lo que permite construir grandes "árboles" de señales condicionales
-STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás
+STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Señal de tramo (eléctrica){}Es la señal más básica. Permite a un solo tren ocupar un tramo de vía entre dos señales
+STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Señal de entrada (eléctrica){}En verde si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará en rojo
+STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal de salida (eléctrica){}Igual que una señal de tramo pero es necesaria para activar el color correcto de las señales de entrada y combo
+STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}Hace lo mismo que las señales de entrada y de salida, lo que permite construir amplios "árboles" de señales condicionales
+STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Igual que una señal de ruta pero no puede ser pasada por detrás
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversión de señal{}Activar para pulsar sobre una señal existente y convertirla en el tipo y variante elegidos. Ctrl+Clic permite cambiar entre variantes de señales. Mayús+Clic muestra una estimación del precio de conversión
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Cantidad de señales instaladas al arrastrar
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Más
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Menos
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia entre señales
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir distancia entre señales
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar distancia entre señales
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selección de puente de ferrocarril
@@ -2703,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied
STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados
STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018, el equipo de OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019, el equipo de OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}FPS
@@ -2778,6 +2780,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hay i
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrar palabras:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobrescribir archivo
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}¿Estás seguro de sobrescribir el archivo?
STR_SAVELOAD_OSKTITLE :{BLACK}Indicar un nombre para la partida a guardar
@@ -2895,7 +2899,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Por defecto (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Por defecto (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Tradicional (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Tradicional (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguna
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hay información disponible
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado
@@ -3355,21 +3364,14 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requiere:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambiar producción (múltiplo de 8, máximo 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambiar nivel de producción (porcentaje, máximo 800%)
@@ -3422,6 +3424,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos:
STR_GROUP_CREATE_TOOLTIP :{BLACK}Clic para crear un grupo
STR_GROUP_DELETE_TOOLTIP :{BLACK}Eliminar el grupo seleccionado
STR_GROUP_RENAME_TOOLTIP :{BLACK}Cambiar nombre del grupo seleccionado
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambiar cromática del grupo elegido
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clic para evitar que los vehículos en este grupo se reemplacen automáticamente.
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Eliminar grupo
@@ -3465,6 +3468,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagones con motor: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reforma: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Todo tipo de carga
+STR_PURCHASE_INFO_NONE :Ninguno
STR_PURCHASE_INFO_ALL_BUT :Todo excepto {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. fuerza de tracción: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} casillas
diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt
index 30bd9ea8ff..2a29a33b77 100644
--- a/src/lang/swedish.txt
+++ b/src/lang/swedish.txt
@@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :Orange
STR_COLOUR_BROWN :Brun
STR_COLOUR_GREY :Grå
STR_COLOUR_WHITE :Vit
+STR_COLOUR_RANDOM :Slumpmässig
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -241,7 +242,7 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Fönster
STR_TOOLTIP_SHADE :{BLACK}Dölj fönster - Visa bara namnlisten
STR_TOOLTIP_DEBUG :{BLACK}Visa NewGRF felsökningsinformation
STR_TOOLTIP_DEFSIZE :{BLACK}Återställ fönstret till standardstorlek. Ctrl-klicka för att sätta nuvarande storlek som ny standard
-STR_TOOLTIP_STICKY :{BLACK}Markera att fönstret ska lämnas öppet när 'Stäng alla fönster'-knappen används. Ctrl+Click för att spara som default
+STR_TOOLTIP_STICKY :{BLACK}Markera att fönstret ska lämnas öppet när 'Stäng alla fönster'-knappen används. Ctrl+klick för att spara som standardinställning
STR_TOOLTIP_RESIZE :{BLACK}Klicka och dra för att förstora fönstret
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Växla stor/liten fönsterstorlek
STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Rullningslist - rullar listan upp/ned
@@ -475,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :Skärmdump
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fullt inzoomad skärmdump
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Normalt inzoomad skärmdump
STR_ABOUT_MENU_GIANT_SCREENSHOT :Skärmdump av hela kartan
+STR_ABOUT_MENU_SHOW_FRAMERATE :Visa bildfrekvens
STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Justering av spriteobjekt
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Slå av/på yttre gränser för grafiska element
@@ -650,6 +652,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------
+STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Ingen musik tillgänglig
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}"
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Spår
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel
@@ -670,11 +673,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Växla s
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Visa fönstret för val av musikspår
# Playlist window
+STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Musikprogram - '{STRING}'
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Spårindex
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Spellista - '{STRING}'
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Töm
+STR_PLAYLIST_CHANGE_SET :{BLACK}Byt samling
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Töm aktuell spellista (enbart Personlig1 eller Personlig2)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ändra musikvalet till en annan installerad samling
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicka på ett musikstycke för att lägga till det i spellistan (enbart Personlig1 eller Personlig2)
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicka på ett musikstycke för att ta bort det från spellistan (endast Personlig1 och Personlig2)
@@ -711,8 +717,8 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Visa god
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Visa transportrutter på kartan
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Visa vegetation på kartan
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Visa markägare på kartan
-STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klicka på en typ av industri för att växla om den visas. Ctrl+Klick visar inga andra typer av industrier. Ctrl+Klick igen visar alla typer av industrier.
-STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klicka på ett företag för att växla om det företagets egendomar visas. Ctrl+Klick visar inga företag utom det valda. Ctrl+Klick igen visar alla företag.
+STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klicka på en typ av industri för att växla om den visas. Ctrl+klick visar inga andra typer av industrier. Ctrl+klick igen visar alla typer av industrier.
+STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klicka på ett företag för att växla om det företagets egendomar visas. Ctrl+klick visar inga företag utom det valda. Ctrl+klick igen visar alla företag.
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klicka på en godstyp för att växla visning av dess egenskap. Ctrl+klick stänger av alla godstyper utom den valda. Ctrl+klicka igen för att aktivera alla godstyper
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Vägar
@@ -810,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(VD)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av nya staden {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny stad, kallad {TOWN}, har grundats!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under konstruktion nära {TOWN}!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Ny {STRING} planteras nära {TOWN}!
@@ -823,7 +830,7 @@ STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLAC
STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Lågkonjunkturen över!{}{}Uppsving i handeln ger tillförsikt till industrier när ekonomin stärks!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} ökar produktionen!
-STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Nytt lager av kol funnet vid {INDUSTRY}!{}Produktionen fördubblas!
+STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Ny fyndighet av kol upptäckt vid {INDUSTRY}!{}Produktionen fördubblas!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Nya oljereserver funna vid {INDUSTRY}!{}Produktionen fördubblas!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Nya jordbruksmetoder vid {INDUSTRY} ger fördubblad produktion!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produktionen av {STRING} vid {INDUSTRY} upp med {COMMA}%!
@@ -877,10 +884,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vyfönster {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopiera till vy
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Byt vy
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiera huvudvyns position till detta vyfönster
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Klistra in vyn
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Flytta huvudvyns position till positionen i det här vyfönstret
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Byt huvudvy
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiera denna vys position till huvudvyn
# Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Spelinställningar
@@ -922,6 +929,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Sydafrikansk ra
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Egen...
STR_GAME_OPTIONS_CURRENCY_GEL :Georgisk lari (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Iransk rial (IRR)
+STR_GAME_OPTIONS_CURRENCY_RUB :Ny rysk rubel (RUB)
+STR_GAME_OPTIONS_CURRENCY_MXN :Mexikansk peso (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vägfordon
@@ -968,13 +977,13 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Var 12:e månad
############ end of autosave dropdown
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Språk
-STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Välj språk att använda
+STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Välj vilket språk som ska användas
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Helskärm
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Kryssa i den här rutan för att spela OpenTTD i helskärmsläge
STR_GAME_OPTIONS_RESOLUTION :{BLACK}Skärmupplösning
-STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Välj skärmupplösning att använda
+STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Välj vilken skärmupplösning som ska användas
STR_GAME_OPTIONS_RESOLUTION_OTHER :annan
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Gränssnittstorlek
@@ -990,11 +999,11 @@ STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} sakn
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-set
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Grundljudspaket
-STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj grundljudspaket att använda
+STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas
STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om grundljudpaketet
STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikpaket valt
-STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Välj vilket musikpaket att använda
+STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Välj vilket musikpaket som ska användas
STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} fil{P "" er} korrupt{P "" a}
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Yttligare information om musikpaketet
@@ -1044,7 +1053,7 @@ STR_VARIETY_VERY_LOW :Väldigt låg
STR_VARIETY_LOW :Låg
STR_VARIETY_MEDIUM :Medium
STR_VARIETY_HIGH :Hög
-STR_VARIETY_VERY_HIGH :Väldigt Hög
+STR_VARIETY_VERY_HIGH :Väldigt hög
STR_AI_SPEED_VERY_SLOW :Väldigt långsam
STR_AI_SPEED_SLOW :Långsam
@@ -1251,6 +1260,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det är
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Underhåll av infrastruktur: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Om det är aktiverat så kostar underhåll av infrastruktur. Kostnaden ökar mer än proportionellt mot nätverkets storlek, vilket innebär att större företag drabbas hårdare än små företag av underhållskostnader.
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Företagets startfärg: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Välj startfärg för företaget
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flygplatser blir aldrig gamla: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denna inställning gör så att alla flygplatstyper finns kvar i obegränsad tid efter att de blivit tillgängliga
@@ -1288,7 +1299,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjernas bredd
STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definiera grundläggande gameplay scenarier med olika last och krav stad tillväxt. NewGRF och Game skript tillåter finare kontroll.
-STR_CONFIG_SETTING_LAND_GENERATOR :Land generator: {STRING}
+STR_CONFIG_SETTING_LAND_GENERATOR :Landgenerator: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Den ursprungliga generatorn beror på bas grafik set, och komponerar fasta landskapsformer. TerraGenesis är en Perlin buller baserad generator med finare inställningar kontroll
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
@@ -1298,8 +1309,8 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industritäthet
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Ange hur många industrier som ska genereras och vilken nivå som ska bibehållas under spelet
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximalt avstånd mellan oljeraffinaderier och kartans kant: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Oljeraffinaderier byggs bara nära kartans kanter, alltså vid kusten om det är en ö-karta
-STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snölinjeshöjd: {STRING}
-STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontroll på vilken höjd snön börjar i subarktiska landskapet. Snö påverkar också industrin generation och stad tillväxtkrav
+STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING}
+STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrollerar på vilken höjd snön börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis endast) Välj frekvensen av kullar: Smooth landskap har färre, mer utbredda kullar. Rough landskap har många kullar, som kan se repetitiva
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Väldigt lätt
@@ -1335,6 +1346,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Terrängens fä
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grön
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mörkgrön
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violett
+STR_CONFIG_SETTING_SCROLLMODE :Vyfönsters skrollningsbeteende: {STRING}
+STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Beteende vid scrollning av kartan
+STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Rör vyn med höger musknapp, musens position låst
+STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Rör kartan med höger musknapp, musens position låst
+STR_CONFIG_SETTING_SCROLLMODE_RMB :Rör kartan med höger musknapp
+STR_CONFIG_SETTING_SCROLLMODE_LMB :Rör kartan med vänster musknapp
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Mjuk scrollning av vy: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Kontrollera hur huvudvyn skrollar till en specifik position vid klick på minikartan eller när ett kommando används för att skrolla till ett specifikt objekt på kartan. Om det är aktiverat skrollar vyn mjukt, om det är inaktiverat hoppar den direkt till målet
STR_CONFIG_SETTING_MEASURE_TOOLTIP :Visa måtthjälptext vid användning av byggverktyg: {STRING}
@@ -1396,7 +1413,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Visa ankomster
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Visa förväntade ankomst- och avgångstider i tidtabeller
STR_CONFIG_SETTING_QUICKGOTO :Snabbskapande av fordonsorder: {STRING}
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Förvälj 'åk till'-pekaren när orderfönstret öppnas
-STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard järnvägsräls (efter nytt/laddat spel): {STRING}
+STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standardspår-typ (efter nytt/laddat spel): {STRING}
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Spårtyp som ska förväljas efter att ett spel startas eller laddas. 'Först tillgängliga' väljer den äldsta spårtypen, 'Senast tillgängliga' väljer den nyaste spårtypen och 'Mest använda' väljer den spårtyp som för närvarande är mest använd
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Först tillgängliga
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Senast tillgängliga
@@ -1493,7 +1510,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Produktionsför
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Visa nyhetstidning vid förändring av industriers produktionsnivåer för industrier som används av det egna företaget
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Produktionsförändring vid industri som motståndare betjänar: {STRING}
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Visa nyhetstidning vid förändring av industriers produktionsnivåer för industrier som används av motståndare
-STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andra produktionsförändringar vid industrier.: {STRING}
+STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andra produktionsförändringar vid industrier: {STRING}
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Visa nyhetstidning vid förändring av industriers produktionsnivåer för industrier som inte används av motståndare eller det egna företaget
STR_CONFIG_SETTING_NEWS_ADVICE :Råd / information om företagets fordon: {STRING}
STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Visa meddelande ifall att ett fordon behöver uppmärksamhet
@@ -1529,7 +1546,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Välj vilket å
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Använd signal-GUI: {STRING}
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Visa ett fönster för att välja signaltyp att bygga, istället för enbart fönsterlös signaltyps-rotation genom Ctrl+klick på byggda signaler
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Standardsignal-typ: {STRING}
-STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Signaltyp att använda som standard
+STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Signaltyp som ska användas som standard
STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normal
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Avancerad
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Avancerad envägssignal
@@ -1548,7 +1565,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 rutnät
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Slumpmässig
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Städer tillåts bygga vägar: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Tillåt städer att bygga vägar för att kunna växa. Stäng av för att hindra städernas lokala myndigheter från att själva bygga vägar
-STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Städer är tillåtna att bygga plankorsningar: {STRING}
+STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Städer tillåts bygga plankorsningar: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Om denna inställning aktiveras så blir det tillåtet för städer att bygga plankorsningar
STR_CONFIG_SETTING_NOISE_LEVEL :Tillåt stadskontrollerade bullernivåer för flygplatser: {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Med denna inställning avstängd kan det finnas max två flygplatser i varje stad. Med inställningen påslagen begränsas antalet flygplatser i en stad istället av vilken bullernivå staden accepterar, vilket styrs av populationen, flygplatsens storlek och avstånd till staden
@@ -1665,7 +1682,7 @@ STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafik
STR_CONFIG_SETTING_SOUND :{ORANGE}Ljud
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Gränssnitt
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Generelt
-STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyportar
+STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyfönster
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Konstruktion
STR_CONFIG_SETTING_ADVISORS :{ORANGE} Nyheter / Rådgivare
STR_CONFIG_SETTING_COMPANY :{ORANGE}Företag
@@ -1803,7 +1820,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändra n
STR_CHEAT_SETUP_PROD :{LTBLUE}Aktivera modifiering av produktionsvärden: {ORANGE}{STRING}
# Livery window
-STR_LIVERY_CAPTION :{WHITE}Nytt färgval
+STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Färgschema
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Visa generellt färgschema
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Visa färgscheman för tåg
@@ -1812,7 +1829,7 @@ STR_LIVERY_SHIP_TOOLTIP :{BLACK}Visa fä
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Visa färgschema för flygplan
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Välj huvudfärg för det aktuella schemat. Ctrl+klick kommer att välja färgen för alla scheman
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Välj andravalsfärgen för det aktuella schemat. Ctrl+klick kommer att välja färgen för alla scheman
-STR_LIVERY_PANEL_TOOLTIP :{BLACK}Välj ett färgschema att ändra eller välj flera genom CTRL+klick. Bocka för rutan för att använda scheman
+STR_LIVERY_PANEL_TOOLTIP :{BLACK}Välj ett färgschema att ändra eller välj flera genom Ctrl+klick. Bocka för rutan för att använda scheman
STR_LIVERY_DEFAULT :Normalt färgschema
STR_LIVERY_STEAM :Ånglok
@@ -2279,6 +2296,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legend f
STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alla
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Inga
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Välj företag att visa
+STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}oanvänd
@@ -2324,8 +2342,8 @@ STR_RAIL_NAME_MONORAIL :Monorail
STR_RAIL_NAME_MAGLEV :Maglev
# Rail depot construction window
-STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Riktning för depå
-STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för depå
+STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Riktning för tågdepå
+STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för tågdepå
# Rail waypoint construction window
STR_WAYPOINT_CAPTION :{WHITE}Riktmärke
@@ -2338,7 +2356,7 @@ STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Välj ri
STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Antal spår
STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Välj antal plattformar för järnvägsstation
STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Längd på plattform
-STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Välj längden på järnvägsstation
+STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Välj längd på järnvägsstation
STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Släpp
STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en station genom att dra & släppa
@@ -2390,7 +2408,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vä
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg spårvägssektion. Ctrl växlar mellan att bygga/ta bort spårvagnssektion. Shift växlar mellan att bygga/visa beräknad kostnad
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Använd Automatvägläge för att bygga vägsektion. Ctrl växlar mellan att bygga/ta bort vägkonstruktion. Shift växlar mellan att bygga/visa beräknad kostnad
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Använd Automatspårläge för att bygga spårväg. Ctrl växlar mellan bygg/ta bort spårväg. Shift växlar mellan att bygga/visa beräknad kostnad
-STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg bussgarage (för konstruktion eller service av vägfordon). Shift växlar mellan att bygga/visa beräknad kostnad
+STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg vägfordonsdepå (för konstruktion och service av vägfordon). Shift växlar mellan att bygga/visa beräknad kostnad
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg spårvagnsdepå (för konstruktion och service av fordon). Shift växlar mellan att bygga/visa beräknad kostnad
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg busshållplats. Ctrl aktiverar sammansättning av stationer. Shift växlar mellan att bygga/visa beräknad kostnad
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg passagerarspårvagnsstation. Ctrl aktiverar sammansättning av stationer. Shift växlar mellan att bygga/visa beräknad kostnad
@@ -2405,10 +2423,10 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Växla m
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Växla mellan att bygga/riva spårväg
# Road depot construction window
-STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Riktning för bussgarage
-STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj riktning för bussgarage
-STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Spårvagnsdepåns orientering
-STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj spårvagnsdepåns orientering
+STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Riktning för vägfordonsdepå
+STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj riktning för vägfordonsdepå
+STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Riktning för spårvagnsdepå
+STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj riktning för spårvagnsdepå
# Road vehicle station construction window
STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Riktining för busshållplats
@@ -2416,9 +2434,9 @@ STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Välj ri
STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Riktning för lastbrygga
STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för lastbrygga
STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Riktning för passagerarspårvagnsstation
-STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj passagerarspårvagnsstationens orientering
+STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för passagerarspårvagnsstation
STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Riktning för godspårvagnsstation
-STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj godsspårvagnsstationens orientering
+STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för godsspårvagnsstation
# Waterways toolbar (last two for SE only)
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Farledskonstruktion
@@ -2433,8 +2451,8 @@ STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definier
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placera flod
# Ship depot construction window
-STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientering för Skeppsvarv
-STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Välj skeppsvarvets orientering
+STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Riktning för skeppsvarv
+STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för skeppsvarv
# Dock construction window
STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Hamn
@@ -2626,7 +2644,7 @@ STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Järnvägsdepå
STR_LAI_ROAD_DESCRIPTION_ROAD :Väg
STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Väg med gatubelysning
STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Väg kantad av träd
-STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Bussgarage
+STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Vägfordonsdepå
STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Väg-/Järnvägskorsning
STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Spårväg
@@ -2685,12 +2703,55 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Mark som ägs a
STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Ursprunglig upphovsrätt {COPYRIGHT} 1995 Chris Sawyer, Alla rättigheter hävdas
STR_ABOUT_VERSION :{BLACK}OpenTTD-version {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet
# Framerate display window
+STR_FRAMERATE_CAPTION :{WHITE}Bildfrekvens
+STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsfrekvens: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spel-tick som simuleras per sekund.
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildfrekvens för grafik: {STRING}
+STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal bildrutor som återges per sekund.
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Spelets nuvarande hastighetsfaktor: {DECIMAL}x
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hur snabbt spelet för närvarande körs, jämfört med förväntad hastighet vid normal simulationsfrekvens.
+STR_FRAMERATE_CURRENT :{WHITE}Nuvarande
+STR_FRAMERATE_AVERAGE :{WHITE}Genomsnittlig
+STR_FRAMERATE_DATA_POINTS :{BLACK}Data baseras på {COMMA} mätvärden
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
+STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} bildrutor/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} bildrutor/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} bildrutor/s
+STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
+STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
+STR_FRAMERATE_GAMELOOP :{BLACK}Totalt för spel-loopen:
+STR_FRAMERATE_GL_ECONOMY :{BLACK} Godshantering:
+STR_FRAMERATE_GL_TRAINS :{BLACK} Tåg-tick:
+STR_FRAMERATE_GL_ROADVEHS :{BLACK} Vägfordons-tick:
+STR_FRAMERATE_GL_SHIPS :{BLACK} Skepps-tick:
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Flygplans-tick:
+STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Världs-tick:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Länkgrafens fördröjning:
+STR_FRAMERATE_DRAWING :{BLACK}Grafikåtergivning:
+STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vyfönster:
+STR_FRAMERATE_VIDEO :{BLACK}Videoutmatning:
+STR_FRAMERATE_SOUND :{BLACK}Ljudmixning:
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GAMELOOP :Spel-loop
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Godshantering
+STR_FRAMETIME_CAPTION_GL_TRAINS :Tåg-tick
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Vägfordons-tick
+STR_FRAMETIME_CAPTION_GL_SHIPS :Skepps-tick
+STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Flygplans-tick
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Världs-tick
+STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Länkgrafens fördröjning
+STR_FRAMETIME_CAPTION_DRAWING :Grafikåtergivning
+STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Återgivning av vyer
+STR_FRAMETIME_CAPTION_VIDEO :Videoutmatning
+STR_FRAMETIME_CAPTION_SOUND :Ljudmixning
############ End of leave-in-this-order
@@ -2716,11 +2777,12 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Speldeta
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen information tillgänglig
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
+STR_SAVELOAD_FILTER_TITLE :{BLACK}Sökfilter:
STR_SAVELOAD_OSKTITLE :{BLACK}Mata in ett namn för detta sparade spel
# World generation
-STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Generera Värld
+STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Generera värld
STR_MAPGEN_MAPSIZE :{BLACK}Kartstorlek:
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Ange kartans storlek i rutor. Antalet tillgängliga rutor kommer att bli något lägre
STR_MAPGEN_BY :{BLACK}*
@@ -2731,8 +2793,8 @@ STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximal
STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Öka maximal bergshöjd med ett
STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Minska maximal bergshöjd med ett
STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snögränsens höjd:
-STR_MAPGEN_SNOW_LINE_UP :{BLACK}Höj snögränsens höjd ett upp
-STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Sänk snögränsens höjd ett ner
+STR_MAPGEN_SNOW_LINE_UP :{BLACK}Höj snögränsens höjd ett steg
+STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Sänk snögränsens höjd ett steg
STR_MAPGEN_LAND_GENERATOR :{BLACK}Landgenerator:
STR_MAPGEN_TREE_PLACER :{BLACK}Trädalgoritm:
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrängtyp:
@@ -2770,7 +2832,7 @@ STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generera
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Slumpat land
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Höjd av platt land:
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Sänk höjden av platt land ett ner
-STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Öka höjden av platt land ett upp
+STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Öka höjden av platt land ett steg
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Ändra höjd av platt land
@@ -2781,10 +2843,10 @@ STR_GENERATION_ABORT_CAPTION :{WHITE}Avbryt g
STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vill du verkligen avbryta genereringen?
STR_GENERATION_PROGRESS :{WHITE}{NUM}% färdigt
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
-STR_GENERATION_WORLD_GENERATION :{BLACK}Generera Värld
+STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld
STR_GENERATION_RIVER_GENERATION :{BLACK}Generera Flod
STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd
-STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera Objekt
+STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt
STR_GENERATION_CLEARING_TILES :{BLACK}Svår och stenig markgenerering
STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kör tile-loop
@@ -2833,7 +2895,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibel version: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palett: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Äldre (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Äldre (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramerar: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ingen
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ingen information tillgänglig
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matchande fil hittades ej
@@ -2844,7 +2911,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Ej kompati
STR_SAVE_PRESET_CAPTION :{WHITE}Spara förinställning
STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista över tillgängliga förinställningar, väljer man att kopiera den till spara namn nedan
STR_SAVE_PRESET_TITLE :{BLACK}Skriv in ett namn
-STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}För tillfället vald namn för förinställningen att spara
+STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nuvarande valt namn för förinställningen att spara
STR_SAVE_PRESET_CANCEL :{BLACK}Avbryt
STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Ändra inte det förinställda
STR_SAVE_PRESET_SAVE :{BLACK}Spara
@@ -2907,13 +2974,15 @@ STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :För många New
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Att ladda {1:STRING} som statisk NewGRF med {STRING} kan orsaka desynkronisering
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Oväntat spriteobjekt (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Action 0-egenskap {4:HEX} (spriteobjekt {3:NUM})
-STR_NEWGRF_ERROR_INVALID_ID :Försökt att använda ett ogiltligt ID (spriteobjekt {3:NUM})
+STR_NEWGRF_ERROR_INVALID_ID :Försök att använda ett ogiltligt ID (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller en skadad bild. Alla korrupta bilder kommer att visas som ett rött frågetecken (?)
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Innehåller flera Action 8 (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_READ_BOUNDS :Läste förbi slutet av pseudo-spriteobjekt (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_GRM_FAILED :Efterfrågade GRF-resurser är inte tillgängliga (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} har inaktiverats av {2:STRING}
-STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Felaktig/okänd layout-format av spriteobjekt (spriteobjekt {3:NUM})
+STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Felaktigt/okänt layout-format av spriteobjekt (spriteobjekt {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :För många poster i listan med egenskapsvärden (spriteobjekt {3:NUM}, egenskap {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ogiltig industriproduktions-callback (spriteobjekt {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varning!
@@ -2926,7 +2995,7 @@ STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan inte
STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Kompatibel GRF laddad för saknade filer
STR_NEWGRF_DISABLED_WARNING :{WHITE}Saknad GRF-fil har stängts av
STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Saknad(e) GRF-fil(er)
-STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Avpausning kan krascha OpenTTD. Skicka ej igen bugg-rapport för möjlig krasch.{}Är du säker att du vill avpausa?
+STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Avpausning kan krascha OpenTTD. Skicka ej bugg-rapporter för eventuella resulterande krascher.{}Är du säker på att du vill avpausa?
# NewGRF status
STR_NEWGRF_LIST_NONE :Inga
@@ -2943,7 +3012,7 @@ STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tåg '{V
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' ger felaktig information
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Last/återställnings information för '{1:ENGINE}' är skilld ifrån köp lista efter konstruktion. Detta kan leda till att utomatisk förnyelse/uppgradering misslyckas med att anpassa fordonen/vagnarna korrekt
-STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' skapade en ändlös loop i en produktions-callback-funktion
+STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' skapade en oändlig loop i en produktions-callback-funktion
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback-funktion {1:HEX} returnerade ett okänt/ogiltligt resultat {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
@@ -2978,6 +3047,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Mata in
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Städer
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Inga -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Stad){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Stadsnamn - klicka på ett namn för att centrera huvudvyn på staden. Ctrl+klick öppnar en ny vy över stadens läge
STR_TOWN_POPULATION :{BLACK}Global folkmängd: {COMMA}
@@ -2985,6 +3055,7 @@ STR_TOWN_POPULATION :{BLACK}Global f
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Stad)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Invånare: {ORANGE}{COMMA}{BLACK} Hus: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} förra månaden: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Fraktgods behövs för ortens tillväxt:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} krävs
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} krävs under vintern
@@ -3214,7 +3285,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(VD)
STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Etablerades: {WHITE}{NUM}
-STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Färgval:
+STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Färgschema:
STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Fordon:
STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tåg
STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} vägfordon
@@ -3231,7 +3302,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA}
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} flygplats{P "" er}
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Inga
-STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg Högkvarter
+STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg högkvarter
STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bygg företagets huvudkontor
STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Visa högkvarter
STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Vy av företagets huvudkontor
@@ -3242,7 +3313,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Visa det
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nytt ansikte
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Välj nytt ansikte på VD:n
-STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Färgval
+STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Färgschema
STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Byt färg på företaget
STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Företagsnamn
STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Byt företagets namn
@@ -3289,26 +3360,19 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kräver:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} väntar{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Ändra produktion (produkt av 8, upp till 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ändra produktionsnivå (procent, upp till 800%)
# Vehicle lists
-STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tåg
+STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} tåg
STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Vägfordon
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} skepp
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} flygplan
@@ -3329,17 +3393,17 @@ STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Se lista
STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Behandlingslista
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Skicka instruktioner till alla fordon på denna lista
STR_VEHICLE_LIST_REPLACE_VEHICLES :Byt ut fordon
-STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka till Service
+STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka på service
-STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Skicka till Depå
-STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Skicka till Depå
-STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Skicka till Depå
-STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Skicka till Hangar
+STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Skicka till depå
+STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Skicka till depå
+STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Skicka till depå
+STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Skicka till hangar
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Klicka för att stoppa alla fordon i listan
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Klicka för att starta alla fordon i listan
-STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Delade instruktioner med {COMMA} Fordon{P "" s}
+STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Delade instruktioner med {COMMA} fordon
# Group window
STR_GROUP_ALL_TRAINS :Alla tåg
@@ -3399,6 +3463,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacite
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motoriserade vagnar: {GOLD}+{POWER}{BLACK} Vikt: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Anpassningsbar till: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Alla typer av last
+STR_PURCHASE_INFO_NONE :Ingen
STR_PURCHASE_INFO_ALL_BUT :Allt utom {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Maximal Dragkraft: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Räckvidd: {GOLD}{COMMA} rutor
@@ -3410,7 +3475,7 @@ STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Skeppsli
STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Flygplanslista. Klicka på flygplan för information. Ctrl+klick visar eller döljer flygplanstypen
STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Köp fordon
-STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Köp Fordon
+STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Köp fordon
STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Köp skepp
STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Köp flygplan
@@ -3457,7 +3522,7 @@ STR_DEPOT_RENAME_DEPOT_CAPTION :Byt namn på te
STR_DEPOT_NO_ENGINE :{BLACK}-
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
-STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} fordon{P "" s}{STRING}
+STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} fordon{STRING}
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Tåg - drag vagn/lok för att lägga till/ta bort från tåg. Högerklicka på tåg för information. Håll Ctrl nedtryckt för att respektive funktion även ska gälla resten av tåget
@@ -3483,7 +3548,7 @@ STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Byt ut a
STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Byt ut alla flygplan i hangaren
STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nytt fordon
-STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nytt Fordon
+STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nytt fordon
STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nytt skepp
STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nytt flygplan
@@ -3503,7 +3568,7 @@ STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Köper e
STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Köper en kopia av ett flygplan. Tryck på den här knappen och sedan på ett flygplan i eller utanför hangaren. Ctrl+klick gör så att de delar order. Shift+klick visar kostnad utan att köpa
STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför depån. Ctrl+klick öppnar en ny vy över depåns läge
-STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför bussgaraget. Ctrl+klick öppnar en ny vy över bussgaragets läge
+STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför vägfordonsdepån. Ctrl+klick öppnar en ny vy över vägfordonsdepåns läge
STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför skeppdepån. Ctrl+klick öppnar en ny vy över skeppdepåns läge
STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför hangaren. Ctrl+klick öppnar en ny vy över hangarens läge
@@ -3520,7 +3585,7 @@ STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Klicka f
STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Klicka för att starta alla tåg i depån
STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klicka för att starta alla fordon i depån
STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Klicka för att starta alla skepp i depån
-STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klicka för att starta alla skepp i depån
+STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klicka för att starta alla flygplan i hangaren
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Du är på väg att sälja alla fordon i depån. Är du säker?
@@ -3591,9 +3656,9 @@ STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrera
STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför flygplanet. Ctrl+klick följer flygplanet i huvudvyn
STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka tåg till depå. Ctrl+klick skickar tåget enbart på service
-STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka fordon till depå. CTRL + klick servar endast
-STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka skepp till depå. CTRL + klick servar endast
-STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka flygplan till hangar. CTRL + klick servar endast
+STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka fordon till depå. Ctrl+klick servar endast
+STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka skepp till depå. Ctrl+klick servar endast
+STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka flygplan till hangar. Ctrl+klick servar endast
STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Köper en kopia av tåget inklusive alla vagnar. Ctrl+klick gör så att de delar order. Shift+klick visar kostnad utan att köpa
STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Köper en kopia av fordonet. Ctrl+klick gör så att de delar order. Shift+klick visar kostnad utan att köpa
@@ -3712,7 +3777,7 @@ STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Informat
STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Visa detaljer för tågfordon
STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapaciteter
STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Visa kapaciteter för varje fordon
-STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Gods Totalt
+STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Gods totalt
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Visa tågets totala kapacitet, separera för typ av gods
STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kapacitet: {LTBLUE}
@@ -3776,7 +3841,7 @@ STR_ORDER_DROP_NO_UNLOADING :Ej avlastning
STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Ändra avlastningsbeteende för markerad order
STR_ORDER_REFIT :{BLACK}Anpassa
-STR_ORDER_REFIT_TOOLTIP :{BLACK}Välj vilken godstyp anpassningen ska göras i denna order. Ctrl-klick för att ta bort anpassningsordern
+STR_ORDER_REFIT_TOOLTIP :{BLACK}Välj vilken godstyp anpassningen ska göras till i denna order. Ctrl-klick för att ta bort anpassningsordern
STR_ORDER_REFIT_AUTO :{BLACK}Auto-anpassning vid station
STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Välj vilket lasttyp att auto-anpassa till i den här ordningen. Ctrl+klicka för att ta bort anpassningsinstruktionen. Auto-anpassning vid stationer kommer enbart att utföras om fordonet tillåter det
STR_ORDER_DROP_REFIT_AUTO :Fast lasttyp
@@ -3788,7 +3853,7 @@ STR_ORDER_DROP_SERVICE_DEPOT :Service vid beh
STR_ORDER_DROP_HALT_DEPOT :Stanna
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Skippa den här ordern om service ej behövs
-STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Fordonsdata att basera hoppning på
+STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Fordonsdata att basera hopp på
# Conditional order variables, must follow order of OrderConditionVariable enum
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Laddningsprocent
@@ -3798,6 +3863,7 @@ STR_ORDER_CONDITIONAL_AGE :Ålder (år)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Behöver service
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Alltid
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Återstående livstid (år)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximal tillförlitlighet
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hur man jämför fordonsdata med givet värde
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :samma som
@@ -3821,7 +3887,7 @@ STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Ta bort
STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Sluta dela
STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Sluta dela orderlistan. Ctrl+Klick tar även bort alla order för det här fordonet
-STR_ORDERS_GO_TO_BUTTON :{BLACK}Åk Till
+STR_ORDERS_GO_TO_BUTTON :{BLACK}Åk till
STR_ORDER_GO_TO_NEAREST_DEPOT :Åk till närmsta depå
STR_ORDER_GO_TO_NEAREST_HANGAR :Åk till närmsta hangar
STR_ORDER_CONDITIONAL :Villkorat order-hopp
@@ -3890,9 +3956,9 @@ STR_ORDER_STOP_LOCATION_FAR_END :[slutet]
STR_ORDER_OUT_OF_RANGE :{RED} (Nästa destination är utanför räckvidden)
-STR_ORDER_CONDITIONAL_UNCONDITIONAL :Skippa till order {COMMA}
-STR_ORDER_CONDITIONAL_NUM :Skippa till order {COMMA} när {STRING} {STRING} {COMMA}
-STR_ORDER_CONDITIONAL_TRUE_FALSE :Skippa till order {COMMA} när {STRING} {STRING}
+STR_ORDER_CONDITIONAL_UNCONDITIONAL :Hoppa till order {COMMA}
+STR_ORDER_CONDITIONAL_NUM :Hoppa till order {COMMA} när {STRING} {STRING} {COMMA}
+STR_ORDER_CONDITIONAL_TRUE_FALSE :Hoppa till order {COMMA} när {STRING} {STRING}
STR_INVALID_ORDER :{RED} (Ogiltig order)
@@ -3916,7 +3982,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(resor för {ST
STR_TIMETABLE_STAY_FOR :och stanna i {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :och res i {STRING}
STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" ar}
-STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s}
+STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick
STR_TIMETABLE_TOTAL_TIME :{BLACK}Den här tidtabellen kommer ta {STRING} att slutföra
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Denna tidtabell kommer att ta åtminstonde {STRING} att slutföra (allt är inte inlagt i en tidtabell)
@@ -3930,7 +3996,7 @@ STR_TIMETABLE_STATUS_START_AT :{BLACK}Den här
STR_TIMETABLE_STARTING_DATE :{BLACK}Startdatum
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Välj ett datum som startpunkt för den här tidtabellen. Om tidtabellen är fullt tidssatt så innebär Ctrl+klick att startpunkten sätts för denna tidtabell och att startpunkten för övriga fordon som delar dessa order fördelas ut jämt baserat på deras relativa ordning
-STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändra Tid
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändra tid
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ändra hur lång tid den markerade ordern bör ta
STR_TIMETABLE_CLEAR_TIME :{BLACK}Rensa tid
@@ -3986,7 +4052,7 @@ STR_AI_GAME_SCRIPT :{BLACK}Spelskri
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Visa debug-utskrifter för spelskript
STR_ERROR_AI_NO_AI_FOUND :Ingen passande datorspelare hittades.{}Denna datorspelare är en test-datorspelare och kommer inte göra någonting.{}Du kan ladda ner nya datorspelare genom spelets 'Online-innehåll'-system
-STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Ett av scripten som körs har krachat. Vänligen raportera detta till datorspelarens skapare med en skärmdump på förstret 'Felsökning av datorspelare / spelskript'
+STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Ett av skripten som körs har kraschat. Vänligen rapportera detta till datorspelarens skapare med en skärmdump av förstret 'Felsökning av datorspelare / spelskript'
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Felsökning av datorspelare / spelskript är bara tillgänglig för servern
# AI configuration window
@@ -4230,6 +4296,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... dett
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... vägen pekar i fel riktning
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... genomfartshållplatser kan inte ha gatuhörn
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... genomfartshållplatser kan inte ha korsningar
+STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... vägen är enkelriktad eller blockerad
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan ej ta bort del av station...
@@ -4264,7 +4331,7 @@ STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boje
# Depot related errors
STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan inte bygga depå här...
-STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan inte bygga bussgarage här...
+STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan inte bygga vägfordonsdepå här...
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan inte bygga spårvagnsdepå här...
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Kan inte bygga skeppsdepå här...
@@ -4474,13 +4541,15 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan inte
STR_DESKTOP_SHORTCUT_COMMENT :Ett simuleringsspel baserat på Transport Tycoon Deluxe
# Translatable descriptions in media/baseset/*.ob* files
-STR_BASEGRAPHICS_DOS_DESCRIPTION :Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan.
-STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska).
-STR_BASEGRAPHICS_WIN_DESCRIPTION :Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan.
-STR_BASESOUNDS_DOS_DESCRIPTION :Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan.
-STR_BASESOUNDS_WIN_DESCRIPTION :Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan.
+STR_BASEGRAPHICS_DOS_DESCRIPTION :Originalgrafiken från DOS-utgåvan av Transport Tycoon Deluxe.
+STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originalgrafiken från den tyska DOS-utgåvan av Transport Tycoon Deluxe.
+STR_BASEGRAPHICS_WIN_DESCRIPTION :Originalgrafiken från Windows-utgåvan av Transport Tycoon Deluxe.
+STR_BASESOUNDS_DOS_DESCRIPTION :Originalljuden från DOS-utgåvan av Transport Tycoon Deluxe.
+STR_BASESOUNDS_WIN_DESCRIPTION :Originalljuden från Windows-utgåvan av Transport Tycoon Deluxe.
STR_BASESOUNDS_NONE_DESCRIPTION :Ett ljudpaket utan några ljud.
-STR_BASEMUSIC_WIN_DESCRIPTION :Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan.
+STR_BASEMUSIC_WIN_DESCRIPTION :Originalmusiken från Windows-utgåvan av Transport Tycoon Deluxe.
+STR_BASEMUSIC_DOS_DESCRIPTION :Originalmusiken från DOS-utgåvan av Transport Tycoon Deluxe.
+STR_BASEMUSIC_TTO_DESCRIPTION :Originalmusiken från DOS-utgåvan av Transport Tycoon (Original/World Editor).
STR_BASEMUSIC_NONE_DESCRIPTION :Ett musikpaket utan någon musik.
##id 0x2000
@@ -4498,11 +4567,11 @@ STR_TOWN_BUILDING_NAME_PARK_1 :Park
STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2 :Kontorslokaler
STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1 :Affärer och kontor
STR_TOWN_BUILDING_NAME_MODERN_OFFICE_BUILDING_1 :Modern kontorsbyggnad
-STR_TOWN_BUILDING_NAME_WAREHOUSE_1 :Varuhus
+STR_TOWN_BUILDING_NAME_WAREHOUSE_1 :Lagerbyggnad
STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_3 :Kontorsbyggnad
STR_TOWN_BUILDING_NAME_STADIUM_1 :Arena
STR_TOWN_BUILDING_NAME_OLD_HOUSES_1 :Gamla hus
-STR_TOWN_BUILDING_NAME_COTTAGES_1 :Stuga
+STR_TOWN_BUILDING_NAME_COTTAGES_1 :Stugor
STR_TOWN_BUILDING_NAME_HOUSES_1 :Hus
STR_TOWN_BUILDING_NAME_FLATS_1 :Lägenheter
STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_2 :Hög kontorsbyggnad
@@ -4516,7 +4585,7 @@ STR_TOWN_BUILDING_NAME_CINEMA_1 :Biograf
STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Shoppingcenter
STR_TOWN_BUILDING_NAME_IGLOO_1 :Igloo
STR_TOWN_BUILDING_NAME_TEPEES_1 :Kåtor
-STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Tekanne-Hus
+STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Tekanne-hus
STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Spargris
##id 0x4800
@@ -4574,29 +4643,29 @@ STR_SV_STNAME_NORTH :Norra {STRING}
STR_SV_STNAME_SOUTH :Södra {STRING}
STR_SV_STNAME_EAST :Östra {STRING}
STR_SV_STNAME_WEST :Västra {STRING}
-STR_SV_STNAME_CENTRAL :{STRING} Centralstation
-STR_SV_STNAME_TRANSFER :{STRING} Övergång
+STR_SV_STNAME_CENTRAL :{STRING} centralstation
+STR_SV_STNAME_TRANSFER :{STRING} övergång
STR_SV_STNAME_HALT :{STRING} hållplats
-STR_SV_STNAME_VALLEY :{STRING} Dal
+STR_SV_STNAME_VALLEY :{STRING} dal
STR_SV_STNAME_HEIGHTS :{STRING} Höjder
-STR_SV_STNAME_WOODS :{STRING} Skog
-STR_SV_STNAME_LAKESIDE :{STRING} Sjöstrand
+STR_SV_STNAME_WOODS :{STRING} skog
+STR_SV_STNAME_LAKESIDE :{STRING} sjöstrand
STR_SV_STNAME_EXCHANGE :{STRING} Växel
-STR_SV_STNAME_AIRPORT :{STRING} Flygplats
-STR_SV_STNAME_OILFIELD :{STRING} Oljefält
-STR_SV_STNAME_MINES :{STRING} Gruva
-STR_SV_STNAME_DOCKS :{STRING} Kaj
+STR_SV_STNAME_AIRPORT :{STRING} flygplats
+STR_SV_STNAME_OILFIELD :{STRING} oljefält
+STR_SV_STNAME_MINES :{STRING} gruva
+STR_SV_STNAME_DOCKS :{STRING} hamn
STR_SV_STNAME_BUOY :{STRING}
STR_SV_STNAME_WAYPOINT :{STRING}
##id 0x6020
-STR_SV_STNAME_ANNEXE :{STRING} Tillbyggnad
-STR_SV_STNAME_SIDINGS :{STRING} Förort
-STR_SV_STNAME_BRANCH :{STRING} Förgrening
+STR_SV_STNAME_ANNEXE :{STRING} tillbyggnad
+STR_SV_STNAME_SIDINGS :{STRING} förort
+STR_SV_STNAME_BRANCH :{STRING} förgrening
STR_SV_STNAME_UPPER :Övre {STRING}
STR_SV_STNAME_LOWER :Nedre {STRING}
-STR_SV_STNAME_HELIPORT :{STRING} Helikopterplats
-STR_SV_STNAME_FOREST :{STRING} Skog
-STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM}
+STR_SV_STNAME_HELIPORT :{STRING} helikopterplats
+STR_SV_STNAME_FOREST :{STRING} skog
+STR_SV_STNAME_FALLBACK :{STRING} station #{NUM}
############ end of savegame specific region!
##id 0x8000
@@ -4875,8 +4944,8 @@ STR_FORMAT_WAYPOINT_NAME_SERIAL :Riktmärke {TOW
STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Järnvägsdepå
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Järnvägsterminal #{COMMA}
-STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Vägfordonsdepå
-STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Vägfordons terminal #{COMMA}
+STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} vägfordonsdepå
+STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} vägfordonsdepå #{COMMA}
STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Hamnterminal
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Hamnterminal#{COMMA}
STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangar
diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt
index a42fa3440a..24349a53e5 100644
--- a/src/lang/tamil.txt
+++ b/src/lang/tamil.txt
@@ -2375,7 +2375,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :நிறுவ
STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ஐ பற்றி
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}அசல் உரிமைகள் {COPYRIGHT} 1995 கிறிஸ் சாயர், எல்லா உரிமைகளும் பதிவுசெய்யப்பட்டது
STR_ABOUT_VERSION :{BLACK}OpenTTD பதிப்பு {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD குழுமம்
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD குழுமம்
# Framerate display window
############ Leave those lines in this order!!
@@ -2908,18 +2908,8 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}தயாரிப்பு அளவு: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}தொழிற்சாலை உடனடியாக மூடப்படும் என்று அறிவிக்கப்பட்டுள்ளது!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}தயாரிப்பு: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}தயாரிக்கிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}தயாரிப்பினை மாற்றவும் (8 இன் பெருக்கங்கள், 2040 வரை)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}தயாரிப்பு அளவினை மாற்றவும் (சதவிகிதம், 800% வரை)
diff --git a/src/lang/thai.txt b/src/lang/thai.txt
index c3584238f5..88a78054d6 100644
--- a/src/lang/thai.txt
+++ b/src/lang/thai.txt
@@ -2629,7 +2629,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :บริษั
STR_ABOUT_OPENTTD :{WHITE}เกี่ยวกับ OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}ลิขสิทธิ์เดิม {COPYRIGHT} ค.ศ.1995 ของ Chris Sawyer, สงวนลิขสิทธิ์
STR_ABOUT_VERSION :{BLACK}OpenTTD รุ่นที่ {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2018 ของ The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2019 ของ The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3217,18 +3217,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}กด
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}ระดับการผลิต: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}อุตสาหกรรมนี้ได้มีการประกาศปิดตัวลงอย่างเป็นทางการ!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}ผลผลิต: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}ผลผลิต: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}ปรับเปลี่ยนปริมาณผลผลิต (ระหว่าง 8 ถึง 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}เปลี่ยนระดับการผลิต (เปอร์เซ็นต์เพิ่มมากสุดถึง 800%)
diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt
index 621572e561..135fed42b0 100644
--- a/src/lang/traditional_chinese.txt
+++ b/src/lang/traditional_chinese.txt
@@ -2681,7 +2681,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司所有土
STR_ABOUT_OPENTTD :{WHITE}關於 OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原著作權為 {COPYRIGHT} 1995 Chris Sawyer,保留所有權利
STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 開發小組
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 開發小組
# Framerate display window
############ Leave those lines in this order!!
@@ -3285,18 +3285,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING},{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING},{STRING}{STRING},{STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}產出:{YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}產出:{YELLOW}{STRING}{STRING},{STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}修改產量 (以 8 為倍數增減,最大為 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}變更產出等級 (百分比,最高可到800%)
diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt
index a92a09f38a..f143a3deb9 100644
--- a/src/lang/turkish.txt
+++ b/src/lang/turkish.txt
@@ -2686,7 +2686,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Satın alınmı
STR_ABOUT_OPENTTD :{WHITE}OpenTTD Hakkında
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Telif hakkı {COPYRIGHT} 1995 Chris Sawyer, Her hakkı saklıdır
STR_ABOUT_VERSION :{BLACK}OpenTTD sürüm {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD ekibi
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD ekibi
# Framerate display window
############ Leave those lines in this order!!
@@ -3290,21 +3290,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Görünt
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Üretim seviyesi: %{YELLOW}{COMMA}
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika çok yakında kapanacağını duyurdu!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}İstenen: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}İstenenler: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}İstenenler: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} bekliyor{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Üretimi değiştir (8'in katı, 2040'a kadar)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Üretim seviyesini değiştir (yüzde olarak, %800'e kadar)
diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt
index 22f5d8f677..bb2e6afcb6 100644
--- a/src/lang/ukrainian.txt
+++ b/src/lang/ukrainian.txt
@@ -2812,7 +2812,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ця ділян
STR_ABOUT_OPENTTD :{WHITE}Про OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторське право {COPYRIGHT} 1995 Кріс Сойєр, Всі права захищені
STR_ABOUT_VERSION :{BLACK}OpenTTD версія {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 команда OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 команда OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3416,18 +3416,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z}, {STRING.z}{STRING.z}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z}, {STRING.z}{STRING.z}, {STRING.z}{STRING.z}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Продукція: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Продукція: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Змінити виробництво (кратне 8, до 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Змінити обсяг виробництва (до 800%)
diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt
index d8661586bc..5598dd1da0 100644
--- a/src/lang/unfinished/chuvash.txt
+++ b/src/lang/unfinished/chuvash.txt
@@ -1116,13 +1116,8 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу
# Industry view
-############ range for requires starts
-############ range for requires ends
-############ range for produces starts
-############ range for produces ends
-
# Vehicle lists
diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt
index 2b3b80966e..5649ca310f 100644
--- a/src/lang/unfinished/frisian.txt
+++ b/src/lang/unfinished/frisian.txt
@@ -2469,7 +2469,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Lân fan bedriu
STR_ABOUT_OPENTTD :{WHITE}Oer OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Orizjineel copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD-ferzje {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 It OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 It OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -3036,18 +3036,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sintrear
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksje nivo: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Yndustry kundicht drigend sluten oan!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produseart: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produseart: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Feroaring produksje nivo (percentage, up to 800%)
# Vehicle lists
diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt
index 41317c107c..4f353acaaf 100644
--- a/src/lang/unfinished/ido.txt
+++ b/src/lang/unfinished/ido.txt
@@ -776,7 +776,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Stabeyo di komp
# About OpenTTD window
STR_ABOUT_VERSION :{BLACK}OpenTTD versiono {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 La kruo OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 La kruo OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -925,13 +925,8 @@ STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehili:
# Industry view
-############ range for requires starts
-############ range for requires ends
-############ range for produces starts
-############ range for produces ends
-
# Vehicle lists
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tren{P o i}
diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt
index 7e19065f8b..af62c00a81 100644
--- a/src/lang/unfinished/macedonian.txt
+++ b/src/lang/unfinished/macedonian.txt
@@ -1200,7 +1200,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Компани
STR_ABOUT_OPENTTD :{WHITE}За OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинален copyright {COPYRIGHT} 1995 Chris Sawyer, Сите права се задржани
STR_ABOUT_VERSION :{BLACK}OpenTTD верзија {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD тимот
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD тимот
# Framerate display window
############ Leave those lines in this order!!
@@ -1414,13 +1414,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC
# Industry view
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производство ниво: {YELLOW}{COMMA}%
-############ range for requires starts
-############ range for requires ends
-############ range for produces starts
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Промена на производство на ниво (процент, до 800%)
# Vehicle lists
diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt
index b0f3aecdda..ac07641452 100644
--- a/src/lang/unfinished/maltese.txt
+++ b/src/lang/unfinished/maltese.txt
@@ -822,13 +822,8 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN
# Industry view
-############ range for requires starts
-############ range for requires ends
-############ range for produces starts
-############ range for produces ends
-
# Vehicle lists
diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt
index f5ff89ac9e..b6a39a168d 100644
--- a/src/lang/unfinished/marathi.txt
+++ b/src/lang/unfinished/marathi.txt
@@ -1278,18 +1278,8 @@ STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUST
# Industry view
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}बनव्त: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}बनव्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
# Vehicle lists
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} विमान
diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt
index 618375a246..eb14ae8035 100644
--- a/src/lang/unfinished/persian.txt
+++ b/src/lang/unfinished/persian.txt
@@ -2385,7 +2385,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :زمین خری
STR_ABOUT_OPENTTD :{WHITE}OpenTTD در باره ی
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD ویرایش {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team
# Framerate display window
############ Leave those lines in this order!!
@@ -2903,18 +2903,8 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}مرکز تصویر را روی کارخانه قرار بده.Ctrl+Click کنید تا پنجره نمایی از کارخانه نمایش داده شود
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}این کارخانه اعلام کرده است که به زودی بسته خواهد شد!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}محصولات: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}محصولات: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
# Vehicle lists
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} قطار
diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt
index fd42e84d90..0cc3ba7b68 100644
--- a/src/lang/unfinished/urdu.txt
+++ b/src/lang/unfinished/urdu.txt
@@ -2323,13 +2323,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC
# Industry view
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}گزشتہ ماہ کی پیداوار:
-############ range for requires starts
-############ range for requires ends
-############ range for produces starts
-############ range for produces ends
-
# Vehicle lists
diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt
index 92ae0f40bb..2dde004aab 100644
--- a/src/lang/vietnamese.txt
+++ b/src/lang/vietnamese.txt
@@ -2699,7 +2699,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Đất công ty
STR_ABOUT_OPENTTD :{WHITE}Về OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Nguyên tác bản quyền {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_ABOUT_VERSION :{BLACK}OpenTTD phiên bản {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Nhóm OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Nhóm OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Tốc độ khung hình
@@ -3348,21 +3348,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Cần cung cấp:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} đang chờ{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Thay đổi sản lượng (bội số của 8, max 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Thay đổi mức sản lượng (theo phần trăm, cao nhất 800%)
diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt
index 14277fdd7a..2ed53b3152 100644
--- a/src/lang/welsh.txt
+++ b/src/lang/welsh.txt
@@ -2685,7 +2685,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tir cwmni
STR_ABOUT_OPENTTD :{WHITE}Gwybodaeth am OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hawlfraint Wreiddiol {COPYRIGHT} 1995 Chris Sawyer, Holl cedwir pob hawl
STR_ABOUT_VERSION :{BLACK}fersiwn OpenTTD {REV}
-STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Y tîm OpenTTD
+STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Y tîm OpenTTD
# Framerate display window
############ Leave those lines in this order!!
@@ -3289,21 +3289,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau!
-############ range for requires starts
-STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
-############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Angen:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} yn disgwyl{STRING}
-############ range for produces starts
-STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING}
-STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
-############ range for produces ends
-
STR_CONFIG_GAME_PRODUCTION :{WHITE}Newid cynnyrch (lluosrif o 8, hyd at 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Newid y lefel cynhyrchu (canran, hyd at 800%)
diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp
index 30c4451ee7..7923fc26c8 100644
--- a/src/linkgraph/linkgraph_gui.cpp
+++ b/src/linkgraph/linkgraph_gui.cpp
@@ -125,12 +125,67 @@ inline bool LinkGraphOverlay::IsPointVisible(Point pt, const DrawPixelInfo *dpi,
*/
inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixelInfo *dpi, int padding) const
{
- return !((pta.x < dpi->left - padding && ptb.x < dpi->left - padding) ||
- (pta.y < dpi->top - padding && ptb.y < dpi->top - padding) ||
- (pta.x > dpi->left + dpi->width + padding &&
- ptb.x > dpi->left + dpi->width + padding) ||
- (pta.y > dpi->top + dpi->height + padding &&
- ptb.y > dpi->top + dpi->height + padding));
+ const int left = dpi->left - padding;
+ const int right = dpi->left + dpi->width + padding;
+ const int top = dpi->top - padding;
+ const int bottom = dpi->top + dpi->height + padding;
+
+ /*
+ * This method is an implementation of the Cohen-Sutherland line-clipping algorithm.
+ * See: https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm
+ */
+
+ const uint8 INSIDE = 0; // 0000
+ const uint8 LEFT = 1; // 0001
+ const uint8 RIGHT = 2; // 0010
+ const uint8 BOTTOM = 4; // 0100
+ const uint8 TOP = 8; // 1000
+
+ int x0 = pta.x;
+ int y0 = pta.y;
+ int x1 = ptb.x;
+ int y1 = ptb.y;
+
+ auto out_code = [&](int x, int y) -> uint8 {
+ uint8 out = INSIDE;
+ if (x < left) {
+ out |= LEFT;
+ } else if (x > right) {
+ out |= RIGHT;
+ }
+ if (y < top) {
+ out |= TOP;
+ } else if (y > bottom) {
+ out |= BOTTOM;
+ }
+ return out;
+ };
+
+ uint8 c0 = out_code(x0, y0);
+ uint8 c1 = out_code(x1, y1);
+
+ while (true) {
+ if (c0 == 0 || c1 == 0) return true;
+ if ((c0 & c1) != 0) return false;
+
+ if (c0 & TOP) { // point 0 is above the clip window
+ x0 = x0 + (int)(((int64) (x1 - x0)) * ((int64) (top - y0)) / ((int64) (y1 - y0)));
+ y0 = top;
+ } else if (c0 & BOTTOM) { // point 0 is below the clip window
+ x0 = x0 + (int)(((int64) (x1 - x0)) * ((int64) (bottom - y0)) / ((int64) (y1 - y0)));
+ y0 = bottom;
+ } else if (c0 & RIGHT) { // point 0 is to the right of clip window
+ y0 = y0 + (int)(((int64) (y1 - y0)) * ((int64) (right - x0)) / ((int64) (x1 - x0)));
+ x0 = right;
+ } else if (c0 & LEFT) { // point 0 is to the left of clip window
+ y0 = y0 + (int)(((int64) (y1 - y0)) * ((int64) (left - x0)) / ((int64) (x1 - x0)));
+ x0 = left;
+ }
+
+ c0 = out_code(x0, y0);
+ }
+
+ NOT_REACHED();
}
/**
diff --git a/src/livery.h b/src/livery.h
index 5845ffabb4..d6ed5bfdc7 100644
--- a/src/livery.h
+++ b/src/livery.h
@@ -69,12 +69,16 @@ enum LiveryClass {
LC_ROAD,
LC_SHIP,
LC_AIRCRAFT,
+ LC_GROUP_RAIL,
+ LC_GROUP_ROAD,
+ LC_GROUP_SHIP,
+ LC_GROUP_AIRCRAFT,
LC_END
};
/** Information about a particular livery. */
struct Livery {
- bool in_use; ///< Set if this livery should be used instead of the default livery.
+ byte in_use; ///< Bit 0 set if this livery should override the default livery first colour, Bit 1 for the second colour.
byte colour1; ///< First colour, for all vehicles.
byte colour2; ///< Second colour, for vehicles with 2CC support.
};
diff --git a/src/network/core/config.h b/src/network/core/config.h
index f5e73dd12d..f6823b1a93 100644
--- a/src/network/core/config.h
+++ b/src/network/core/config.h
@@ -43,7 +43,7 @@ static const uint NETWORK_NAME_LENGTH = 80; ///< The maxim
static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0'
static const uint NETWORK_HOSTNAME_LENGTH = 80; ///< The maximum length of the host name, in bytes including '\0'
static const uint NETWORK_SERVER_ID_LENGTH = 33; ///< The maximum length of the network id of the servers, in bytes including '\0'
-static const uint NETWORK_REVISION_LENGTH = 15; ///< The maximum length of the revision, in bytes including '\0'
+static const uint NETWORK_REVISION_LENGTH = 33; ///< The maximum length of the revision, in bytes including '\0'
static const uint NETWORK_PASSWORD_LENGTH = 33; ///< The maximum length of the password, in bytes including '\0' (must be >= NETWORK_SERVER_ID_LENGTH)
static const uint NETWORK_CLIENTS_LENGTH = 200; ///< The maximum length for the list of clients that controls a company, in bytes including '\0'
static const uint NETWORK_CLIENT_NAME_LENGTH = 25; ///< The maximum length of a client's name, in bytes including '\0'
diff --git a/src/network/core/game.h b/src/network/core/game.h
index c82c5aefed..a9da29118e 100644
--- a/src/network/core/game.h
+++ b/src/network/core/game.h
@@ -56,6 +56,8 @@ struct NetworkGameInfo : NetworkServerGameInfo {
byte map_set; ///< Graphical set
};
+const char * GetNetworkRevisionString();
+
#endif /* ENABLE_NETWORK */
#endif /* NETWORK_CORE_GAME_H */
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index c320cd9102..32c6cffff2 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -38,93 +38,7 @@ typedef unsigned long in_addr_t;
typedef SSIZE_T ssize_t;
typedef int socklen_t;
# define IPPROTO_IPV6 41
-#else
-#include "../../os/windows/win32.h"
-#include "../../core/alloc_func.hpp"
-
-#define AI_ADDRCONFIG 0x00000400 /* Resolution only if global address configured */
-#define IPV6_V6ONLY 27
-
-static inline int OTTDgetnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, DWORD hostlen, char *serv, DWORD servlen, int flags)
-{
- static int (WINAPI *getnameinfo)(const struct sockaddr *, socklen_t, char *, DWORD, char *, DWORD, int) = NULL;
- static bool first_time = true;
-
- if (first_time) {
- LoadLibraryList((Function*)&getnameinfo, "ws2_32.dll\0getnameinfo\0\0");
- first_time = false;
- }
-
- if (getnameinfo != NULL) return getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);
-
- strncpy(host, inet_ntoa(((const struct sockaddr_in *)sa)->sin_addr), hostlen);
- return 0;
-}
-#define getnameinfo OTTDgetnameinfo
-
-static inline int OTTDgetaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res)
-{
- static int (WINAPI *getaddrinfo)(const char *, const char *, const struct addrinfo *, struct addrinfo **) = NULL;
- static bool first_time = true;
-
- if (first_time) {
- LoadLibraryList((Function*)&getaddrinfo, "ws2_32.dll\0getaddrinfo\0\0");
- first_time = false;
- }
-
- if (getaddrinfo != NULL) return getaddrinfo(nodename, servname, hints, res);
-
- *res = NULL;
-
- in_addr_t ip = inet_addr(nodename);
- if (ip == INADDR_NONE) {
- struct hostent *he = gethostbyname(nodename);
- if (he == NULL) return EAI_NONAME;
- ip = (*(struct in_addr *)he->h_addr).s_addr;
- }
-
- struct sockaddr_in *sin = CallocT(1);
- sin->sin_family = AF_INET;
- sin->sin_port = htons(strtoul(servname, NULL, 10));
- sin->sin_addr.s_addr = ip;
-
- struct addrinfo *ai = CallocT(1);
- ai->ai_family = PF_INET;
- ai->ai_addr = (struct sockaddr*)sin;
- ai->ai_addrlen = sizeof(*sin);
- ai->ai_socktype = hints->ai_socktype;
-
- *res = ai;
- return 0;
-}
-#define getaddrinfo OTTDgetaddrinfo
-
-static inline void OTTDfreeaddrinfo(struct addrinfo *ai)
-{
- static int (WINAPI *freeaddrinfo)(struct addrinfo *) = NULL;
- static bool first_time = true;
-
- if (ai == NULL) return;
-
- if (first_time) {
- LoadLibraryList((Function*)&freeaddrinfo, "ws2_32.dll\0freeaddrinfo\0\0");
- first_time = false;
- }
-
- if (freeaddrinfo != NULL) {
- freeaddrinfo(ai);
- return;
- }
-
- do {
- struct addrinfo *next = ai->ai_next;
- free(ai->ai_addr);
- free(ai);
- ai = next;
- } while (ai != NULL);
-}
-#define freeaddrinfo OTTDfreeaddrinfo
-#endif /* __MINGW32__ && __CYGWIN__ */
+#endif /* !(__MINGW32__ && __CYGWIN__) */
#endif /* _WIN32 */
/* UNIX stuff */
diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp
index a8bb64080a..aec198bf55 100644
--- a/src/network/core/tcp_http.cpp
+++ b/src/network/core/tcp_http.cpp
@@ -45,14 +45,14 @@ NetworkHTTPSocketHandler::NetworkHTTPSocketHandler(SOCKET s,
redirect_depth(depth),
sock(s)
{
- size_t bufferSize = strlen(url) + strlen(host) + strlen(_openttd_revision) + (data == NULL ? 0 : strlen(data)) + 128;
+ size_t bufferSize = strlen(url) + strlen(host) + strlen(GetNetworkRevisionString()) + (data == NULL ? 0 : strlen(data)) + 128;
char *buffer = AllocaM(char, bufferSize);
DEBUG(net, 7, "[tcp/http] requesting %s%s", host, url);
if (data != NULL) {
- seprintf(buffer, buffer + bufferSize - 1, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\nContent-Type: text/plain\r\nContent-Length: %d\r\n\r\n%s\r\n", url, host, _openttd_revision, (int)strlen(data), data);
+ seprintf(buffer, buffer + bufferSize - 1, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\nContent-Type: text/plain\r\nContent-Length: %d\r\n\r\n%s\r\n", url, host, GetNetworkRevisionString(), (int)strlen(data), data);
} else {
- seprintf(buffer, buffer + bufferSize - 1, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\n\r\n", url, host, _openttd_revision);
+ seprintf(buffer, buffer + bufferSize - 1, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\n\r\n", url, host, GetNetworkRevisionString());
}
ssize_t size = strlen(buffer);
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 0bbdd0d06c..d70d800f9c 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -1100,13 +1100,68 @@ void NetworkShutDown()
NetworkCoreShutdown();
}
+/**
+ * How many hex digits of the git hash to include in network revision string.
+ * Determined as 10 hex digits + 2 characters for -g/-u/-m prefix.
+ */
+static const uint GITHASH_SUFFIX_LEN = 12;
+
+/**
+ * Get the network version string used by this build.
+ * The returned string is guaranteed to be at most NETWORK_REVISON_LENGTH bytes.
+ */
+const char * GetNetworkRevisionString()
+{
+ /* This will be allocated on heap and never free'd, but only once so not a "real" leak. */
+ static char *network_revision = nullptr;
+
+ if (!network_revision) {
+ /* Start by taking a chance on the full revision string. */
+ network_revision = stredup(_openttd_revision);
+ /* Ensure it's not longer than the packet buffer length. */
+ if (strlen(network_revision) >= NETWORK_REVISION_LENGTH) network_revision[NETWORK_REVISION_LENGTH - 1] = '\0';
+
+ /* Release version names are not mangled further. */
+ if (IsReleasedVersion()) return network_revision;
+
+ /* Prepare a prefix of the git hash.
+ * Size is length + 1 for terminator, +2 for -g prefix. */
+ assert(_openttd_revision_modified < 3);
+ char githash_suffix[GITHASH_SUFFIX_LEN + 1] = "-";
+ githash_suffix[1] = "gum"[_openttd_revision_modified];
+ for (uint i = 2; i < GITHASH_SUFFIX_LEN; i++) {
+ githash_suffix[i] = _openttd_revision_hash[i-2];
+ }
+
+ /* Where did the hash start in the original string?
+ * Overwrite from that position, unless that would go past end of packet buffer length. */
+ ptrdiff_t hashofs = strrchr(_openttd_revision, '-') - _openttd_revision;
+ if (hashofs + strlen(githash_suffix) + 1 > NETWORK_REVISION_LENGTH) hashofs = strlen(network_revision) - strlen(githash_suffix);
+ /* Replace the git hash in revision string. */
+ strecpy(network_revision + hashofs, githash_suffix, network_revision + NETWORK_REVISION_LENGTH);
+ assert(strlen(network_revision) < NETWORK_REVISION_LENGTH); // strlen does not include terminator, constant does, hence strictly less than
+ }
+
+ return network_revision;
+}
+
+static const char *ExtractNetworkRevisionHash(const char *revstr)
+{
+ return strrchr(revstr, '-');
+}
+
/**
* Checks whether the given version string is compatible with our version.
+ * First tries to match the full string, if that fails, attempts to compare just git hashes.
* @param other the version string to compare to
*/
bool IsNetworkCompatibleVersion(const char *other)
{
- return strncmp(_openttd_revision, other, NETWORK_REVISION_LENGTH - 1) == 0;
+ if (strncmp(GetNetworkRevisionString(), other, NETWORK_REVISION_LENGTH - 1) == 0) return true;
+
+ const char *hash1 = ExtractNetworkRevisionHash(GetNetworkRevisionString());
+ const char *hash2 = ExtractNetworkRevisionHash(other);
+ return hash1 && hash2 && (strncmp(hash1, hash2, GITHASH_SUFFIX_LEN) == 0);
}
#endif /* ENABLE_NETWORK */
diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp
index c1ca3d3bb2..f70f3d1a51 100644
--- a/src/network/network_admin.cpp
+++ b/src/network/network_admin.cpp
@@ -172,7 +172,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendWelcome()
Packet *p = new Packet(ADMIN_PACKET_SERVER_WELCOME);
p->Send_string(_settings_client.network.server_name);
- p->Send_string(_openttd_revision);
+ p->Send_string(GetNetworkRevisionString());
p->Send_bool (_network_dedicated);
p->Send_string(_network_game_info.map_name);
diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp
index 4b066681d7..9e34ebb099 100644
--- a/src/network/network_client.cpp
+++ b/src/network/network_client.cpp
@@ -343,7 +343,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
Packet *p = new Packet(PACKET_CLIENT_JOIN);
- p->Send_string(_openttd_revision);
+ p->Send_string(GetNetworkRevisionString());
p->Send_uint32(_openttd_newgrf_version);
p->Send_string(_settings_client.network.client_name); // Client name
p->Send_uint8 (_network_join_as); // PlayAs
diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp
index 1df2fc82c4..877dea9786 100644
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -76,7 +76,7 @@ struct ContentTextfileWindow : public TextfileWindow {
void ShowContentTextfileWindow(TextfileType file_type, const ContentInfo *ci)
{
- DeleteWindowByClass(WC_TEXTFILE);
+ DeleteWindowById(WC_TEXTFILE, file_type);
new ContentTextfileWindow(file_type, ci);
}
diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp
index 1dc6960659..3fd0dd4853 100644
--- a/src/network/network_udp.cpp
+++ b/src/network/network_udp.cpp
@@ -191,7 +191,7 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER(Packet *p, Networ
strecpy(ngi.map_name, _network_game_info.map_name, lastof(ngi.map_name));
strecpy(ngi.server_name, _settings_client.network.server_name, lastof(ngi.server_name));
- strecpy(ngi.server_revision, _openttd_revision, lastof(ngi.server_revision));
+ strecpy(ngi.server_revision, GetNetworkRevisionString(), lastof(ngi.server_revision));
Packet packet(PACKET_UDP_SERVER_RESPONSE);
this->SendNetworkGameInfo(&packet, &ngi);
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 57dcb41ca5..74d29e3e50 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -2294,6 +2294,10 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf)
break;
}
+ case 0x23:
+ buf->Skip(buf->ReadByte() * 2);
+ break;
+
default:
ret = CIR_UNKNOWN;
break;
@@ -2526,6 +2530,28 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
housespec->max_year = buf->ReadWord();
break;
+ case 0x23: { // variable length cargo types accepted
+ uint count = buf->ReadByte();
+ if (count > lengthof(housespec->accepts_cargo)) {
+ GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG);
+ error->param_value[1] = prop;
+ return CIR_DISABLED;
+ }
+ /* Always write the full accepts_cargo array, and check each index for being inside the
+ * provided data. This ensures all values are properly initialized, and also avoids
+ * any risks of array overrun. */
+ for (uint i = 0; i < lengthof(housespec->accepts_cargo); i++) {
+ if (i < count) {
+ housespec->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile);
+ housespec->cargo_acceptance[i] = buf->ReadByte();
+ } else {
+ housespec->accepts_cargo[i] = CT_INVALID;
+ housespec->cargo_acceptance[i] = 0;
+ }
+ }
+ break;
+ }
+
default:
ret = CIR_UNKNOWN;
break;
@@ -8565,6 +8591,8 @@ static void FinaliseEngineArray()
}
}
+ if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
+
/* When the train does not set property 27 (misc flags), but it
* is overridden by a NewGRF graphically we want to disable the
* flipping possibility. */
diff --git a/src/newgrf_animation_type.h b/src/newgrf_animation_type.h
index 1f3995f46d..8eec6ada9c 100644
--- a/src/newgrf_animation_type.h
+++ b/src/newgrf_animation_type.h
@@ -46,11 +46,12 @@ enum IndustryAnimationTrigger {
/** Animation triggers for airport tiles */
enum AirpAnimationTrigger {
- AAT_BUILT, ///< Triggered when the airport is built (for all tiles at the same time).
- AAT_TILELOOP, ///< Triggered in the periodic tile loop.
- AAT_STATION_NEW_CARGO, ///< Triggered when new cargo arrives at the station (for all tiles at the same time).
- AAT_STATION_CARGO_TAKEN, ///< Triggered when a cargo type is completely removed from the station (for all tiles at the same time).
- AAT_STATION_250_TICKS, ///< Triggered every 250 ticks (for all tiles at the same time).
+ AAT_BUILT, ///< Triggered when the airport is built (for all tiles at the same time).
+ AAT_TILELOOP, ///< Triggered in the periodic tile loop.
+ AAT_STATION_NEW_CARGO, ///< Triggered when new cargo arrives at the station (for all tiles at the same time).
+ AAT_STATION_CARGO_TAKEN, ///< Triggered when a cargo type is completely removed from the station (for all tiles at the same time).
+ AAT_STATION_250_TICKS, ///< Triggered every 250 ticks (for all tiles at the same time).
+ AAT_STATION_AIRPLANE_LAND, ///< Triggered when an airplane (not a helicopter) touches down at the airport (for all tiles at the same time).
};
/** Animation triggers for objects. */
diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp
index 6a45304833..5f32b5bad5 100644
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -113,15 +113,15 @@ static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint
SetDParam(0, STR_JUST_RAW_STRING);
SetDParamStr(1, buff);
} else {
- SetDParam(0, STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE);
+ SetDParam(0, STR_NEWGRF_SETTINGS_PARAMETER_NONE);
}
y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PARAMETER);
/* Draw the palette of the NewGRF */
if (c->palette & GRFP_BLT_32BPP) {
- SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Legacy (W) / 32 bpp" : "Default (D) / 32 bpp");
+ SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP);
} else {
- SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Legacy (W)" : "Default (D)");
+ SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT);
}
y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PALETTE);
}
@@ -561,7 +561,7 @@ struct NewGRFTextfileWindow : public TextfileWindow {
void ShowNewGRFTextfileWindow(TextfileType file_type, const GRFConfig *c)
{
- DeleteWindowByClass(WC_TEXTFILE);
+ DeleteWindowById(WC_TEXTFILE, file_type);
new NewGRFTextfileWindow(file_type, c);
}
@@ -725,7 +725,11 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
GRFConfig *d = new GRFConfig(*a);
d->next = (*c)->next;
d->CopyParams(**c);
- if (this->active_sel == *c) this->active_sel = NULL;
+ if (this->active_sel == *c) {
+ DeleteWindowByClass(WC_GRF_PARAMETERS);
+ DeleteWindowByClass(WC_TEXTFILE);
+ this->active_sel = NULL;
+ }
delete *c;
*c = d;
iter->second = d;
@@ -1022,7 +1026,10 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
GRFConfig *c;
for (c = this->actives; c != NULL && i > 0; c = c->next, i--) {}
- if (this->active_sel != c) DeleteWindowByClass(WC_GRF_PARAMETERS);
+ if (this->active_sel != c) {
+ DeleteWindowByClass(WC_GRF_PARAMETERS);
+ DeleteWindowByClass(WC_TEXTFILE);
+ }
this->active_sel = c;
this->avail_sel = NULL;
this->avail_pos = -1;
@@ -1039,6 +1046,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
case WID_NS_REMOVE: { // Remove GRF
if (this->active_sel == NULL || !this->editable) break;
DeleteWindowByClass(WC_GRF_PARAMETERS);
+ DeleteWindowByClass(WC_TEXTFILE);
/* Choose the next GRF file to be the selected file. */
GRFConfig *newsel = this->active_sel->next;
@@ -1080,6 +1088,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
this->active_sel = NULL;
DeleteWindowByClass(WC_GRF_PARAMETERS);
if (i < this->avails.Length()) {
+ if (this->avail_sel != this->avails[i]) DeleteWindowByClass(WC_TEXTFILE);
this->avail_sel = this->avails[i];
this->avail_pos = i;
}
@@ -1152,11 +1161,11 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
virtual void OnNewGRFsScanned()
{
+ if (this->active_sel == NULL) DeleteWindowByClass(WC_TEXTFILE);
this->avail_sel = NULL;
this->avail_pos = -1;
this->avails.ForceRebuild();
this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window
- this->DeleteChildWindows(WC_TEXTFILE); // Remove the view textfile window
}
virtual void OnDropdownSelect(int widget, int index)
@@ -1173,6 +1182,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
ResetObjectToPlace();
DeleteWindowByClass(WC_GRF_PARAMETERS);
+ DeleteWindowByClass(WC_TEXTFILE);
this->active_sel = NULL;
this->InvalidateData(GOID_NEWGRF_PRESET_LOADED);
}
@@ -1221,7 +1231,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
*l = new GRFConfig(*f);
(*l)->next = c->next;
- if (active_sel == c) active_sel = *l;
+ if (this->active_sel == c) this->active_sel = *l;
delete c;
}
@@ -1347,6 +1357,9 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
if (this->avails.Length() == 0) this->avail_pos = -1;
if (this->avail_pos >= 0) {
+ this->active_sel = NULL;
+ DeleteWindowByClass(WC_GRF_PARAMETERS);
+ if (this->avail_sel != this->avails[this->avail_pos]) DeleteWindowByClass(WC_TEXTFILE);
this->avail_sel = this->avails[this->avail_pos];
this->vscroll2->ScrollTowards(this->avail_pos);
this->InvalidateData(0);
@@ -1509,6 +1522,8 @@ private:
{
if (this->avail_sel == NULL || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) return false;
+ DeleteWindowByClass(WC_TEXTFILE);
+
uint count = 0;
GRFConfig **entry = NULL;
GRFConfig **list;
@@ -1968,6 +1983,7 @@ static void NewGRFConfirmationCallback(Window *w, bool confirmed)
{
if (confirmed) {
DeleteWindowByClass(WC_GRF_PARAMETERS);
+ DeleteWindowByClass(WC_TEXTFILE);
NewGRFWindow *nw = dynamic_cast(w);
GamelogStartAction(GLAT_GRF);
diff --git a/src/openttd.cpp b/src/openttd.cpp
index c6cc7cc515..d3c4cd7964 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -117,7 +117,9 @@ void CDECL error(const char *s, ...)
vseprintf(buf, lastof(buf), s, va);
va_end(va);
- ShowOSErrorBox(buf, true);
+ if (VideoDriver::GetInstance() == NULL || VideoDriver::GetInstance()->HasGUI()) {
+ ShowOSErrorBox(buf, true);
+ }
/* Set the error message for the crash log and then invoke it. */
CrashLog::SetErrorMessage(buf);
@@ -240,7 +242,7 @@ static void ShowHelp()
static void WriteSavegameInfo(const char *name)
{
- extern uint16 _sl_version;
+ extern SaveLoadVersion _sl_version;
uint32 last_ottd_rev = 0;
byte ever_modified = 0;
bool removed_newgrfs = false;
@@ -297,7 +299,7 @@ static void ParseResolution(Dimension *res, const char *s)
/**
- * Unitializes drivers, frees allocated memory, cleans pools, ...
+ * Uninitializes drivers, frees allocated memory, cleans pools, ...
* Generally, prepares the game for shutting down
*/
static void ShutdownGame()
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index ba8a1a060d..83dacdca45 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -23,6 +23,7 @@
#include "core/random_func.hpp"
#include "aircraft.h"
#include "roadveh.h"
+#include "ship.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "company_base.h"
@@ -929,7 +930,7 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
dist = GetOrderDistance(prev, &new_order, v);
}
- if (dist >= 130) {
+ if (dist >= SHIP_MAX_ORDER_DISTANCE) {
return_cmd_error(STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION);
}
}
@@ -2040,13 +2041,13 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool
{
if (conditional_depth > v->GetNumOrders()) {
v->current_order.Free();
- v->dest_tile = 0;
+ v->SetDestTile(0);
return false;
}
switch (order->GetType()) {
case OT_GOTO_STATION:
- v->dest_tile = v->GetOrderStationLocation(order->GetDestination());
+ v->SetDestTile(v->GetOrderStationLocation(order->GetDestination()));
return true;
case OT_GOTO_DEPOT:
@@ -2067,7 +2068,7 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool
/* PBS reservations cannot reverse */
if (pbs_look_ahead && reverse) return false;
- v->dest_tile = location;
+ v->SetDestTile(location);
v->current_order.MakeGoToDepot(destination, v->current_order.GetDepotOrderType(), v->current_order.GetNonStopType(), (OrderDepotActionFlags)(v->current_order.GetDepotActionType() & ~ODATFB_NEAREST_DEPOT), v->current_order.GetRefitCargo());
/* If there is no depot in front, reverse automatically (trains only) */
@@ -2091,14 +2092,21 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool
v->IncrementRealOrderIndex();
} else {
if (v->type != VEH_AIRCRAFT) {
- v->dest_tile = Depot::Get(order->GetDestination())->xy;
+ v->SetDestTile(Depot::Get(order->GetDestination())->xy);
+ } else {
+ Aircraft *a = Aircraft::From(v);
+ DestinationID destination = a->current_order.GetDestination();
+ if (a->targetairport != destination) {
+ /* The aircraft is now heading for a different hangar than the next in the orders */
+ a->SetDestTile(a->GetOrderStationLocation(destination));
+ }
}
return true;
}
break;
case OT_GOTO_WAYPOINT:
- v->dest_tile = Waypoint::Get(order->GetDestination())->xy;
+ v->SetDestTile(Waypoint::Get(order->GetDestination())->xy);
return true;
case OT_CONDITIONAL: {
@@ -2126,7 +2134,7 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool
}
default:
- v->dest_tile = 0;
+ v->SetDestTile(0);
return false;
}
@@ -2142,7 +2150,7 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool
if (order == NULL) {
v->current_order.Free();
- v->dest_tile = 0;
+ v->SetDestTile(0);
return false;
}
@@ -2218,7 +2226,7 @@ bool ProcessOrders(Vehicle *v)
}
v->current_order.Free();
- v->dest_tile = 0;
+ v->SetDestTile(0);
return false;
}
diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in
index 616d8bb3eb..ebf0cc4afb 100644
--- a/src/os/windows/ottdres.rc.in
+++ b/src/os/windows/ottdres.rc.in
@@ -14,7 +14,7 @@
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
-#ifdef MSVC
+#ifndef __MINGW32__
#include "winres.h"
#else
#define IDC_STATIC (-1) // all static controls
@@ -100,7 +100,7 @@ BEGIN
VALUE "FileDescription", "OpenTTD\0"
VALUE "FileVersion", "!!VERSION!!\0"
VALUE "InternalName", "openttd\0"
- VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2018. All Rights Reserved.\0"
+ VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2019. All Rights Reserved.\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "openttd.exe\0"
VALUE "PrivateBuild", "\0"
@@ -117,5 +117,9 @@ END
#endif // !_MAC
+#ifdef __MINGW32__
+1 24 "..\\..\\..\\projects\\dpi_aware.manifest"
+#endif
+
#endif // Neutral (Default) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp
index bb1a0a4209..4a49555492 100644
--- a/src/os/windows/win32.cpp
+++ b/src/os/windows/win32.cpp
@@ -17,6 +17,7 @@
#include
#include
#include
+#define NO_SHOBJIDL_SORTDIRECTION // Avoid multiple definition of SORT_ASCENDING
#include /* SHGetFolderPath */
#include
#include "win32.h"
@@ -30,10 +31,7 @@
#include
#include "../../language.h"
-/* Due to TCHAR, strncat and strncpy have to remain (for a while). */
#include "../../safeguards.h"
-#undef strncat
-#undef strncpy
static bool _has_console;
static bool _cursor_disable = true;
diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp
index 8bd63beb7b..beac06291f 100644
--- a/src/pathfinder/npf/aystar.cpp
+++ b/src/pathfinder/npf/aystar.cpp
@@ -170,7 +170,7 @@ int AyStar::Loop()
if (current == NULL) return AYSTAR_EMPTY_OPENLIST;
/* Check for end node and if found, return that code */
- if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE) {
+ if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && !CheckIgnoreFirstTile(¤t->path)) {
if (this->FoundEndNode != NULL) {
this->FoundEndNode(this, current);
}
diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h
index 4ee9df3329..890b023e83 100644
--- a/src/pathfinder/npf/aystar.h
+++ b/src/pathfinder/npf/aystar.h
@@ -59,6 +59,8 @@ struct OpenListNode {
PathNode path;
};
+bool CheckIgnoreFirstTile(const PathNode *node);
+
struct AyStar;
/**
@@ -75,7 +77,7 @@ struct AyStar;
* - #AYSTAR_FOUND_END_NODE : indicates this is the end tile
* - #AYSTAR_DONE : indicates this is not the end tile (or direction was wrong)
*/
-typedef int32 AyStar_EndNodeCheck(AyStar *aystar, OpenListNode *current);
+typedef int32 AyStar_EndNodeCheck(const AyStar *aystar, const OpenListNode *current);
/**
* Calculate the G-value for the %AyStar algorithm.
diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp
index 9535ac0636..7d19d4ef1d 100644
--- a/src/pathfinder/npf/npf.cpp
+++ b/src/pathfinder/npf/npf.cpp
@@ -101,6 +101,11 @@ static inline void NPFSetFlag(AyStarNode *node, NPFNodeFlag flag, bool value)
SB(node->user_data[NPF_NODE_FLAGS], flag, 1, value);
}
+bool CheckIgnoreFirstTile(const PathNode *node)
+{
+ return (node->parent == NULL && HasBit(node->node.user_data[NPF_NODE_FLAGS], NPF_FLAG_IGNORE_START_TILE));
+}
+
/**
* Calculates the minimum distance travelled to get from t0 to t1 when only
* using tracks (ie, only making 45 degree turns). Returns the distance in the
@@ -529,7 +534,7 @@ static int32 NPFRailPathCost(AyStar *as, AyStarNode *current, OpenListNode *pare
}
/* Will find any depot */
-static int32 NPFFindDepot(AyStar *as, OpenListNode *current)
+static int32 NPFFindDepot(const AyStar *as, const OpenListNode *current)
{
AyStarUserData *user = (AyStarUserData *)as->user_data;
/* It's not worth caching the result with NPF_FLAG_IS_TARGET here as below,
@@ -539,7 +544,7 @@ static int32 NPFFindDepot(AyStar *as, OpenListNode *current)
}
/** Find any safe and free tile. */
-static int32 NPFFindSafeTile(AyStar *as, OpenListNode *current)
+static int32 NPFFindSafeTile(const AyStar *as, const OpenListNode *current)
{
const Train *v = Train::From(((NPFFindStationOrTileData *)as->user_target)->v);
@@ -549,10 +554,10 @@ static int32 NPFFindSafeTile(AyStar *as, OpenListNode *current)
}
/* Will find a station identified using the NPFFindStationOrTileData */
-static int32 NPFFindStationOrTile(AyStar *as, OpenListNode *current)
+static int32 NPFFindStationOrTile(const AyStar *as, const OpenListNode *current)
{
NPFFindStationOrTileData *fstd = (NPFFindStationOrTileData*)as->user_target;
- AyStarNode *node = ¤t->path.node;
+ const AyStarNode *node = ¤t->path.node;
TileIndex tile = node->tile;
if (fstd->station_index == INVALID_STATION && tile == fstd->dest_coords) return AYSTAR_FOUND_END_NODE;
@@ -853,11 +858,6 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
TileIndex src_tile = current->path.node.tile;
DiagDirection src_exitdir = TrackdirToExitdir(src_trackdir);
- /* Is src_tile valid, and can be used?
- * When choosing track on a junction src_tile is the tile neighboured to the junction wrt. exitdir.
- * But we must not check the validity of this move, as src_tile is totally unrelated to the move, if a roadvehicle reversed on a junction. */
- bool ignore_src_tile = (current->path.parent == NULL && NPFGetFlag(¤t->path.node, NPF_FLAG_IGNORE_START_TILE));
-
/* Information about the vehicle: TransportType (road/rail/water) and SubType (compatible rail/road types) */
TransportType type = user->type;
uint subtype = user->roadtypes;
@@ -871,7 +871,10 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
TrackdirBits trackdirbits;
/* Find dest tile */
- if (ignore_src_tile) {
+ /* Is src_tile valid, and can be used?
+ * When choosing track on a junction src_tile is the tile neighboured to the junction wrt. exitdir.
+ * But we must not check the validity of this move, as src_tile is totally unrelated to the move, if a roadvehicle reversed on a junction. */
+ if (CheckIgnoreFirstTile(¤t->path)) {
/* Do not perform any checks that involve src_tile */
dst_tile = src_tile + TileOffsByDiagDir(src_exitdir);
trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype);
@@ -1127,7 +1130,7 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal
return FindDepotData(ftd.node.tile, ftd.best_path_dist);
}
-Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found)
+Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found)
{
NPFFindStationOrTileData fstd;
@@ -1136,13 +1139,8 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir
AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes };
NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user);
- if (ftd.best_trackdir == INVALID_TRACKDIR) {
- /* We are already at our target. Just do something
- * @todo: maybe display error?
- * @todo: go straight ahead if possible? */
- path_found = true;
- return (Trackdir)FindFirstBit2x64(trackdirs);
- }
+
+ assert(ftd.best_trackdir != INVALID_TRACKDIR);
/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
* the direction we need to take to get there, if ftd.best_bird_dist is not 0,
@@ -1154,7 +1152,7 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir
/*** Ships ***/
-Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found)
+Track NPFShipChooseTrack(const Ship *v, bool &path_found)
{
NPFFindStationOrTileData fstd;
Trackdir trackdir = v->GetVehicleTrackdir();
@@ -1163,14 +1161,15 @@ Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir,
NPFFillWithOrderData(&fstd, v);
AyStarUserData user = { v->owner, TRANSPORT_WATER, INVALID_RAILTYPES, ROADTYPES_NONE };
- NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user);
+ NPFFoundTargetData ftd = NPFRouteToStationOrTile(v->tile, trackdir, true, &fstd, &user);
+
+ assert(ftd.best_trackdir != INVALID_TRACKDIR);
/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
* the direction we need to take to get there, if ftd.best_bird_dist is not 0,
* we did not find our target, but ftd.best_trackdir contains the direction leading
* to the tile closest to our target. */
path_found = (ftd.best_bird_dist == 0);
- if (ftd.best_trackdir == INVALID_TRACKDIR) return INVALID_TRACK;
return TrackdirToTrack(ftd.best_trackdir);
}
@@ -1256,7 +1255,7 @@ bool NPFTrainCheckReverse(const Train *v)
return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE);
}
-Track NPFTrainChooseTrack(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target)
+Track NPFTrainChooseTrack(const Train *v, bool &path_found, bool reserve_track, struct PBSTileInfo *target)
{
NPFFindStationOrTileData fstd;
NPFFillWithOrderData(&fstd, v, reserve_track);
@@ -1273,13 +1272,7 @@ Track NPFTrainChooseTrack(const Train *v, TileIndex tile, DiagDirection enterdir
target->okay = ftd.res_okay;
}
- if (ftd.best_trackdir == INVALID_TRACKDIR) {
- /* We are already at our target. Just do something
- * @todo maybe display error?
- * @todo: go straight ahead if possible? */
- path_found = true;
- return FindFirstTrack(tracks);
- }
+ assert(ftd.best_trackdir != INVALID_TRACKDIR);
/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
* the direction we need to take to get there, if ftd.best_bird_dist is not 0,
diff --git a/src/pathfinder/npf/npf_func.h b/src/pathfinder/npf/npf_func.h
index 6507f4ec58..2429989ab9 100644
--- a/src/pathfinder/npf/npf_func.h
+++ b/src/pathfinder/npf/npf_func.h
@@ -32,22 +32,18 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal
* @param v the RV that needs to find a path
* @param tile the tile to find the path from (should be next tile the RV is about to enter)
* @param enterdir diagonal direction which the RV will enter this new tile from
- * @param trackdirs available trackdirs on the new tile (to choose from)
* @param path_found [out] Whether a path has been found (true) or has been guessed (false)
* @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found
*/
-Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found);
+Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found);
/**
* Finds the best path for given ship using NPF.
* @param v the ship that needs to find a path
- * @param tile the tile to find the path from (should be next tile the ship is about to enter)
- * @param enterdir diagonal direction which the ship will enter this new tile from
- * @param tracks available tracks on the new tile (to choose from)
* @param path_found [out] Whether a path has been found (true) or has been guessed (false)
* @return the best trackdir for next turn or INVALID_TRACK if the path could not be found
*/
-Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found);
+Track NPFShipChooseTrack(const Ship *v, bool &path_found);
/**
* Returns true if it is better to reverse the ship before leaving depot using NPF.
@@ -87,14 +83,11 @@ bool NPFTrainCheckReverse(const Train *v);
/**
* Finds the best path for given train using NPF.
* @param v the train that needs to find a path
- * @param tile the tile to find the path from (should be next tile the train is about to enter)
- * @param enterdir diagonal direction which the RV will enter this new tile from
- * @param tracks available trackdirs on the new tile (to choose from)
* @param path_found [out] Whether a path has been found (true) or has been guessed (false)
* @param reserve_track indicates whether YAPF should try to reserve the found path
* @param target [out] the target tile of the reservation, free is set to true if path was reserved
* @return the best track for next turn
*/
-Track NPFTrainChooseTrack(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target);
+Track NPFTrainChooseTrack(const Train *v, bool &path_found, bool reserve_track, struct PBSTileInfo *target);
#endif /* NPF_FUNC_H */
diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h
index 73031d5c81..0ecf00bbd2 100644
--- a/src/pathfinder/pathfinder_type.h
+++ b/src/pathfinder/pathfinder_type.h
@@ -40,6 +40,9 @@ static const int YAPF_TILE_CORNER_LENGTH = 71;
*/
static const int YAPF_INFINITE_PENALTY = 1000 * YAPF_TILE_LENGTH;
+/** Maximum length of ship path cache */
+static const int YAPF_SHIP_PATH_CACHE_LENGTH = 32;
+
/**
* Helper container to find a depot
*/
diff --git a/src/pathfinder/yapf/yapf.h b/src/pathfinder/yapf/yapf.h
index 00eb7e5625..84bd35c8b0 100644
--- a/src/pathfinder/yapf/yapf.h
+++ b/src/pathfinder/yapf/yapf.h
@@ -15,6 +15,7 @@
#include "../../direction_type.h"
#include "../../track_type.h"
#include "../../vehicle_type.h"
+#include "../../ship.h"
#include "../pathfinder_type.h"
/**
@@ -26,7 +27,7 @@
* @param path_found [out] Whether a path has been found (true) or has been guessed (false)
* @return the best trackdir for next turn or INVALID_TRACK if the path could not be found
*/
-Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found);
+Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache);
/**
* Returns true if it is better to reverse the ship before leaving depot using YAPF.
diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp
index 44a5c0cfa7..c6e484feaa 100644
--- a/src/pathfinder/yapf/yapf_ship.cpp
+++ b/src/pathfinder/yapf/yapf_ship.cpp
@@ -54,12 +54,12 @@ public:
return 'w';
}
- static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found)
+ static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache)
{
/* handle special case - when next tile is destination tile */
if (tile == v->dest_tile) {
/* convert tracks to trackdirs */
- TrackdirBits trackdirs = (TrackdirBits)(tracks | ((int)tracks << 8));
+ TrackdirBits trackdirs = TrackBitsToTrackdirBits(tracks);
/* limit to trackdirs reachable from enterdir */
trackdirs &= DiagdirReachesTrackdirs(enterdir);
@@ -90,9 +90,17 @@ public:
Node *pNode = pf.GetBestNode();
if (pNode != NULL) {
+ uint steps = 0;
+ for (Node *n = pNode; n->m_parent != NULL; n = n->m_parent) steps++;
+
/* walk through the path back to the origin */
Node *pPrevNode = NULL;
while (pNode->m_parent != NULL) {
+ if (steps > 1 && --steps < YAPF_SHIP_PATH_CACHE_LENGTH) {
+ TrackdirByte td;
+ td = pNode->GetTrackdir();
+ path_cache.push_front(td);
+ }
pPrevNode = pNode;
pNode = pNode->m_parent;
}
@@ -100,6 +108,8 @@ public:
Node &best_next_node = *pPrevNode;
assert(best_next_node.GetTile() == tile);
next_trackdir = best_next_node.GetTrackdir();
+ /* remove last element for the special case when tile == dest_tile */
+ if (path_found && !path_cache.empty()) path_cache.pop_back();
}
return next_trackdir;
}
@@ -222,10 +232,10 @@ struct CYapfShip2 : CYapfT > {};
/** Ship controller helper - path finder invoker */
-Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found)
+Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache)
{
/* default is YAPF type 2 */
- typedef Trackdir (*PfnChooseShipTrack)(const Ship*, TileIndex, DiagDirection, TrackBits, bool &path_found);
+ typedef Trackdir (*PfnChooseShipTrack)(const Ship*, TileIndex, DiagDirection, TrackBits, bool &path_found, ShipPathCache &path_cache);
PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir, allow 90-deg
/* check if non-default YAPF type needed */
@@ -235,7 +245,7 @@ Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir,
pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir, allow 90-deg
}
- Trackdir td_ret = pfnChooseShipTrack(v, tile, enterdir, tracks, path_found);
+ Trackdir td_ret = pfnChooseShipTrack(v, tile, enterdir, tracks, path_found, path_cache);
return (td_ret != INVALID_TRACKDIR) ? TrackdirToTrack(td_ret) : INVALID_TRACK;
}
diff --git a/src/rev.cpp.in b/src/rev.cpp.in
index 0f4b2a6b57..3c68e18ebf 100644
--- a/src/rev.cpp.in
+++ b/src/rev.cpp.in
@@ -47,6 +47,11 @@ const char _openttd_revision[] = "!!VERSION!!";
*/
const char _openttd_build_date[] = __DATE__ " " __TIME__;
+/**
+ * The git revision hash of this version.
+ */
+const char _openttd_revision_hash[] = "!!GITHASH!!";
+
/**
* Let us know if current build was modified. This detection
* works even in the case when revision string is overridden by
diff --git a/src/rev.h b/src/rev.h
index d31dbb51cc..55fc086992 100644
--- a/src/rev.h
+++ b/src/rev.h
@@ -14,6 +14,7 @@
extern const char _openttd_revision[];
extern const char _openttd_build_date[];
+extern const char _openttd_revision_hash[];
extern const byte _openttd_revision_modified;
extern const uint32 _openttd_newgrf_version;
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index 175e776e5e..d9825c9bfa 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -809,7 +809,9 @@ do_clear:;
*/
static bool CanConnectToRoad(TileIndex tile, RoadType rt, DiagDirection dir)
{
- RoadBits bits = GetAnyRoadBits(tile + TileOffsByDiagDir(dir), rt, false);
+ tile += TileOffsByDiagDir(dir);
+ if (!IsValidTile(tile)) return false;
+ RoadBits bits = GetAnyRoadBits(tile, rt, false);
return (bits & DiagDirToRoadBits(ReverseDiagDir(dir))) != 0;
}
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp
index 207a3f23b2..9704770016 100644
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -958,7 +958,7 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection
}
switch (_settings_game.pf.pathfinder_for_roadvehs) {
- case VPF_NPF: best_track = NPFRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found); break;
+ case VPF_NPF: best_track = NPFRoadVehicleChooseTrack(v, tile, enterdir, path_found); break;
case VPF_YAPF: best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found); break;
default: NOT_REACHED();
@@ -1639,7 +1639,7 @@ static void CheckIfRoadVehNeedsService(RoadVehicle *v)
SetBit(v->gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS);
v->current_order.MakeGoToDepot(depot, ODTFB_SERVICE);
- v->dest_tile = rfdd.tile;
+ v->SetDestTile(rfdd.tile);
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP);
}
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 077f86bf62..872458b251 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -533,14 +533,14 @@ bool AfterLoadGame()
/* The LFSR used in RunTileLoop iteration cannot have a zeroed state, make it non-zeroed. */
if (_cur_tileloop_tile == 0) _cur_tileloop_tile = 1;
- if (IsSavegameVersionBefore(98)) GamelogOldver();
+ if (IsSavegameVersionBefore(SLV_98)) GamelogOldver();
GamelogTestRevision();
GamelogTestMode();
- if (IsSavegameVersionBefore(98)) GamelogGRFAddList(_grfconfig);
+ if (IsSavegameVersionBefore(SLV_98)) GamelogGRFAddList(_grfconfig);
- if (IsSavegameVersionBefore(119)) {
+ if (IsSavegameVersionBefore(SLV_119)) {
_pause_mode = (_pause_mode == 2) ? PM_PAUSED_NORMAL : PM_UNPAUSED;
} else if (_network_dedicated && (_pause_mode & PM_PAUSED_ERROR) != 0) {
DEBUG(net, 0, "The loading savegame was paused due to an error state.");
@@ -565,7 +565,7 @@ bool AfterLoadGame()
* Because the data stored by TTDPatch are unusable for rail stations > 7x7,
* recompute the width and height. Doing this unconditionally for all old
* savegames simplifies the code. */
- if (IsSavegameVersionBefore(2)) {
+ if (IsSavegameVersionBefore(SLV_2)) {
Station *st;
FOR_ALL_STATIONS(st) {
st->train_station.w = st->train_station.h = 0;
@@ -583,7 +583,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(194)) {
+ if (IsSavegameVersionBefore(SLV_194)) {
_settings_game.construction.max_heightlevel = 15;
/* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */
@@ -601,19 +601,19 @@ bool AfterLoadGame()
}
/* in version 2.1 of the savegame, town owner was unified. */
- if (IsSavegameVersionBefore(2, 1)) ConvertTownOwner();
+ if (IsSavegameVersionBefore(SLV_2, 1)) ConvertTownOwner();
/* from version 4.1 of the savegame, exclusive rights are stored at towns */
- if (IsSavegameVersionBefore(4, 1)) UpdateExclusiveRights();
+ if (IsSavegameVersionBefore(SLV_4, 1)) UpdateExclusiveRights();
/* from version 4.2 of the savegame, currencies are in a different order */
- if (IsSavegameVersionBefore(4, 2)) UpdateCurrencies();
+ if (IsSavegameVersionBefore(SLV_4, 2)) UpdateCurrencies();
/* In old version there seems to be a problem that water is owned by
* OWNER_NONE, not OWNER_WATER.. I can't replicate it for the current
* (4.3) version, so I just check when versions are older, and then
* walk through the whole map.. */
- if (IsSavegameVersionBefore(4, 3)) {
+ if (IsSavegameVersionBefore(SLV_4, 3)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_WATER) && GetTileOwner(t) >= MAX_COMPANIES) {
SetTileOwner(t, OWNER_WATER);
@@ -621,7 +621,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(84)) {
+ if (IsSavegameVersionBefore(SLV_84)) {
Company *c;
FOR_ALL_COMPANIES(c) {
c->name = CopyFromOldName(c->name_1);
@@ -647,7 +647,7 @@ bool AfterLoadGame()
/* From this point the old names array is cleared. */
ResetOldNames();
- if (IsSavegameVersionBefore(106)) {
+ if (IsSavegameVersionBefore(SLV_106)) {
/* no station is determined by 'tile == INVALID_TILE' now (instead of '0') */
Station *st;
FOR_ALL_STATIONS(st) {
@@ -659,7 +659,7 @@ bool AfterLoadGame()
/* the same applies to Company::location_of_HQ */
Company *c;
FOR_ALL_COMPANIES(c) {
- if (c->location_of_HQ == 0 || (IsSavegameVersionBefore(4) && c->location_of_HQ == 0xFFFF)) {
+ if (c->location_of_HQ == 0 || (IsSavegameVersionBefore(SLV_4) && c->location_of_HQ == 0xFFFF)) {
c->location_of_HQ = INVALID_TILE;
}
}
@@ -692,7 +692,7 @@ bool AfterLoadGame()
}
/* The value of _date_fract got divided, so make sure that old games are converted correctly. */
- if (IsSavegameVersionBefore(11, 1) || (IsSavegameVersionBefore(147) && _date_fract > DAY_TICKS)) _date_fract /= 885;
+ if (IsSavegameVersionBefore(SLV_11, 1) || (IsSavegameVersionBefore(SLV_147) && _date_fract > DAY_TICKS)) _date_fract /= 885;
/* Update current year
* must be done before loading sprites as some newgrfs check it */
@@ -711,29 +711,29 @@ bool AfterLoadGame()
* right value has been chosen in the settings. Otherwise we will be converting
* it incorrectly in half of the times without a means to correct that.
*/
- if (IsSavegameVersionBefore(4, 2)) _settings_game.station.modified_catchment = false;
- if (IsSavegameVersionBefore(6, 1)) _settings_game.pf.forbid_90_deg = false;
- if (IsSavegameVersionBefore(21)) _settings_game.vehicle.train_acceleration_model = 0;
- if (IsSavegameVersionBefore(90)) _settings_game.vehicle.plane_speed = 4;
- if (IsSavegameVersionBefore(95)) _settings_game.vehicle.dynamic_engines = 0;
- if (IsSavegameVersionBefore(96)) _settings_game.economy.station_noise_level = false;
- if (IsSavegameVersionBefore(133)) {
+ if (IsSavegameVersionBefore(SLV_4, 2)) _settings_game.station.modified_catchment = false;
+ if (IsSavegameVersionBefore(SLV_6, 1)) _settings_game.pf.forbid_90_deg = false;
+ if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = 0;
+ if (IsSavegameVersionBefore(SLV_90)) _settings_game.vehicle.plane_speed = 4;
+ if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = 0;
+ if (IsSavegameVersionBefore(SLV_96)) _settings_game.economy.station_noise_level = false;
+ if (IsSavegameVersionBefore(SLV_133)) {
_settings_game.vehicle.train_slope_steepness = 3;
}
- if (IsSavegameVersionBefore(134)) _settings_game.economy.feeder_payment_share = 75;
- if (IsSavegameVersionBefore(138)) _settings_game.vehicle.plane_crashes = 2;
- if (IsSavegameVersionBefore(139)) {
+ if (IsSavegameVersionBefore(SLV_134)) _settings_game.economy.feeder_payment_share = 75;
+ if (IsSavegameVersionBefore(SLV_138)) _settings_game.vehicle.plane_crashes = 2;
+ if (IsSavegameVersionBefore(SLV_139)) {
_settings_game.vehicle.roadveh_acceleration_model = 0;
_settings_game.vehicle.roadveh_slope_steepness = 7;
}
- if (IsSavegameVersionBefore(143)) _settings_game.economy.allow_town_level_crossings = true;
- if (IsSavegameVersionBefore(159)) {
+ if (IsSavegameVersionBefore(SLV_143)) _settings_game.economy.allow_town_level_crossings = true;
+ if (IsSavegameVersionBefore(SLV_159)) {
_settings_game.vehicle.max_train_length = 50;
_settings_game.construction.max_bridge_length = 64;
_settings_game.construction.max_tunnel_length = 64;
}
- if (IsSavegameVersionBefore(166)) _settings_game.economy.infrastructure_maintenance = false;
- if (IsSavegameVersionBefore(183)) {
+ if (IsSavegameVersionBefore(SLV_166)) _settings_game.economy.infrastructure_maintenance = false;
+ if (IsSavegameVersionBefore(SLV_183)) {
_settings_game.linkgraph.distribution_pax = DT_MANUAL;
_settings_game.linkgraph.distribution_mail = DT_MANUAL;
_settings_game.linkgraph.distribution_armoured = DT_MANUAL;
@@ -749,7 +749,7 @@ bool AfterLoadGame()
/* Connect front and rear engines of multiheaded trains and converts
* subtype to the new format */
- if (IsSavegameVersionBefore(17, 1)) ConvertOldMultiheadToNew();
+ if (IsSavegameVersionBefore(SLV_17, 1)) ConvertOldMultiheadToNew();
/* Connect front and rear engines of multiheaded trains */
ConnectMultiheadedTrains();
@@ -765,7 +765,7 @@ bool AfterLoadGame()
/* Oilrig was moved from id 15 to 9. We have to do this conversion
* here as AfterLoadVehicles can check it indirectly via the newgrf
* code. */
- if (IsSavegameVersionBefore(139)) {
+ if (IsSavegameVersionBefore(SLV_139)) {
Station *st;
FOR_ALL_STATIONS(st) {
if (st->airport.tile != INVALID_TILE && st->airport.type == 15) {
@@ -797,7 +797,7 @@ bool AfterLoadGame()
* This problem appears in savegame version 21 too, see r3455. But after loading the
* savegame and saving again, the buggy map array could be converted to new savegame
* version. It didn't show up before r12070. */
- if (IsSavegameVersionBefore(87)) UpdateVoidTiles();
+ if (IsSavegameVersionBefore(SLV_87)) UpdateVoidTiles();
/* If Load Scenario / New (Scenario) Game is used,
* a company does not exist yet. So create one here.
@@ -816,7 +816,7 @@ bool AfterLoadGame()
cp->current_station = cp->front->last_station_visited;
}
- if (IsSavegameVersionBefore(72)) {
+ if (IsSavegameVersionBefore(SLV_72)) {
/* Locks in very old savegames had OWNER_WATER as owner */
for (TileIndex t = 0; t < MapSize(); t++) {
switch (GetTileType(t)) {
@@ -887,7 +887,7 @@ bool AfterLoadGame()
switch (GetStationType(t)) {
case STATION_TRUCK:
case STATION_BUS:
- if (IsSavegameVersionBefore(6)) {
+ if (IsSavegameVersionBefore(SLV_6)) {
/* Before version 5 you could not have more than 250 stations.
* Version 6 adds large maps, so you could only place 253*253
* road stops on a map (no freeform edges) = 64009. So, yes
@@ -937,12 +937,12 @@ bool AfterLoadGame()
/* In version 2.2 of the savegame, we have new airports, so status of all aircraft is reset.
* This has to be called after the oilrig airport_type update above ^^^ ! */
- if (IsSavegameVersionBefore(2, 2)) UpdateOldAircraft();
+ if (IsSavegameVersionBefore(SLV_2, 2)) UpdateOldAircraft();
/* In version 6.1 we put the town index in the map-array. To do this, we need
* to use m2 (16bit big), so we need to clean m2, and that is where this is
* all about ;) */
- if (IsSavegameVersionBefore(6, 1)) {
+ if (IsSavegameVersionBefore(SLV_6, 1)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_HOUSE:
@@ -965,20 +965,20 @@ bool AfterLoadGame()
}
/* Force the freeform edges to false for old savegames. */
- if (IsSavegameVersionBefore(111)) {
+ if (IsSavegameVersionBefore(SLV_111)) {
_settings_game.construction.freeform_edges = false;
}
/* From version 9.0, we update the max passengers of a town (was sometimes negative
* before that. */
- if (IsSavegameVersionBefore(9)) {
+ if (IsSavegameVersionBefore(SLV_9)) {
Town *t;
FOR_ALL_TOWNS(t) UpdateTownMaxPass(t);
}
/* From version 16.0, we included autorenew on engines, which are now saved, but
* of course, we do need to initialize them for older savegames. */
- if (IsSavegameVersionBefore(16)) {
+ if (IsSavegameVersionBefore(SLV_16)) {
Company *c;
FOR_ALL_COMPANIES(c) {
c->engine_renew_list = NULL;
@@ -999,7 +999,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(48)) {
+ if (IsSavegameVersionBefore(SLV_48)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_RAILWAY:
@@ -1027,9 +1027,9 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(61)) {
+ if (IsSavegameVersionBefore(SLV_61)) {
/* Added the RoadType */
- bool old_bridge = IsSavegameVersionBefore(42);
+ bool old_bridge = IsSavegameVersionBefore(SLV_42);
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_ROAD:
@@ -1066,9 +1066,9 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(114)) {
- bool fix_roadtypes = !IsSavegameVersionBefore(61);
- bool old_bridge = IsSavegameVersionBefore(42);
+ if (IsSavegameVersionBefore(SLV_114)) {
+ bool fix_roadtypes = !IsSavegameVersionBefore(SLV_61);
+ bool old_bridge = IsSavegameVersionBefore(SLV_42);
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
@@ -1133,7 +1133,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(42)) {
+ if (IsSavegameVersionBefore(SLV_42)) {
Vehicle *v;
for (TileIndex t = 0; t < map_size; t++) {
@@ -1214,8 +1214,8 @@ bool AfterLoadGame()
}
}
- /* Railtype moved from m3 to m8 in version 200. */
- if (IsSavegameVersionBefore(200)) {
+ /* Railtype moved from m3 to m8 in version SLV_EXTEND_RAILTYPES. */
+ if (IsSavegameVersionBefore(SLV_EXTEND_RAILTYPES)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_RAILWAY:
@@ -1247,7 +1247,7 @@ bool AfterLoadGame()
}
/* Elrails got added in rev 24 */
- if (IsSavegameVersionBefore(24)) {
+ if (IsSavegameVersionBefore(SLV_24)) {
RailType min_rail = RAILTYPE_ELECTRIC;
Train *v;
@@ -1297,12 +1297,12 @@ bool AfterLoadGame()
/* In version 16.1 of the savegame a company can decide if trains, which get
* replaced, shall keep their old length. In all prior versions, just default
* to false */
- if (IsSavegameVersionBefore(16, 1)) {
+ if (IsSavegameVersionBefore(SLV_16, 1)) {
Company *c;
FOR_ALL_COMPANIES(c) c->settings.renew_keep_length = false;
}
- if (IsSavegameVersionBefore(123)) {
+ if (IsSavegameVersionBefore(SLV_123)) {
/* Waypoints became subclasses of stations ... */
MoveWaypointsToBaseStations();
/* ... and buoys were moved to waypoints. */
@@ -1311,7 +1311,7 @@ bool AfterLoadGame()
/* From version 15, we moved a semaphore bit from bit 2 to bit 3 in m4, making
* room for PBS. Now in version 21 move it back :P. */
- if (IsSavegameVersionBefore(21) && !IsSavegameVersionBefore(15)) {
+ if (IsSavegameVersionBefore(SLV_21) && !IsSavegameVersionBefore(SLV_15)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_RAILWAY:
@@ -1345,14 +1345,14 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(25)) {
+ if (IsSavegameVersionBefore(SLV_25)) {
RoadVehicle *rv;
FOR_ALL_ROADVEHICLES(rv) {
rv->vehstatus &= ~0x40;
}
}
- if (IsSavegameVersionBefore(26)) {
+ if (IsSavegameVersionBefore(SLV_26)) {
Station *st;
FOR_ALL_STATIONS(st) {
st->last_vehicle_type = VEH_INVALID;
@@ -1361,7 +1361,7 @@ bool AfterLoadGame()
YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK);
- if (IsSavegameVersionBefore(34)) {
+ if (IsSavegameVersionBefore(SLV_34)) {
Company *c;
FOR_ALL_COMPANIES(c) ResetCompanyLivery(c);
}
@@ -1372,11 +1372,11 @@ bool AfterLoadGame()
c->avail_roadtypes = GetCompanyRoadtypes(c->index);
}
- if (!IsSavegameVersionBefore(27)) AfterLoadStations();
+ if (!IsSavegameVersionBefore(SLV_27)) AfterLoadStations();
/* Time starts at 0 instead of 1920.
* Account for this in older games by adding an offset */
- if (IsSavegameVersionBefore(31)) {
+ if (IsSavegameVersionBefore(SLV_31)) {
Station *st;
Waypoint *wp;
Engine *e;
@@ -1401,7 +1401,7 @@ bool AfterLoadGame()
/* From 32 on we save the industry who made the farmland.
* To give this prettiness to old savegames, we remove all farmfields and
* plant new ones. */
- if (IsSavegameVersionBefore(32)) {
+ if (IsSavegameVersionBefore(SLV_32)) {
Industry *i;
for (TileIndex t = 0; t < map_size; t++) {
@@ -1421,7 +1421,7 @@ bool AfterLoadGame()
}
/* Setting no refit flags to all orders in savegames from before refit in orders were added */
- if (IsSavegameVersionBefore(36)) {
+ if (IsSavegameVersionBefore(SLV_36)) {
Order *order;
Vehicle *v;
@@ -1436,14 +1436,14 @@ bool AfterLoadGame()
/* from version 38 we have optional elrails, since we cannot know the
* preference of a user, let elrails enabled; it can be disabled manually */
- if (IsSavegameVersionBefore(38)) _settings_game.vehicle.disable_elrails = false;
+ if (IsSavegameVersionBefore(SLV_38)) _settings_game.vehicle.disable_elrails = false;
/* do the same as when elrails were enabled/disabled manually just now */
SettingsDisableElrail(_settings_game.vehicle.disable_elrails);
InitializeRailGUI();
/* From version 53, the map array was changed for house tiles to allow
* space for newhouses grf features. A new byte, m7, was also added. */
- if (IsSavegameVersionBefore(53)) {
+ if (IsSavegameVersionBefore(SLV_53)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_HOUSE)) {
if (GB(_m[t].m3, 6, 2) != TOWN_HOUSE_COMPLETED) {
@@ -1480,7 +1480,7 @@ bool AfterLoadGame()
/* Check and update house and town values */
UpdateHousesAndTowns();
- if (IsSavegameVersionBefore(43)) {
+ if (IsSavegameVersionBefore(SLV_43)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_INDUSTRY)) {
switch (GetIndustryGfx(t)) {
@@ -1507,7 +1507,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(45)) {
+ if (IsSavegameVersionBefore(SLV_45)) {
Vehicle *v;
/* Originally just the fact that some cargo had been paid for was
* stored to stop people cheating and cashing in several times. This
@@ -1521,14 +1521,14 @@ bool AfterLoadGame()
/* Buoys do now store the owner of the previous water tile, which can never
* be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */
- if (IsSavegameVersionBefore(46)) {
+ if (IsSavegameVersionBefore(SLV_46)) {
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
if ((wp->facilities & FACIL_DOCK) != 0 && IsTileOwner(wp->xy, OWNER_NONE) && TileHeight(wp->xy) == 0) SetTileOwner(wp->xy, OWNER_WATER);
}
}
- if (IsSavegameVersionBefore(50)) {
+ if (IsSavegameVersionBefore(SLV_50)) {
Aircraft *v;
/* Aircraft units changed from 8 mph to 1 km-ish/h */
FOR_ALL_AIRCRAFT(v) {
@@ -1541,9 +1541,9 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(49)) FOR_ALL_COMPANIES(c) c->face = ConvertFromOldCompanyManagerFace(c->face);
+ if (IsSavegameVersionBefore(SLV_49)) FOR_ALL_COMPANIES(c) c->face = ConvertFromOldCompanyManagerFace(c->face);
- if (IsSavegameVersionBefore(52)) {
+ if (IsSavegameVersionBefore(SLV_52)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_OBJECT) && _m[t].m5 == OBJECT_STATUE) {
_m[t].m2 = CalcClosestTownFromTile(t)->index;
@@ -1554,7 +1554,7 @@ bool AfterLoadGame()
/* A setting containing the proportion of towns that grow twice as
* fast was added in version 54. From version 56 this is now saved in the
* town as cities can be built specifically in the scenario editor. */
- if (IsSavegameVersionBefore(56)) {
+ if (IsSavegameVersionBefore(SLV_56)) {
Town *t;
FOR_ALL_TOWNS(t) {
@@ -1564,7 +1564,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(57)) {
+ if (IsSavegameVersionBefore(SLV_57)) {
Vehicle *v;
/* Added a FIFO queue of vehicles loading at stations */
FOR_ALL_VEHICLES(v) {
@@ -1578,7 +1578,7 @@ bool AfterLoadGame()
ClrBit(v->vehicle_flags, VF_LOADING_FINISHED);
}
}
- } else if (IsSavegameVersionBefore(59)) {
+ } else if (IsSavegameVersionBefore(SLV_59)) {
/* For some reason non-loading vehicles could be in the station's loading vehicle list */
Station *st;
@@ -1592,7 +1592,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(58)) {
+ if (IsSavegameVersionBefore(SLV_58)) {
/* Setting difficulty industry_density other than zero get bumped to +1
* since a new option (very low at position 1) has been added */
if (_settings_game.difficulty.industry_density > 0) {
@@ -1603,7 +1603,7 @@ bool AfterLoadGame()
_settings_game.difficulty.number_towns++;
}
- if (IsSavegameVersionBefore(64)) {
+ if (IsSavegameVersionBefore(SLV_64)) {
/* Since now we allow different signal types and variants on a single tile.
* Move signal states to m4 to make room and clone the signal type/variant. */
for (TileIndex t = 0; t < map_size; t++) {
@@ -1617,7 +1617,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(69)) {
+ if (IsSavegameVersionBefore(SLV_69)) {
/* In some old savegames a bit was cleared when it should not be cleared */
RoadVehicle *rv;
FOR_ALL_ROADVEHICLES(rv) {
@@ -1627,7 +1627,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(70)) {
+ if (IsSavegameVersionBefore(SLV_70)) {
/* Added variables to support newindustries */
Industry *i;
FOR_ALL_INDUSTRIES(i) i->founder = OWNER_NONE;
@@ -1635,7 +1635,7 @@ bool AfterLoadGame()
/* From version 82, old style canals (above sealevel (0), WATER owner) are no longer supported.
Replace the owner for those by OWNER_NONE. */
- if (IsSavegameVersionBefore(82)) {
+ if (IsSavegameVersionBefore(SLV_82)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_WATER) &&
GetWaterTileType(t) == WATER_TILE_CLEAR &&
@@ -1652,7 +1652,7 @@ bool AfterLoadGame()
* someone can remove canals owned by somebody else and it prevents
* making floods using the removal of ship depots.
*/
- if (IsSavegameVersionBefore(83)) {
+ if (IsSavegameVersionBefore(SLV_83)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsShipDepotTile(t)) {
_m[t].m4 = (TileHeight(t) == 0) ? OWNER_WATER : OWNER_NONE;
@@ -1660,7 +1660,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(74)) {
+ if (IsSavegameVersionBefore(SLV_74)) {
Station *st;
FOR_ALL_STATIONS(st) {
for (CargoID c = 0; c < NUM_CARGO; c++) {
@@ -1670,7 +1670,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(78)) {
+ if (IsSavegameVersionBefore(SLV_78)) {
Industry *i;
uint j;
FOR_ALL_INDUSTRIES(i) {
@@ -1688,7 +1688,7 @@ bool AfterLoadGame()
* grassy trees were always drawn fully grassy. Furthermore, trees on rough
* land used to have zero density, now they have full density. Therefore,
* make all grassy/rough land trees have a density of 3. */
- if (IsSavegameVersionBefore(81)) {
+ if (IsSavegameVersionBefore(SLV_81)) {
for (TileIndex t = 0; t < map_size; t++) {
if (GetTileType(t) == MP_TREES) {
TreeGround groundType = (TreeGround)GB(_m[t].m2, 4, 2);
@@ -1698,7 +1698,7 @@ bool AfterLoadGame()
}
- if (IsSavegameVersionBefore(93)) {
+ if (IsSavegameVersionBefore(SLV_93)) {
/* Rework of orders. */
Order *order;
FOR_ALL_ORDERS(order) order->ConvertFromOldSavegame();
@@ -1715,7 +1715,7 @@ bool AfterLoadGame()
FOR_VEHICLE_ORDERS(v, order) order->SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
}
}
- } else if (IsSavegameVersionBefore(94)) {
+ } else if (IsSavegameVersionBefore(SLV_94)) {
/* Unload and transfer are now mutual exclusive. */
Order *order;
FOR_ALL_ORDERS(order) {
@@ -1734,7 +1734,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(84)) {
+ if (IsSavegameVersionBefore(SLV_84)) {
/* Set all share owners to INVALID_COMPANY for
* 1) all inactive companies
* (when inactive companies were stored in the savegame - TTD, TTDP and some
@@ -1751,7 +1751,7 @@ bool AfterLoadGame()
}
/* The water class was moved/unified. */
- if (IsSavegameVersionBefore(146)) {
+ if (IsSavegameVersionBefore(SLV_146)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_STATION:
@@ -1785,7 +1785,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(86)) {
+ if (IsSavegameVersionBefore(SLV_86)) {
for (TileIndex t = 0; t < map_size; t++) {
/* Move river flag and update canals to use water class */
if (IsTileType(t, MP_WATER)) {
@@ -1816,7 +1816,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(87)) {
+ if (IsSavegameVersionBefore(SLV_87)) {
for (TileIndex t = 0; t < map_size; t++) {
/* skip oil rigs at borders! */
if ((IsTileType(t, MP_WATER) || IsBuoyTile(t)) &&
@@ -1854,13 +1854,13 @@ bool AfterLoadGame()
}
/* Convert old PF settings to new */
- if (_settings_game.pf.yapf.rail_use_yapf || IsSavegameVersionBefore(28)) {
+ if (_settings_game.pf.yapf.rail_use_yapf || IsSavegameVersionBefore(SLV_28)) {
_settings_game.pf.pathfinder_for_trains = VPF_YAPF;
} else {
_settings_game.pf.pathfinder_for_trains = VPF_NPF;
}
- if (_settings_game.pf.yapf.road_use_yapf || IsSavegameVersionBefore(28)) {
+ if (_settings_game.pf.yapf.road_use_yapf || IsSavegameVersionBefore(SLV_28)) {
_settings_game.pf.pathfinder_for_roadvehs = VPF_YAPF;
} else {
_settings_game.pf.pathfinder_for_roadvehs = VPF_NPF;
@@ -1873,7 +1873,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(88)) {
+ if (IsSavegameVersionBefore(SLV_88)) {
/* Profits are now with 8 bit fract */
Vehicle *v;
FOR_ALL_VEHICLES(v) {
@@ -1883,7 +1883,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(91)) {
+ if (IsSavegameVersionBefore(SLV_91)) {
/* Increase HouseAnimationFrame from 5 to 7 bits */
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_HOUSE) && GetHouseType(t) >= NEW_HOUSE_OFFSET) {
@@ -1893,7 +1893,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(62)) {
+ if (IsSavegameVersionBefore(SLV_62)) {
/* Remove all trams from savegames without tram support.
* There would be trams without tram track under causing crashes sooner or later. */
RoadVehicle *v;
@@ -1905,7 +1905,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(99)) {
+ if (IsSavegameVersionBefore(SLV_99)) {
for (TileIndex t = 0; t < map_size; t++) {
/* Set newly introduced WaterClass of industry tiles */
if (IsTileType(t, MP_STATION) && IsOilRig(t)) {
@@ -1929,7 +1929,7 @@ bool AfterLoadGame()
/* Move the signal variant back up one bit for PBS. We don't convert the old PBS
* format here, as an old layout wouldn't work properly anyway. To be safe, we
* clear any possible PBS reservations as well. */
- if (IsSavegameVersionBefore(100)) {
+ if (IsSavegameVersionBefore(SLV_100)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_RAILWAY:
@@ -1967,21 +1967,21 @@ bool AfterLoadGame()
}
/* Reserve all tracks trains are currently on. */
- if (IsSavegameVersionBefore(101)) {
+ if (IsSavegameVersionBefore(SLV_101)) {
const Train *t;
FOR_ALL_TRAINS(t) {
if (t->First() == t) t->ReserveTrackUnderConsist();
}
}
- if (IsSavegameVersionBefore(102)) {
+ if (IsSavegameVersionBefore(SLV_102)) {
for (TileIndex t = 0; t < map_size; t++) {
/* Now all crossings should be in correct state */
if (IsLevelCrossingTile(t)) UpdateLevelCrossing(t, false);
}
}
- if (IsSavegameVersionBefore(103)) {
+ if (IsSavegameVersionBefore(SLV_103)) {
/* Non-town-owned roads now store the closest town */
UpdateNearestTownForRoadTiles(false);
@@ -1999,7 +1999,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(104)) {
+ if (IsSavegameVersionBefore(SLV_104)) {
Aircraft *a;
FOR_ALL_AIRCRAFT(a) {
/* Set engine_type of shadow and rotor */
@@ -2026,7 +2026,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(112)) {
+ if (IsSavegameVersionBefore(SLV_112)) {
for (TileIndex t = 0; t < map_size; t++) {
/* Check for HQ bit being set, instead of using map accessor,
* since we've already changed it code-wise */
@@ -2038,7 +2038,7 @@ bool AfterLoadGame()
}
}
}
- if (IsSavegameVersionBefore(144)) {
+ if (IsSavegameVersionBefore(SLV_144)) {
for (TileIndex t = 0; t < map_size; t++) {
if (!IsTileType(t, MP_OBJECT)) continue;
@@ -2053,7 +2053,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(147) && Object::GetNumItems() == 0) {
+ if (IsSavegameVersionBefore(SLV_147) && Object::GetNumItems() == 0) {
/* Make real objects for object tiles. */
for (TileIndex t = 0; t < map_size; t++) {
if (!IsTileType(t, MP_OBJECT)) continue;
@@ -2097,7 +2097,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(113)) {
+ if (IsSavegameVersionBefore(SLV_113)) {
/* allow_town_roads is added, set it if town_layout wasn't TL_NO_ROADS */
if (_settings_game.economy.town_layout == 0) { // was TL_NO_ROADS
_settings_game.economy.allow_town_roads = false;
@@ -2127,7 +2127,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(114)) {
+ if (IsSavegameVersionBefore(SLV_114)) {
/* There could be (deleted) stations with invalid owner, set owner to OWNER NONE.
* The conversion affects oil rigs and buoys too, but it doesn't matter as
* they have st->owner == OWNER_NONE already. */
@@ -2138,14 +2138,14 @@ bool AfterLoadGame()
}
/* Trains could now stop in a specific location. */
- if (IsSavegameVersionBefore(117)) {
+ if (IsSavegameVersionBefore(SLV_117)) {
Order *o;
FOR_ALL_ORDERS(o) {
if (o->IsType(OT_GOTO_STATION)) o->SetStopLocation(OSL_PLATFORM_FAR_END);
}
}
- if (IsSavegameVersionBefore(120)) {
+ if (IsSavegameVersionBefore(SLV_120)) {
extern VehicleDefaultSettings _old_vds;
Company *c;
FOR_ALL_COMPANIES(c) {
@@ -2153,7 +2153,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(121)) {
+ if (IsSavegameVersionBefore(SLV_121)) {
/* Delete small ufos heading for non-existing vehicles */
Vehicle *v;
FOR_ALL_DISASTERVEHICLES(v) {
@@ -2185,7 +2185,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(122)) {
+ if (IsSavegameVersionBefore(SLV_122)) {
/* Animated tiles would sometimes not be actually animated or
* in case of old savegames duplicate. */
@@ -2208,7 +2208,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(124) && !IsSavegameVersionBefore(1)) {
+ if (IsSavegameVersionBefore(SLV_124) && !IsSavegameVersionBefore(SLV_1)) {
/* The train station tile area was added, but for really old (TTDPatch) it's already valid. */
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
@@ -2224,7 +2224,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(125)) {
+ if (IsSavegameVersionBefore(SLV_125)) {
/* Convert old subsidies */
Subsidy *s;
FOR_ALL_SUBSIDIES(s) {
@@ -2284,7 +2284,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(126)) {
+ if (IsSavegameVersionBefore(SLV_126)) {
/* Recompute inflation based on old unround loan limit
* Note: Max loan is 500000. With an inflation of 4% across 170 years
* that results in a max loan of about 0.7 * 2^31.
@@ -2302,7 +2302,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(128)) {
+ if (IsSavegameVersionBefore(SLV_128)) {
const Depot *d;
FOR_ALL_DEPOTS(d) {
_m[d->xy].m2 = d->index;
@@ -2312,7 +2312,7 @@ bool AfterLoadGame()
/* The behaviour of force_proceed has been changed. Now
* it counts signals instead of some random time out. */
- if (IsSavegameVersionBefore(131)) {
+ if (IsSavegameVersionBefore(SLV_131)) {
Train *t;
FOR_ALL_TRAINS(t) {
if (t->force_proceed != TFP_NONE) {
@@ -2323,7 +2323,7 @@ bool AfterLoadGame()
/* The bits for the tree ground and tree density have
* been swapped (m2 bits 7..6 and 5..4. */
- if (IsSavegameVersionBefore(135)) {
+ if (IsSavegameVersionBefore(SLV_135)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_CLEAR)) {
if (GetRawClearGround(t) == CLEAR_SNOW) {
@@ -2343,7 +2343,7 @@ bool AfterLoadGame()
}
/* Wait counter and load/unload ticks got split. */
- if (IsSavegameVersionBefore(136)) {
+ if (IsSavegameVersionBefore(SLV_136)) {
Aircraft *a;
FOR_ALL_AIRCRAFT(a) {
a->turn_counter = a->current_order.IsType(OT_LOADING) ? 0 : a->load_unload_ticks;
@@ -2356,7 +2356,7 @@ bool AfterLoadGame()
}
/* Airport tile animation uses animation frame instead of other graphics id */
- if (IsSavegameVersionBefore(137)) {
+ if (IsSavegameVersionBefore(SLV_137)) {
struct AirportTileConversion {
byte old_start;
byte num_frames;
@@ -2392,7 +2392,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(140)) {
+ if (IsSavegameVersionBefore(SLV_140)) {
Station *st;
FOR_ALL_STATIONS(st) {
if (st->airport.tile != INVALID_TILE) {
@@ -2402,7 +2402,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(141)) {
+ if (IsSavegameVersionBefore(SLV_141)) {
for (TileIndex t = 0; t < map_size; t++) {
/* Reset tropic zone for VOID tiles, they shall not have any. */
if (IsTileType(t, MP_VOID)) SetTropicZone(t, TROPICZONE_NORMAL);
@@ -2417,7 +2417,7 @@ bool AfterLoadGame()
FOR_ALL_DEPOTS(d) MakeDefaultName(d);
}
- if (IsSavegameVersionBefore(142)) {
+ if (IsSavegameVersionBefore(SLV_142)) {
Depot *d;
FOR_ALL_DEPOTS(d) d->build_date = _date;
}
@@ -2427,7 +2427,7 @@ bool AfterLoadGame()
* another airport in the same station so we don't allow that anymore.
* For old savegames with such aircraft we just throw them in the air and
* treat the aircraft like they were flying already. */
- if (IsSavegameVersionBefore(146)) {
+ if (IsSavegameVersionBefore(SLV_146)) {
Aircraft *v;
FOR_ALL_AIRCRAFT(v) {
if (!v->IsNormalAircraft()) continue;
@@ -2446,7 +2446,7 @@ bool AfterLoadGame()
}
/* Move the animation frame to the same location (m7) for all objects. */
- if (IsSavegameVersionBefore(147)) {
+ if (IsSavegameVersionBefore(SLV_147)) {
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_HOUSE:
@@ -2478,7 +2478,7 @@ bool AfterLoadGame()
}
/* Add (random) colour to all objects. */
- if (IsSavegameVersionBefore(148)) {
+ if (IsSavegameVersionBefore(SLV_148)) {
Object *o;
FOR_ALL_OBJECTS(o) {
Owner owner = GetTileOwner(o->location.tile);
@@ -2486,7 +2486,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(149)) {
+ if (IsSavegameVersionBefore(SLV_149)) {
for (TileIndex t = 0; t < map_size; t++) {
if (!IsTileType(t, MP_STATION)) continue;
if (!IsBuoy(t) && !IsOilRig(t) && !(IsDock(t) && IsTileFlat(t))) {
@@ -2508,7 +2508,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(152)) {
+ if (IsSavegameVersionBefore(SLV_152)) {
_industry_builder.Reset(); // Initialize industry build data.
/* The moment vehicles go from hidden to visible changed. This means
@@ -2577,7 +2577,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(153)) {
+ if (IsSavegameVersionBefore(SLV_153)) {
RoadVehicle *rv;
FOR_ALL_ROADVEHICLES(rv) {
if (rv->state == RVSB_IN_DEPOT || rv->state == RVSB_WORMHOLE) continue;
@@ -2592,7 +2592,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(156)) {
+ if (IsSavegameVersionBefore(SLV_156)) {
/* The train's pathfinder lost flag got moved. */
Train *t;
FOR_ALL_TRAINS(t) {
@@ -2610,7 +2610,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(158)) {
+ if (IsSavegameVersionBefore(SLV_158)) {
Vehicle *v;
FOR_ALL_VEHICLES(v) {
switch (v->type) {
@@ -2707,14 +2707,14 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(159)) {
+ if (IsSavegameVersionBefore(SLV_159)) {
/* If the savegame is old (before version 100), then the value of 255
* for these settings did not mean "disabled". As such everything
* before then did reverse.
* To simplify stuff we disable all turning around or we do not
* disable anything at all. So, if some reversing was disabled we
* will keep reversing disabled, otherwise it'll be turned on. */
- _settings_game.pf.reverse_at_signals = IsSavegameVersionBefore(100) || (_settings_game.pf.wait_oneway_signal != 255 && _settings_game.pf.wait_twoway_signal != 255 && _settings_game.pf.wait_for_pbs_path != 255);
+ _settings_game.pf.reverse_at_signals = IsSavegameVersionBefore(SLV_100) || (_settings_game.pf.wait_oneway_signal != 255 && _settings_game.pf.wait_twoway_signal != 255 && _settings_game.pf.wait_for_pbs_path != 255);
Train *t;
FOR_ALL_TRAINS(t) {
@@ -2722,7 +2722,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(160)) {
+ if (IsSavegameVersionBefore(SLV_160)) {
/* Setting difficulty industry_density other than zero get bumped to +1
* since a new option (minimal at position 1) has been added */
if (_settings_game.difficulty.industry_density > 0) {
@@ -2730,10 +2730,10 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(161)) {
+ if (IsSavegameVersionBefore(SLV_161)) {
/* Before savegame version 161, persistent storages were not stored in a pool. */
- if (!IsSavegameVersionBefore(76)) {
+ if (!IsSavegameVersionBefore(SLV_76)) {
Industry *ind;
FOR_ALL_INDUSTRIES(ind) {
assert(ind->psa != NULL);
@@ -2756,7 +2756,7 @@ bool AfterLoadGame()
}
}
- if (!IsSavegameVersionBefore(145)) {
+ if (!IsSavegameVersionBefore(SLV_145)) {
Station *st;
FOR_ALL_STATIONS(st) {
if (!(st->facilities & FACIL_AIRPORT)) continue;
@@ -2783,11 +2783,11 @@ bool AfterLoadGame()
}
/* This triggers only when old snow_lines were copied into the snow_line_height. */
- if (IsSavegameVersionBefore(164) && _settings_game.game_creation.snow_line_height >= MIN_SNOWLINE_HEIGHT * TILE_HEIGHT) {
+ if (IsSavegameVersionBefore(SLV_164) && _settings_game.game_creation.snow_line_height >= MIN_SNOWLINE_HEIGHT * TILE_HEIGHT) {
_settings_game.game_creation.snow_line_height /= TILE_HEIGHT;
}
- if (IsSavegameVersionBefore(164) && !IsSavegameVersionBefore(32)) {
+ if (IsSavegameVersionBefore(SLV_164) && !IsSavegameVersionBefore(SLV_32)) {
/* We store 4 fences in the field tiles instead of only SE and SW. */
for (TileIndex t = 0; t < map_size; t++) {
if (!IsTileType(t, MP_CLEAR) && !IsTileType(t, MP_TREES)) continue;
@@ -2806,9 +2806,9 @@ bool AfterLoadGame()
}
/* The center of train vehicles was changed, fix up spacing. */
- if (IsSavegameVersionBefore(164)) FixupTrainLengths();
+ if (IsSavegameVersionBefore(SLV_164)) FixupTrainLengths();
- if (IsSavegameVersionBefore(165)) {
+ if (IsSavegameVersionBefore(SLV_165)) {
Town *t;
FOR_ALL_TOWNS(t) {
@@ -2826,7 +2826,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(165)) {
+ if (IsSavegameVersionBefore(SLV_165)) {
/* Adjust zoom level to account for new levels */
_saved_scrollpos_zoom = _saved_scrollpos_zoom + ZOOM_LVL_SHIFT;
_saved_scrollpos_x *= ZOOM_LVL_BASE;
@@ -2838,7 +2838,7 @@ bool AfterLoadGame()
* which is done by StartupEngines(). */
if (gcf_res != GLC_ALL_GOOD) StartupEngines();
- if (IsSavegameVersionBefore(166)) {
+ if (IsSavegameVersionBefore(SLV_166)) {
/* Update cargo acceptance map of towns. */
for (TileIndex t = 0; t < map_size; t++) {
if (!IsTileType(t, MP_HOUSE)) continue;
@@ -2852,7 +2852,7 @@ bool AfterLoadGame()
}
/* The road owner of standard road stops was not properly accounted for. */
- if (IsSavegameVersionBefore(172)) {
+ if (IsSavegameVersionBefore(SLV_172)) {
for (TileIndex t = 0; t < map_size; t++) {
if (!IsStandardRoadStopTile(t)) continue;
Owner o = GetTileOwner(t);
@@ -2861,13 +2861,13 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(175)) {
+ if (IsSavegameVersionBefore(SLV_175)) {
/* Introduced tree planting limit. */
Company *c;
FOR_ALL_COMPANIES(c) c->tree_limit = _settings_game.construction.tree_frame_burst << 16;
}
- if (IsSavegameVersionBefore(177)) {
+ if (IsSavegameVersionBefore(SLV_177)) {
/* Fix too high inflation rates */
if (_economy.inflation_prices > MAX_INFLATION) _economy.inflation_prices = MAX_INFLATION;
if (_economy.inflation_payment > MAX_INFLATION) _economy.inflation_payment = MAX_INFLATION;
@@ -2878,13 +2878,13 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(178)) {
+ if (IsSavegameVersionBefore(SLV_178)) {
extern uint8 _old_diff_level;
/* Initialise script settings profile */
_settings_game.script.settings_profile = IsInsideMM(_old_diff_level, SP_BEGIN, SP_END) ? _old_diff_level : (uint)SP_MEDIUM;
}
- if (IsSavegameVersionBefore(182)) {
+ if (IsSavegameVersionBefore(SLV_182)) {
Aircraft *v;
/* Aircraft acceleration variable was bonkers */
FOR_ALL_AIRCRAFT(v) {
@@ -2903,7 +2903,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(184)) {
+ if (IsSavegameVersionBefore(SLV_184)) {
/* The global units configuration is split up in multiple configurations. */
extern uint8 _old_units;
_settings_game.locale.units_velocity = Clamp(_old_units, 0, 2);
@@ -2914,7 +2914,7 @@ bool AfterLoadGame()
_settings_game.locale.units_height = Clamp(_old_units, 0, 2);
}
- if (IsSavegameVersionBefore(186)) {
+ if (IsSavegameVersionBefore(SLV_186)) {
/* Move ObjectType from map to pool */
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_OBJECT)) {
@@ -2925,7 +2925,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(188)) {
+ if (IsSavegameVersionBefore(SLV_188)) {
/* Fix articulated road vehicles.
* Some curves were shorter than other curves.
* Now they have the same length, but that means that trailing articulated parts will
@@ -2988,9 +2988,9 @@ bool AfterLoadGame()
* Only keep order-backups for network clients (and when replaying).
* If we are a network server or not networking, then we just loaded a previously
* saved-by-server savegame. There are no clients with a backup, so clear it.
- * Furthermore before savegame version 192 the actual content was always corrupt.
+ * Furthermore before savegame version SLV_192 the actual content was always corrupt.
*/
- if (!_networking || _network_server || IsSavegameVersionBefore(192)) {
+ if (!_networking || _network_server || IsSavegameVersionBefore(SLV_192)) {
#ifndef DEBUG_DUMP_COMMANDS
/* Note: We cannot use CleanPool since that skips part of the destructor
* and then leaks un-reachable Orders in the order pool. */
@@ -3001,7 +3001,7 @@ bool AfterLoadGame()
#endif
}
- if (IsSavegameVersionBefore(198)) {
+ if (IsSavegameVersionBefore(SLV_198)) {
/* Convert towns growth_rate and grow_counter to ticks */
Town *t;
FOR_ALL_TOWNS(t) {
@@ -3015,7 +3015,7 @@ bool AfterLoadGame()
}
}
- if (IsSavegameVersionBefore(202)) {
+ if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) {
/* Make sure added industry cargo slots are cleared */
Industry *i;
FOR_ALL_INDUSTRIES(i) {
@@ -3046,7 +3046,7 @@ bool AfterLoadGame()
}
/* Station acceptance is some kind of cache */
- if (IsSavegameVersionBefore(127)) {
+ if (IsSavegameVersionBefore(SLV_127)) {
Station *st;
FOR_ALL_STATIONS(st) UpdateStationAcceptance(st, false);
}
diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp
index e8b5339c0d..2492bb666a 100644
--- a/src/saveload/ai_sl.cpp
+++ b/src/saveload/ai_sl.cpp
@@ -30,8 +30,8 @@ static bool _ai_saveload_is_random;
static const SaveLoad _ai_company[] = {
SLEG_STR(_ai_saveload_name, SLE_STRB),
SLEG_STR(_ai_saveload_settings, SLE_STRB),
- SLEG_CONDVAR(_ai_saveload_version, SLE_UINT32, 108, SL_MAX_VERSION),
- SLEG_CONDVAR(_ai_saveload_is_random, SLE_BOOL, 136, SL_MAX_VERSION),
+ SLEG_CONDVAR(_ai_saveload_version, SLE_UINT32, SLV_108, SL_MAX_VERSION),
+ SLEG_CONDVAR(_ai_saveload_is_random, SLE_BOOL, SLV_136, SL_MAX_VERSION),
SLE_END()
};
diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp
index 2152c42e34..c54c4724ab 100644
--- a/src/saveload/animated_tile_sl.cpp
+++ b/src/saveload/animated_tile_sl.cpp
@@ -35,10 +35,10 @@ static void Save_ANIT()
static void Load_ANIT()
{
/* Before version 80 we did NOT have a variable length animated tile table */
- if (IsSavegameVersionBefore(80)) {
+ if (IsSavegameVersionBefore(SLV_80)) {
/* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */
TileIndex anim_list[256];
- SlArray(anim_list, 256, IsSavegameVersionBefore(6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32);
+ SlArray(anim_list, 256, IsSavegameVersionBefore(SLV_6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32);
for (int i = 0; i < 256; i++) {
if (anim_list[i] == 0) break;
diff --git a/src/saveload/autoreplace_sl.cpp b/src/saveload/autoreplace_sl.cpp
index 99e945503d..1798df1ada 100644
--- a/src/saveload/autoreplace_sl.cpp
+++ b/src/saveload/autoreplace_sl.cpp
@@ -21,8 +21,8 @@ static const SaveLoad _engine_renew_desc[] = {
SLE_VAR(EngineRenew, to, SLE_UINT16),
SLE_REF(EngineRenew, next, REF_ENGINE_RENEWS),
- SLE_CONDVAR(EngineRenew, group_id, SLE_UINT16, 60, SL_MAX_VERSION),
- SLE_CONDVAR(EngineRenew, replace_when_old, SLE_BOOL, 175, SL_MAX_VERSION),
+ SLE_CONDVAR(EngineRenew, group_id, SLE_UINT16, SLV_60, SL_MAX_VERSION),
+ SLE_CONDVAR(EngineRenew, replace_when_old, SLE_BOOL, SLV_175, SL_MAX_VERSION),
SLE_END()
};
@@ -45,9 +45,9 @@ static void Load_ERNW()
SlObject(er, _engine_renew_desc);
/* Advanced vehicle lists, ungrouped vehicles got added */
- if (IsSavegameVersionBefore(60)) {
+ if (IsSavegameVersionBefore(SLV_60)) {
er->group_id = ALL_GROUP;
- } else if (IsSavegameVersionBefore(71)) {
+ } else if (IsSavegameVersionBefore(SLV_71)) {
if (er->group_id == DEFAULT_GROUP) er->group_id = ALL_GROUP;
}
}
diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp
index dc8d4145e3..e3f372e9a8 100644
--- a/src/saveload/cargopacket_sl.cpp
+++ b/src/saveload/cargopacket_sl.cpp
@@ -22,7 +22,7 @@
*/
/* static */ void CargoPacket::AfterLoad()
{
- if (IsSavegameVersionBefore(44)) {
+ if (IsSavegameVersionBefore(SLV_44)) {
Vehicle *v;
/* If we remove a station while cargo from it is still en route, payment calculation will assume
* 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy
@@ -59,7 +59,7 @@
}
}
- if (IsSavegameVersionBefore(120)) {
+ if (IsSavegameVersionBefore(SLV_120)) {
/* CargoPacket's source should be either INVALID_STATION or a valid station */
CargoPacket *cp;
FOR_ALL_CARGOPACKETS(cp) {
@@ -67,7 +67,7 @@
}
}
- if (!IsSavegameVersionBefore(68)) {
+ if (!IsSavegameVersionBefore(SLV_68)) {
/* Only since version 68 we have cargo packets. Savegames from before used
* 'new CargoPacket' + cargolist.Append so their caches are already
* correct and do not need rebuilding. */
@@ -80,7 +80,7 @@
}
}
- if (IsSavegameVersionBefore(181)) {
+ if (IsSavegameVersionBefore(SLV_181)) {
Vehicle *v;
FOR_ALL_VEHICLES(v) v->cargo.KeepAll();
}
@@ -100,11 +100,11 @@ const SaveLoad *GetCargoPacketDesc()
SLE_VAR(CargoPacket, count, SLE_UINT16),
SLE_VAR(CargoPacket, days_in_transit, SLE_UINT8),
SLE_VAR(CargoPacket, feeder_share, SLE_INT64),
- SLE_CONDVAR(CargoPacket, source_type, SLE_UINT8, 125, SL_MAX_VERSION),
- SLE_CONDVAR(CargoPacket, source_id, SLE_UINT16, 125, SL_MAX_VERSION),
+ SLE_CONDVAR(CargoPacket, source_type, SLE_UINT8, SLV_125, SL_MAX_VERSION),
+ SLE_CONDVAR(CargoPacket, source_id, SLE_UINT16, SLV_125, SL_MAX_VERSION),
/* Used to be paid_for, but that got changed. */
- SLE_CONDNULL(1, 0, 120),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_121),
SLE_END()
};
diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp
index ce388e2141..a51f8081b0 100644
--- a/src/saveload/company_sl.cpp
+++ b/src/saveload/company_sl.cpp
@@ -242,116 +242,116 @@ void AfterLoadCompanyStats()
static const SaveLoad _company_desc[] = {
SLE_VAR(CompanyProperties, name_2, SLE_UINT32),
SLE_VAR(CompanyProperties, name_1, SLE_STRINGID),
- SLE_CONDSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
+ SLE_CONDSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
SLE_VAR(CompanyProperties, president_name_1, SLE_STRINGID),
SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32),
- SLE_CONDSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
+ SLE_CONDSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
SLE_VAR(CompanyProperties, face, SLE_UINT32),
/* money was changed to a 64 bit field in savegame version 1. */
- SLE_CONDVAR(CompanyProperties, money, SLE_VAR_I64 | SLE_FILE_I32, 0, 0),
- SLE_CONDVAR(CompanyProperties, money, SLE_INT64, 1, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, money, SLE_VAR_I64 | SLE_FILE_I32, SL_MIN_VERSION, SLV_1),
+ SLE_CONDVAR(CompanyProperties, money, SLE_INT64, SLV_1, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyProperties, current_loan, SLE_VAR_I64 | SLE_FILE_I32, 0, 64),
- SLE_CONDVAR(CompanyProperties, current_loan, SLE_INT64, 65, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, current_loan, SLE_VAR_I64 | SLE_FILE_I32, SL_MIN_VERSION, SLV_65),
+ SLE_CONDVAR(CompanyProperties, current_loan, SLE_INT64, SLV_65, SL_MAX_VERSION),
SLE_VAR(CompanyProperties, colour, SLE_UINT8),
SLE_VAR(CompanyProperties, money_fraction, SLE_UINT8),
- SLE_CONDNULL(1, 0, 57), ///< avail_railtypes
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_58), ///< avail_railtypes
SLE_VAR(CompanyProperties, block_preview, SLE_UINT8),
- SLE_CONDNULL(2, 0, 93), ///< cargo_types
- SLE_CONDNULL(4, 94, 169), ///< cargo_types
- SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_INT32, 31, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_94), ///< cargo_types
+ SLE_CONDNULL(4, SLV_94, SLV_170), ///< cargo_types
+ SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLE_ARR(CompanyProperties, share_owners, SLE_UINT8, 4),
SLE_VAR(CompanyProperties, num_valid_stat_ent, SLE_UINT8),
SLE_VAR(CompanyProperties, months_of_bankruptcy, SLE_UINT8),
- SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_FILE_U8 | SLE_VAR_U16, 0, 103),
- SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_UINT16, 104, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104),
+ SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_UINT16, SLV_104, SL_MAX_VERSION),
SLE_VAR(CompanyProperties, bankrupt_timeout, SLE_INT16),
- SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, 0, 64),
- SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_INT64, 65, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, SL_MIN_VERSION, SLV_65),
+ SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_INT64, SLV_65, SL_MAX_VERSION),
/* yearly expenses was changed to 64-bit in savegame version 2. */
- SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 1),
- SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, 2, SL_MAX_VERSION),
+ SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, SL_MIN_VERSION, SLV_2),
+ SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, SLV_2, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, 2, SL_MAX_VERSION),
- SLE_CONDNULL(1, 107, 111), ///< is_noai
- SLE_CONDNULL(1, 4, 99),
+ SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, SLV_2, SL_MAX_VERSION),
+ SLE_CONDNULL(1, SLV_107, SLV_112), ///< is_noai
+ SLE_CONDNULL(1, SLV_4, SLV_100),
- SLE_CONDVAR(CompanyProperties, terraform_limit, SLE_UINT32, 156, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyProperties, clear_limit, SLE_UINT32, 156, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyProperties, tree_limit, SLE_UINT32, 175, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, terraform_limit, SLE_UINT32, SLV_156, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, clear_limit, SLE_UINT32, SLV_156, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyProperties, tree_limit, SLE_UINT32, SLV_175, SL_MAX_VERSION),
SLE_END()
};
static const SaveLoad _company_settings_desc[] = {
/* Engine renewal settings */
- SLE_CONDNULL(512, 16, 18),
- SLE_CONDREF(Company, engine_renew_list, REF_ENGINE_RENEWS, 19, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.engine_renew, SLE_BOOL, 16, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16, 16, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.engine_renew_money, SLE_UINT32, 16, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.renew_keep_length, SLE_BOOL, 2, SL_MAX_VERSION),
+ SLE_CONDNULL(512, SLV_16, SLV_19),
+ SLE_CONDREF(Company, engine_renew_list, REF_ENGINE_RENEWS, SLV_19, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.engine_renew, SLE_BOOL, SLV_16, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16, SLV_16, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.engine_renew_money, SLE_UINT32, SLV_16, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.renew_keep_length, SLE_BOOL, SLV_2, SL_MAX_VERSION),
/* Default vehicle settings */
- SLE_CONDVAR(Company, settings.vehicle.servint_ispercent, SLE_BOOL, 120, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.vehicle.servint_trains, SLE_UINT16, 120, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.vehicle.servint_roadveh, SLE_UINT16, 120, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.vehicle.servint_aircraft, SLE_UINT16, 120, SL_MAX_VERSION),
- SLE_CONDVAR(Company, settings.vehicle.servint_ships, SLE_UINT16, 120, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.vehicle.servint_ispercent, SLE_BOOL, SLV_120, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.vehicle.servint_trains, SLE_UINT16, SLV_120, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.vehicle.servint_roadveh, SLE_UINT16, SLV_120, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.vehicle.servint_aircraft, SLE_UINT16, SLV_120, SL_MAX_VERSION),
+ SLE_CONDVAR(Company, settings.vehicle.servint_ships, SLE_UINT16, SLV_120, SL_MAX_VERSION),
- SLE_CONDNULL(63, 2, 143), // old reserved space
+ SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _company_settings_skip_desc[] = {
/* Engine renewal settings */
- SLE_CONDNULL(512, 16, 18),
- SLE_CONDNULL(2, 19, 68), // engine_renew_list
- SLE_CONDNULL(4, 69, SL_MAX_VERSION), // engine_renew_list
- SLE_CONDNULL(1, 16, SL_MAX_VERSION), // settings.engine_renew
- SLE_CONDNULL(2, 16, SL_MAX_VERSION), // settings.engine_renew_months
- SLE_CONDNULL(4, 16, SL_MAX_VERSION), // settings.engine_renew_money
- SLE_CONDNULL(1, 2, SL_MAX_VERSION), // settings.renew_keep_length
+ SLE_CONDNULL(512, SLV_16, SLV_19),
+ SLE_CONDNULL(2, SLV_19, SLV_69), // engine_renew_list
+ SLE_CONDNULL(4, SLV_69, SL_MAX_VERSION), // engine_renew_list
+ SLE_CONDNULL(1, SLV_16, SL_MAX_VERSION), // settings.engine_renew
+ SLE_CONDNULL(2, SLV_16, SL_MAX_VERSION), // settings.engine_renew_months
+ SLE_CONDNULL(4, SLV_16, SL_MAX_VERSION), // settings.engine_renew_money
+ SLE_CONDNULL(1, SLV_2, SL_MAX_VERSION), // settings.renew_keep_length
/* Default vehicle settings */
- SLE_CONDNULL(1, 120, SL_MAX_VERSION), // settings.vehicle.servint_ispercent
- SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_trains
- SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_roadveh
- SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_aircraft
- SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_ships
+ SLE_CONDNULL(1, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_ispercent
+ SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_trains
+ SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_roadveh
+ SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_aircraft
+ SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_ships
- SLE_CONDNULL(63, 2, 143), // old reserved space
+ SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _company_economy_desc[] = {
/* these were changed to 64-bit in savegame format 2 */
- SLE_CONDVAR(CompanyEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
- SLE_CONDVAR(CompanyEconomyEntry, income, SLE_INT64, 2, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
- SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_INT64, 2, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
- SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2),
+ SLE_CONDVAR(CompanyEconomyEntry, income, SLE_INT64, SLV_2, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2),
+ SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_INT64, SLV_2, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2),
+ SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, SLV_2, SL_MAX_VERSION),
- SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, 0, 169),
- SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, 170, 198),
- SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, 199, SL_MAX_VERSION),
+ SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, SL_MIN_VERSION, SLV_170),
+ SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, SLV_170, SLV_EXTEND_CARGOTYPES),
+ SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION),
SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32),
SLE_END()
@@ -363,49 +363,49 @@ struct CompanyOldAI {
};
static const SaveLoad _company_ai_desc[] = {
- SLE_CONDNULL(2, 0, 106),
- SLE_CONDNULL(2, 0, 12),
- SLE_CONDNULL(4, 13, 106),
- SLE_CONDNULL(8, 0, 106),
- SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, 0, 106),
- SLE_CONDNULL(3, 0, 106),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_13),
+ SLE_CONDNULL(4, SLV_13, SLV_107),
+ SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107),
+ SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, SL_MIN_VERSION, SLV_107),
+ SLE_CONDNULL(3, SL_MIN_VERSION, SLV_107),
- SLE_CONDNULL(2, 0, 5),
- SLE_CONDNULL(4, 6, 106),
- SLE_CONDNULL(2, 0, 5),
- SLE_CONDNULL(4, 6, 106),
- SLE_CONDNULL(2, 0, 106),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
+ SLE_CONDNULL(4, SLV_6, SLV_107),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
+ SLE_CONDNULL(4, SLV_6, SLV_107),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107),
- SLE_CONDNULL(2, 0, 5),
- SLE_CONDNULL(4, 6, 106),
- SLE_CONDNULL(2, 0, 5),
- SLE_CONDNULL(4, 6, 106),
- SLE_CONDNULL(2, 0, 106),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
+ SLE_CONDNULL(4, SLV_6, SLV_107),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
+ SLE_CONDNULL(4, SLV_6, SLV_107),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107),
- SLE_CONDNULL(2, 0, 68),
- SLE_CONDNULL(4, 69, 106),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_69),
+ SLE_CONDNULL(4, SLV_69, SLV_107),
- SLE_CONDNULL(18, 0, 106),
- SLE_CONDNULL(20, 0, 106),
- SLE_CONDNULL(32, 0, 106),
+ SLE_CONDNULL(18, SL_MIN_VERSION, SLV_107),
+ SLE_CONDNULL(20, SL_MIN_VERSION, SLV_107),
+ SLE_CONDNULL(32, SL_MIN_VERSION, SLV_107),
- SLE_CONDNULL(64, 2, 106),
+ SLE_CONDNULL(64, SLV_2, SLV_107),
SLE_END()
};
static const SaveLoad _company_ai_build_rec_desc[] = {
- SLE_CONDNULL(2, 0, 5),
- SLE_CONDNULL(4, 6, 106),
- SLE_CONDNULL(2, 0, 5),
- SLE_CONDNULL(4, 6, 106),
- SLE_CONDNULL(8, 0, 106),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
+ SLE_CONDNULL(4, SLV_6, SLV_107),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
+ SLE_CONDNULL(4, SLV_6, SLV_107),
+ SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107),
SLE_END()
};
static const SaveLoad _company_livery_desc[] = {
- SLE_CONDVAR(Livery, in_use, SLE_BOOL, 34, SL_MAX_VERSION),
- SLE_CONDVAR(Livery, colour1, SLE_UINT8, 34, SL_MAX_VERSION),
- SLE_CONDVAR(Livery, colour2, SLE_UINT8, 34, SL_MAX_VERSION),
+ SLE_CONDVAR(Livery, in_use, SLE_UINT8, SLV_34, SL_MAX_VERSION),
+ SLE_CONDVAR(Livery, colour1, SLE_UINT8, SLV_34, SL_MAX_VERSION),
+ SLE_CONDVAR(Livery, colour2, SLE_UINT8, SLV_34, SL_MAX_VERSION),
SLE_END()
};
@@ -422,7 +422,7 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops)
}
/* Keep backwards compatible for savegames, so load the old AI block */
- if (IsSavegameVersionBefore(107) && cprops->is_ai) {
+ if (IsSavegameVersionBefore(SLV_107) && cprops->is_ai) {
CompanyOldAI old_ai;
char nothing;
@@ -442,10 +442,19 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops)
}
/* Write each livery entry. */
- int num_liveries = IsSavegameVersionBefore(63) ? LS_END - 4 : (IsSavegameVersionBefore(85) ? LS_END - 2: LS_END);
+ int num_liveries = IsSavegameVersionBefore(SLV_63) ? LS_END - 4 : (IsSavegameVersionBefore(SLV_85) ? LS_END - 2: LS_END);
+ bool update_in_use = IsSavegameVersionBefore(SLV_GROUP_LIVERIES);
if (c != NULL) {
for (i = 0; i < num_liveries; i++) {
SlObject(&c->livery[i], _company_livery_desc);
+ if (update_in_use && i != LS_DEFAULT) {
+ if (c->livery[i].in_use == 0) {
+ c->livery[i].colour1 = c->livery[LS_DEFAULT].colour1;
+ c->livery[i].colour2 = c->livery[LS_DEFAULT].colour2;
+ } else {
+ c->livery[i].in_use = 3;
+ }
+ }
}
if (num_liveries < LS_END) {
@@ -501,7 +510,7 @@ static void Check_PLYR()
SaveLoad_PLYR_common(NULL, cprops);
/* We do not load old custom names */
- if (IsSavegameVersionBefore(84)) {
+ if (IsSavegameVersionBefore(SLV_84)) {
if (GetStringTab(cprops->name_1) == TEXT_TAB_OLD_CUSTOM) {
cprops->name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE;
}
diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp
index 861a541730..b92417693c 100644
--- a/src/saveload/depot_sl.cpp
+++ b/src/saveload/depot_sl.cpp
@@ -20,13 +20,13 @@
static TownID _town_index;
static const SaveLoad _depot_desc[] = {
- SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Depot, xy, SLE_UINT32, 6, SL_MAX_VERSION),
- SLEG_CONDVAR(_town_index, SLE_UINT16, 0, 140),
- SLE_CONDREF(Depot, town, REF_TOWN, 141, SL_MAX_VERSION),
- SLE_CONDVAR(Depot, town_cn, SLE_UINT16, 141, SL_MAX_VERSION),
- SLE_CONDSTR(Depot, name, SLE_STR, 0, 141, SL_MAX_VERSION),
- SLE_CONDVAR(Depot, build_date, SLE_INT32, 142, SL_MAX_VERSION),
+ SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Depot, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLEG_CONDVAR(_town_index, SLE_UINT16, SL_MIN_VERSION, SLV_141),
+ SLE_CONDREF(Depot, town, REF_TOWN, SLV_141, SL_MAX_VERSION),
+ SLE_CONDVAR(Depot, town_cn, SLE_UINT16, SLV_141, SL_MAX_VERSION),
+ SLE_CONDSTR(Depot, name, SLE_STR, 0, SLV_141, SL_MAX_VERSION),
+ SLE_CONDVAR(Depot, build_date, SLE_INT32, SLV_142, SL_MAX_VERSION),
SLE_END()
};
@@ -49,7 +49,7 @@ static void Load_DEPT()
SlObject(depot, _depot_desc);
/* Set the town 'pointer' so we can restore it later. */
- if (IsSavegameVersionBefore(141)) depot->town = (Town *)(size_t)_town_index;
+ if (IsSavegameVersionBefore(SLV_141)) depot->town = (Town *)(size_t)_town_index;
}
}
@@ -59,7 +59,7 @@ static void Ptrs_DEPT()
FOR_ALL_DEPOTS(depot) {
SlObject(depot, _depot_desc);
- if (IsSavegameVersionBefore(141)) depot->town = Town::Get((size_t)depot->town);
+ if (IsSavegameVersionBefore(SLV_141)) depot->town = Town::Get((size_t)depot->town);
}
}
diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp
index 0effb5b2ff..0ddab13514 100644
--- a/src/saveload/economy_sl.cpp
+++ b/src/saveload/economy_sl.cpp
@@ -21,7 +21,7 @@
static void Load_PRIC()
{
/* Old games store 49 base prices, very old games store them as int32 */
- int vt = IsSavegameVersionBefore(65) ? SLE_FILE_I32 : SLE_FILE_I64;
+ int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64;
SlArray(NULL, 49, vt | SLE_VAR_NULL);
SlArray(NULL, 49, SLE_FILE_U16 | SLE_VAR_NULL);
}
@@ -29,25 +29,25 @@ static void Load_PRIC()
/** Cargo payment rates in pre 126 savegames */
static void Load_CAPR()
{
- uint num_cargo = IsSavegameVersionBefore(55) ? 12 : IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
- int vt = IsSavegameVersionBefore(65) ? SLE_FILE_I32 : SLE_FILE_I64;
+ uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
+ int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64;
SlArray(NULL, num_cargo, vt | SLE_VAR_NULL);
SlArray(NULL, num_cargo, SLE_FILE_U16 | SLE_VAR_NULL);
}
static const SaveLoad _economy_desc[] = {
- SLE_CONDNULL(4, 0, 64), // max_loan
- SLE_CONDNULL(8, 65, 143), // max_loan
- SLE_CONDVAR(Economy, old_max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
- SLE_CONDVAR(Economy, old_max_loan_unround, SLE_INT64, 65, 125),
- SLE_CONDVAR(Economy, old_max_loan_unround_fract, SLE_UINT16, 70, 125),
- SLE_CONDVAR(Economy, inflation_prices, SLE_UINT64, 126, SL_MAX_VERSION),
- SLE_CONDVAR(Economy, inflation_payment, SLE_UINT64, 126, SL_MAX_VERSION),
+ SLE_CONDNULL(4, SL_MIN_VERSION, SLV_65), // max_loan
+ SLE_CONDNULL(8, SLV_65, SLV_144), // max_loan
+ SLE_CONDVAR(Economy, old_max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65),
+ SLE_CONDVAR(Economy, old_max_loan_unround, SLE_INT64, SLV_65, SLV_126),
+ SLE_CONDVAR(Economy, old_max_loan_unround_fract, SLE_UINT16, SLV_70, SLV_126),
+ SLE_CONDVAR(Economy, inflation_prices, SLE_UINT64, SLV_126, SL_MAX_VERSION),
+ SLE_CONDVAR(Economy, inflation_payment, SLE_UINT64, SLV_126, SL_MAX_VERSION),
SLE_VAR(Economy, fluct, SLE_INT16),
SLE_VAR(Economy, interest_rate, SLE_UINT8),
SLE_VAR(Economy, infl_amount, SLE_UINT8),
SLE_VAR(Economy, infl_amount_pr, SLE_UINT8),
- SLE_CONDVAR(Economy, industry_daily_change_counter, SLE_UINT32, 102, SL_MAX_VERSION),
+ SLE_CONDVAR(Economy, industry_daily_change_counter, SLE_UINT32, SLV_102, SL_MAX_VERSION),
SLE_END()
};
@@ -61,14 +61,14 @@ static void Save_ECMY()
static void Load_ECMY()
{
SlObject(&_economy, _economy_desc);
- StartupIndustryDailyChanges(IsSavegameVersionBefore(102)); // old savegames will need to be initialized
+ StartupIndustryDailyChanges(IsSavegameVersionBefore(SLV_102)); // old savegames will need to be initialized
}
static const SaveLoad _cargopayment_desc[] = {
SLE_REF(CargoPayment, front, REF_VEHICLE),
SLE_VAR(CargoPayment, route_profit, SLE_INT64),
SLE_VAR(CargoPayment, visual_profit, SLE_INT64),
- SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, 181, SL_MAX_VERSION),
+ SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, SLV_181, SL_MAX_VERSION),
SLE_END()
};
diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp
index a568fead7b..5221d1bbdc 100644
--- a/src/saveload/engine_sl.cpp
+++ b/src/saveload/engine_sl.cpp
@@ -18,10 +18,10 @@
#include "../safeguards.h"
static const SaveLoad _engine_desc[] = {
- SLE_CONDVAR(Engine, intro_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Engine, intro_date, SLE_INT32, 31, SL_MAX_VERSION),
- SLE_CONDVAR(Engine, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Engine, age, SLE_INT32, 31, SL_MAX_VERSION),
+ SLE_CONDVAR(Engine, intro_date, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Engine, intro_date, SLE_INT32, SLV_31, SL_MAX_VERSION),
+ SLE_CONDVAR(Engine, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Engine, age, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLE_VAR(Engine, reliability, SLE_UINT16),
SLE_VAR(Engine, reliability_spd_dec, SLE_UINT16),
SLE_VAR(Engine, reliability_start, SLE_UINT16),
@@ -31,19 +31,19 @@ static const SaveLoad _engine_desc[] = {
SLE_VAR(Engine, duration_phase_2, SLE_UINT16),
SLE_VAR(Engine, duration_phase_3, SLE_UINT16),
- SLE_CONDNULL(1, 0, 120),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_121),
SLE_VAR(Engine, flags, SLE_UINT8),
- SLE_CONDNULL(1, 0, 178), // old preview_company_rank
- SLE_CONDVAR(Engine, preview_asked, SLE_UINT16, 179, SL_MAX_VERSION),
- SLE_CONDVAR(Engine, preview_company, SLE_UINT8, 179, SL_MAX_VERSION),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_179), // old preview_company_rank
+ SLE_CONDVAR(Engine, preview_asked, SLE_UINT16, SLV_179, SL_MAX_VERSION),
+ SLE_CONDVAR(Engine, preview_company, SLE_UINT8, SLV_179, SL_MAX_VERSION),
SLE_VAR(Engine, preview_wait, SLE_UINT8),
- SLE_CONDNULL(1, 0, 44),
- SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, 0, 103),
- SLE_CONDVAR(Engine, company_avail, SLE_UINT16, 104, SL_MAX_VERSION),
- SLE_CONDVAR(Engine, company_hidden, SLE_UINT16, 193, SL_MAX_VERSION),
- SLE_CONDSTR(Engine, name, SLE_STR, 0, 84, SL_MAX_VERSION),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45),
+ SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104),
+ SLE_CONDVAR(Engine, company_avail, SLE_UINT16, SLV_104, SL_MAX_VERSION),
+ SLE_CONDVAR(Engine, company_hidden, SLE_UINT16, SLV_193, SL_MAX_VERSION),
+ SLE_CONDSTR(Engine, name, SLE_STR, 0, SLV_84, SL_MAX_VERSION),
- SLE_CONDNULL(16, 2, 143), // old reserved space
+ SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
SLE_END()
};
@@ -105,7 +105,7 @@ static void Load_ENGN()
Engine *e = GetTempDataEngine(index);
SlObject(e, _engine_desc);
- if (IsSavegameVersionBefore(179)) {
+ if (IsSavegameVersionBefore(SLV_179)) {
/* preview_company_rank was replaced with preview_company and preview_asked.
* Just cancel any previews. */
e->flags &= ~4; // ENGINE_OFFER_WINDOW_OPEN
diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp
index f818eca137..d1c502d3be 100644
--- a/src/saveload/gamelog_sl.cpp
+++ b/src/saveload/gamelog_sl.cpp
@@ -29,7 +29,7 @@ static const SaveLoad _glog_mode_desc[] = {
};
static const SaveLoad _glog_revision_desc[] = {
- SLE_ARR(LoggedChange, revision.text, SLE_UINT8, NETWORK_REVISION_LENGTH),
+ SLE_ARR(LoggedChange, revision.text, SLE_UINT8, GAMELOG_REVISION_LENGTH),
SLE_VAR(LoggedChange, revision.newgrf, SLE_UINT32),
SLE_VAR(LoggedChange, revision.slver, SLE_UINT16),
SLE_VAR(LoggedChange, revision.modified, SLE_UINT8),
diff --git a/src/saveload/goal_sl.cpp b/src/saveload/goal_sl.cpp
index 4d1441787d..a8cdc2305d 100644
--- a/src/saveload/goal_sl.cpp
+++ b/src/saveload/goal_sl.cpp
@@ -21,8 +21,8 @@ static const SaveLoad _goals_desc[] = {
SLE_VAR(Goal, type, SLE_FILE_U16 | SLE_VAR_U8),
SLE_VAR(Goal, dst, SLE_UINT32),
SLE_STR(Goal, text, SLE_STR | SLF_ALLOW_CONTROL, 0),
- SLE_CONDSTR(Goal, progress, SLE_STR | SLF_ALLOW_CONTROL, 0, 182, SL_MAX_VERSION),
- SLE_CONDVAR(Goal, completed, SLE_BOOL, 182, SL_MAX_VERSION),
+ SLE_CONDSTR(Goal, progress, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_182, SL_MAX_VERSION),
+ SLE_CONDVAR(Goal, completed, SLE_BOOL, SLV_182, SL_MAX_VERSION),
SLE_END()
};
diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp
index 93734f80f6..025c8ee3a7 100644
--- a/src/saveload/group_sl.cpp
+++ b/src/saveload/group_sl.cpp
@@ -11,19 +11,23 @@
#include "../stdafx.h"
#include "../group.h"
+#include "../company_base.h"
#include "saveload.h"
#include "../safeguards.h"
static const SaveLoad _group_desc[] = {
- SLE_CONDVAR(Group, name, SLE_NAME, 0, 83),
- SLE_CONDSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
- SLE_CONDNULL(2, 0, 163), // num_vehicle
+ SLE_CONDVAR(Group, name, SLE_NAME, SL_MIN_VERSION, SLV_84),
+ SLE_CONDSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), // num_vehicle
SLE_VAR(Group, owner, SLE_UINT8),
SLE_VAR(Group, vehicle_type, SLE_UINT8),
SLE_VAR(Group, replace_protection, SLE_BOOL),
- SLE_CONDVAR(Group, parent, SLE_UINT16, 189, SL_MAX_VERSION),
+ SLE_CONDVAR(Group, livery.in_use, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION),
+ SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION),
+ SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION),
+ SLE_CONDVAR(Group, parent, SLE_UINT16, SLV_189, SL_MAX_VERSION),
SLE_END()
};
@@ -46,7 +50,13 @@ static void Load_GRPS()
Group *g = new (index) Group();
SlObject(g, _group_desc);
- if (IsSavegameVersionBefore(189)) g->parent = INVALID_GROUP;
+ if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP;
+
+ if (IsSavegameVersionBefore(SLV_GROUP_LIVERIES)) {
+ const Company *c = Company::Get(g->owner);
+ g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
+ g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
+ }
}
}
diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp
index a9c84e62ab..9e81861c4e 100644
--- a/src/saveload/industry_sl.cpp
+++ b/src/saveload/industry_sl.cpp
@@ -20,58 +20,58 @@
static OldPersistentStorage _old_ind_persistent_storage;
static const SaveLoad _industry_desc[] = {
- SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Industry, location.tile, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Industry, location.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLE_VAR(Industry, location.w, SLE_FILE_U8 | SLE_VAR_U16),
SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16),
SLE_REF(Industry, town, REF_TOWN),
- SLE_CONDNULL( 2, 0, 60), ///< used to be industry's produced_cargo
- SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, 201),
- SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, 201),
- SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, 0, 201),
- SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, 0, 201),
- SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, 202, SL_MAX_VERSION),
- SLE_CONDNULL( 3, 0, 60), ///< used to be industry's accepts_cargo
- SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, 201),
- SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION),
+ SLE_CONDNULL( 2, SL_MIN_VERSION, SLV_61), ///< used to be industry's produced_cargo
+ SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDNULL( 3, SL_MIN_VERSION, SLV_61), ///< used to be industry's accepts_cargo
+ SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
SLE_VAR(Industry, prod_level, SLE_UINT8),
- SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, 0, 201),
- SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, 0, 201),
- SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, 0, 201),
- SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, 0, 201),
- SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION),
- SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, 0, 201),
- SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
SLE_VAR(Industry, counter, SLE_UINT16),
SLE_VAR(Industry, type, SLE_UINT8),
SLE_VAR(Industry, owner, SLE_UINT8),
SLE_VAR(Industry, random_colour, SLE_UINT8),
- SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, 31, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8),
- SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION),
- SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION),
- SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION),
- SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, 70, 201),
- SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, 202, SL_MAX_VERSION),
- SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, founder, SLE_UINT8, SLV_70, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, construction_date, SLE_INT32, SLV_70, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, construction_type, SLE_UINT8, SLV_70, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
+ SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, SLV_73, SL_MAX_VERSION),
- SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 160),
- SLE_CONDREF(Industry, psa, REF_STORAGE, 161, SL_MAX_VERSION),
+ SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, SLV_76, SLV_161),
+ SLE_CONDREF(Industry, psa, REF_STORAGE, SLV_161, SL_MAX_VERSION),
- SLE_CONDNULL(1, 82, 196), // random_triggers
- SLE_CONDVAR(Industry, random, SLE_UINT16, 82, SL_MAX_VERSION),
+ SLE_CONDNULL(1, SLV_82, SLV_197), // random_triggers
+ SLE_CONDVAR(Industry, random, SLE_UINT16, SLV_82, SL_MAX_VERSION),
- SLE_CONDNULL(32, 2, 143), // old reserved space
+ SLE_CONDNULL(32, SLV_2, SLV_144), // old reserved space
SLE_END()
};
@@ -108,7 +108,7 @@ static void Load_INDY()
SlObject(i, _industry_desc);
/* Before savegame version 161, persistent storages were not stored in a pool. */
- if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(76)) {
+ if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_76)) {
/* Store the old persistent storage. The GRFID will be added later. */
assert(PersistentStorage::CanAllocateItem());
i->psa = new PersistentStorage(0, 0, 0);
diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp
index 6044316a47..76390a0101 100644
--- a/src/saveload/linkgraph_sl.cpp
+++ b/src/saveload/linkgraph_sl.cpp
@@ -109,7 +109,7 @@ const SaveLoad *GetLinkGraphScheduleDesc()
* SaveLoad desc for a link graph node.
*/
static const SaveLoad _node_desc[] = {
- SLE_CONDVAR(Node, xy, SLE_UINT32, 191, SL_MAX_VERSION),
+ SLE_CONDVAR(Node, xy, SLE_UINT32, SLV_191, SL_MAX_VERSION),
SLE_VAR(Node, supply, SLE_UINT32),
SLE_VAR(Node, demand, SLE_UINT32),
SLE_VAR(Node, station, SLE_UINT16),
@@ -121,11 +121,11 @@ static const SaveLoad _node_desc[] = {
* SaveLoad desc for a link graph edge.
*/
static const SaveLoad _edge_desc[] = {
- SLE_CONDNULL(4, 0, 190), // distance
+ SLE_CONDNULL(4, SL_MIN_VERSION, SLV_191), // distance
SLE_VAR(Edge, capacity, SLE_UINT32),
SLE_VAR(Edge, usage, SLE_UINT32),
SLE_VAR(Edge, last_unrestricted_update, SLE_INT32),
- SLE_CONDVAR(Edge, last_restricted_update, SLE_INT32, 187, SL_MAX_VERSION),
+ SLE_CONDVAR(Edge, last_restricted_update, SLE_INT32, SLV_187, SL_MAX_VERSION),
SLE_VAR(Edge, next_edge, SLE_UINT16),
SLE_END()
};
@@ -140,7 +140,7 @@ void SaveLoad_LinkGraph(LinkGraph &lg)
for (NodeID from = 0; from < size; ++from) {
Node *node = &lg.nodes[from];
SlObject(node, _node_desc);
- if (IsSavegameVersionBefore(191)) {
+ if (IsSavegameVersionBefore(SLV_191)) {
/* We used to save the full matrix ... */
for (NodeID to = 0; to < size; ++to) {
SlObject(&lg.edges[from][to], _edge_desc);
@@ -229,7 +229,7 @@ static void Load_LGRS()
*/
void AfterLoadLinkGraphs()
{
- if (IsSavegameVersionBefore(191)) {
+ if (IsSavegameVersionBefore(SLV_191)) {
LinkGraph *lg;
FOR_ALL_LINK_GRAPHS(lg) {
for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) {
diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp
index 693ddb7ce3..5402ecc0d2 100644
--- a/src/saveload/map_sl.cpp
+++ b/src/saveload/map_sl.cpp
@@ -22,8 +22,8 @@ static uint32 _map_dim_x;
static uint32 _map_dim_y;
static const SaveLoadGlobVarList _map_dimensions[] = {
- SLEG_CONDVAR(_map_dim_x, SLE_UINT32, 6, SL_MAX_VERSION),
- SLEG_CONDVAR(_map_dim_y, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLEG_CONDVAR(_map_dim_x, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLEG_CONDVAR(_map_dim_y, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLEG_END()
};
@@ -126,7 +126,7 @@ static void Load_MAP2()
for (TileIndex i = 0; i != size;) {
SlArray(buf, MAP_SL_BUF_SIZE,
/* In those versions the m2 was 8 bits */
- IsSavegameVersionBefore(5) ? SLE_FILE_U8 | SLE_VAR_U16 : SLE_UINT16
+ IsSavegameVersionBefore(SLV_5) ? SLE_FILE_U8 | SLE_VAR_U16 : SLE_UINT16
);
for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) _m[i++].m2 = buf[j];
}
@@ -218,7 +218,7 @@ static void Load_MAP6()
SmallStackSafeStackAlloc buf;
TileIndex size = MapSize();
- if (IsSavegameVersionBefore(42)) {
+ if (IsSavegameVersionBefore(SLV_42)) {
for (TileIndex i = 0; i != size;) {
/* 1024, otherwise we overflow on 64x64 maps! */
SlArray(buf, 1024, SLE_UINT8);
diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp
index c7bd31e81e..cca3365b57 100644
--- a/src/saveload/misc_sl.cpp
+++ b/src/saveload/misc_sl.cpp
@@ -71,52 +71,52 @@ void ResetViewportAfterLoadGame()
byte _age_cargo_skip_counter; ///< Skip aging of cargo? Used before savegame version 162.
static const SaveLoadGlobVarList _date_desc[] = {
- SLEG_CONDVAR(_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLEG_CONDVAR(_date, SLE_INT32, 31, SL_MAX_VERSION),
+ SLEG_CONDVAR(_date, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLEG_CONDVAR(_date, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLEG_VAR(_date_fract, SLE_UINT16),
SLEG_VAR(_tick_counter, SLE_UINT16),
- SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
- SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, 0, 161),
- SLE_CONDNULL(1, 0, 45),
- SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLEG_CONDVAR(_cur_tileloop_tile, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157), // _vehicle_id_ctr_day
+ SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, SL_MIN_VERSION, SLV_162),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46),
+ SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLEG_CONDVAR(_cur_tileloop_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLEG_VAR(_disaster_delay, SLE_UINT16),
- SLE_CONDNULL(2, 0, 119),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120),
SLEG_VAR(_random.state[0], SLE_UINT32),
SLEG_VAR(_random.state[1], SLE_UINT32),
- SLE_CONDNULL(1, 0, 9),
- SLE_CONDNULL(4, 10, 119),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_10),
+ SLE_CONDNULL(4, SLV_10, SLV_120),
SLEG_VAR(_cur_company_tick_index, SLE_FILE_U8 | SLE_VAR_U32),
- SLEG_CONDVAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32, 0, 108),
- SLEG_CONDVAR(_next_competitor_start, SLE_UINT32, 109, SL_MAX_VERSION),
+ SLEG_CONDVAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_109),
+ SLEG_CONDVAR(_next_competitor_start, SLE_UINT32, SLV_109, SL_MAX_VERSION),
SLEG_VAR(_trees_tick_ctr, SLE_UINT8),
- SLEG_CONDVAR(_pause_mode, SLE_UINT8, 4, SL_MAX_VERSION),
- SLE_CONDNULL(4, 11, 119),
+ SLEG_CONDVAR(_pause_mode, SLE_UINT8, SLV_4, SL_MAX_VERSION),
+ SLE_CONDNULL(4, SLV_11, SLV_120),
SLEG_END()
};
static const SaveLoadGlobVarList _date_check_desc[] = {
- SLEG_CONDVAR(_load_check_data.current_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, 31, SL_MAX_VERSION),
+ SLEG_CONDVAR(_load_check_data.current_date, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLE_NULL(2), // _date_fract
SLE_NULL(2), // _tick_counter
- SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
- SLE_CONDNULL(1, 0, 161), // _age_cargo_skip_counter
- SLE_CONDNULL(1, 0, 45),
- SLE_CONDNULL(2, 0, 5), // _cur_tileloop_tile
- SLE_CONDNULL(4, 6, SL_MAX_VERSION), // _cur_tileloop_tile
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157), // _vehicle_id_ctr_day
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_162), // _age_cargo_skip_counter
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), // _cur_tileloop_tile
+ SLE_CONDNULL(4, SLV_6, SL_MAX_VERSION), // _cur_tileloop_tile
SLE_NULL(2), // _disaster_delay
- SLE_CONDNULL(2, 0, 119),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120),
SLE_NULL(4), // _random.state[0]
SLE_NULL(4), // _random.state[1]
- SLE_CONDNULL(1, 0, 9),
- SLE_CONDNULL(4, 10, 119),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_10),
+ SLE_CONDNULL(4, SLV_10, SLV_120),
SLE_NULL(1), // _cur_company_tick_index
- SLE_CONDNULL(2, 0, 108), // _next_competitor_start
- SLE_CONDNULL(4, 109, SL_MAX_VERSION), // _next_competitor_start
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_109), // _next_competitor_start
+ SLE_CONDNULL(4, SLV_109, SL_MAX_VERSION), // _next_competitor_start
SLE_NULL(1), // _trees_tick_ctr
- SLE_CONDNULL(1, 4, SL_MAX_VERSION), // _pause_mode
- SLE_CONDNULL(4, 11, 119),
+ SLE_CONDNULL(1, SLV_4, SL_MAX_VERSION), // _pause_mode
+ SLE_CONDNULL(4, SLV_11, SLV_120),
SLEG_END()
};
@@ -130,17 +130,17 @@ static void SaveLoad_DATE()
static void Check_DATE()
{
SlGlobList(_date_check_desc);
- if (IsSavegameVersionBefore(31)) {
+ if (IsSavegameVersionBefore(SLV_31)) {
_load_check_data.current_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
}
}
static const SaveLoadGlobVarList _view_desc[] = {
- SLEG_CONDVAR(_saved_scrollpos_x, SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
- SLEG_CONDVAR(_saved_scrollpos_x, SLE_INT32, 6, SL_MAX_VERSION),
- SLEG_CONDVAR(_saved_scrollpos_y, SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
- SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, 6, SL_MAX_VERSION),
+ SLEG_CONDVAR(_saved_scrollpos_x, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
+ SLEG_CONDVAR(_saved_scrollpos_x, SLE_INT32, SLV_6, SL_MAX_VERSION),
+ SLEG_CONDVAR(_saved_scrollpos_y, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
+ SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, SLV_6, SL_MAX_VERSION),
SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8),
SLEG_END()
};
diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp
index de261f02aa..e40b45926c 100644
--- a/src/saveload/newgrf_sl.cpp
+++ b/src/saveload/newgrf_sl.cpp
@@ -61,10 +61,10 @@ static const SaveLoad _grfconfig_desc[] = {
SLE_STR(GRFConfig, filename, SLE_STR, 0x40),
SLE_VAR(GRFConfig, ident.grfid, SLE_UINT32),
SLE_ARR(GRFConfig, ident.md5sum, SLE_UINT8, 16),
- SLE_CONDVAR(GRFConfig, version, SLE_UINT32, 151, SL_MAX_VERSION),
+ SLE_CONDVAR(GRFConfig, version, SLE_UINT32, SLV_151, SL_MAX_VERSION),
SLE_ARR(GRFConfig, param, SLE_UINT32, 0x80),
SLE_VAR(GRFConfig, num_params, SLE_UINT8),
- SLE_CONDVAR(GRFConfig, palette, SLE_UINT8, 101, SL_MAX_VERSION),
+ SLE_CONDVAR(GRFConfig, palette, SLE_UINT8, SLV_101, SL_MAX_VERSION),
SLE_END()
};
@@ -87,7 +87,7 @@ static void Load_NGRF_common(GRFConfig *&grfconfig)
while (SlIterateArray() != -1) {
GRFConfig *c = new GRFConfig();
SlObject(c, _grfconfig_desc);
- if (IsSavegameVersionBefore(101)) c->SetSuitablePalette();
+ if (IsSavegameVersionBefore(SLV_101)) c->SetSuitablePalette();
AppendToGRFConfigList(&grfconfig, c);
}
}
diff --git a/src/saveload/object_sl.cpp b/src/saveload/object_sl.cpp
index dfb1d2cbf5..6b0b99e479 100644
--- a/src/saveload/object_sl.cpp
+++ b/src/saveload/object_sl.cpp
@@ -24,9 +24,9 @@ static const SaveLoad _object_desc[] = {
SLE_VAR(Object, location.h, SLE_FILE_U8 | SLE_VAR_U16),
SLE_REF(Object, town, REF_TOWN),
SLE_VAR(Object, build_date, SLE_UINT32),
- SLE_CONDVAR(Object, colour, SLE_UINT8, 148, SL_MAX_VERSION),
- SLE_CONDVAR(Object, view, SLE_UINT8, 155, SL_MAX_VERSION),
- SLE_CONDVAR(Object, type, SLE_UINT16, 186, SL_MAX_VERSION),
+ SLE_CONDVAR(Object, colour, SLE_UINT8, SLV_148, SL_MAX_VERSION),
+ SLE_CONDVAR(Object, view, SLE_UINT8, SLV_155, SL_MAX_VERSION),
+ SLE_CONDVAR(Object, type, SLE_UINT16, SLV_186, SL_MAX_VERSION),
SLE_END()
};
@@ -56,7 +56,7 @@ static void Ptrs_OBJS()
Object *o;
FOR_ALL_OBJECTS(o) {
SlObject(o, _object_desc);
- if (IsSavegameVersionBefore(148) && !IsTileType(o->location.tile, MP_OBJECT)) {
+ if (IsSavegameVersionBefore(SLV_148) && !IsTileType(o->location.tile, MP_OBJECT)) {
/* Due to a small bug stale objects could remain. */
delete o;
}
diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp
index d55d577cb6..b89514d479 100644
--- a/src/saveload/order_sl.cpp
+++ b/src/saveload/order_sl.cpp
@@ -28,7 +28,7 @@ void Order::ConvertFromOldSavegame()
this->flags = 0;
/* First handle non-stop - use value from savegame if possible, else use value from config file */
- if (_settings_client.gui.sg_new_nonstop || (IsSavegameVersionBefore(22) && _savegame_type != SGT_TTO && _savegame_type != SGT_TTD && _settings_client.gui.new_nonstop)) {
+ if (_settings_client.gui.sg_new_nonstop || (IsSavegameVersionBefore(SLV_22) && _savegame_type != SGT_TTO && _savegame_type != SGT_TTD && _settings_client.gui.new_nonstop)) {
/* OFB_NON_STOP */
this->SetNonStopType((old_flags & 8) ? ONSF_NO_STOP_AT_ANY_STATION : ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
} else {
@@ -49,7 +49,7 @@ void Order::ConvertFromOldSavegame()
this->SetLoadType(OLF_LOAD_IF_POSSIBLE);
} else {
/* old OTTD versions stored full_load_any in config file - assume it was enabled when loading */
- this->SetLoadType(_settings_client.gui.sg_full_load_any || IsSavegameVersionBefore(22) ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD);
+ this->SetLoadType(_settings_client.gui.sg_full_load_any || IsSavegameVersionBefore(SLV_22) ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD);
}
if (this->IsType(OT_GOTO_STATION)) this->SetStopLocation(OSL_PLATFORM_FAR_END);
@@ -108,15 +108,15 @@ const SaveLoad *GetOrderDescription()
SLE_VAR(Order, flags, SLE_UINT8),
SLE_VAR(Order, dest, SLE_UINT16),
SLE_REF(Order, next, REF_ORDER),
- SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION),
- SLE_CONDNULL(1, 36, 181), // refit_subtype
- SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION),
- SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION),
- SLE_CONDVAR(Order, max_speed, SLE_UINT16, 172, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, SLV_36, SL_MAX_VERSION),
+ SLE_CONDNULL(1, SLV_36, SLV_182), // refit_subtype
+ SLE_CONDVAR(Order, wait_time, SLE_UINT16, SLV_67, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, travel_time, SLE_UINT16, SLV_67, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, max_speed, SLE_UINT16, SLV_172, SL_MAX_VERSION),
/* Leftover from the minor savegame version stuff
* We will never use those free bytes, but we have to keep this line to allow loading of old savegames */
- SLE_CONDNULL(10, 5, 35),
+ SLE_CONDNULL(10, SLV_5, SLV_36),
SLE_END()
};
@@ -135,12 +135,12 @@ static void Save_ORDR()
static void Load_ORDR()
{
- if (IsSavegameVersionBefore(5, 2)) {
+ if (IsSavegameVersionBefore(SLV_5, 2)) {
/* Version older than 5.2 did not have a ->next pointer. Convert them
* (in the old days, the orderlist was 5000 items big) */
size_t len = SlGetFieldLength();
- if (IsSavegameVersionBefore(5)) {
+ if (IsSavegameVersionBefore(SLV_5)) {
/* Pre-version 5 had another layout for orders
* (uint16 instead of uint32) */
len /= sizeof(uint16);
@@ -154,7 +154,7 @@ static void Load_ORDR()
}
free(orders);
- } else if (IsSavegameVersionBefore(5, 2)) {
+ } else if (IsSavegameVersionBefore(SLV_5, 2)) {
len /= sizeof(uint32);
uint32 *orders = MallocT(len + 1);
@@ -186,7 +186,7 @@ static void Load_ORDR()
while ((index = SlIterateArray()) != -1) {
Order *order = new (index) Order();
SlObject(order, GetOrderDescription());
- if (IsSavegameVersionBefore(190)) {
+ if (IsSavegameVersionBefore(SLV_190)) {
order->SetTravelTimetabled(order->GetTravelTime() > 0);
order->SetWaitTimetabled(order->GetWaitTime() > 0);
}
@@ -197,7 +197,7 @@ static void Load_ORDR()
static void Ptrs_ORDR()
{
/* Orders from old savegames have pointers corrected in Load_ORDR */
- if (IsSavegameVersionBefore(5, 2)) return;
+ if (IsSavegameVersionBefore(SLV_5, 2)) return;
Order *o;
@@ -253,18 +253,18 @@ const SaveLoad *GetOrderBackupDescription()
SLE_VAR(OrderBackup, user, SLE_UINT32),
SLE_VAR(OrderBackup, tile, SLE_UINT32),
SLE_VAR(OrderBackup, group, SLE_UINT16),
- SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 0, 191),
- SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, 192, SL_MAX_VERSION),
+ SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, SL_MIN_VERSION, SLV_192),
+ SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, SLV_192, SL_MAX_VERSION),
SLE_STR(OrderBackup, name, SLE_STR, 0),
- SLE_CONDNULL(2, 0, 191), // clone (2 bytes of pointer, i.e. garbage)
- SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, 192, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_192), // clone (2 bytes of pointer, i.e. garbage)
+ SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, SLV_192, SL_MAX_VERSION),
SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8),
- SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, 176, SL_MAX_VERSION),
- SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, 176, SL_MAX_VERSION),
- SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, 176, SL_MAX_VERSION),
- SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, 176, SL_MAX_VERSION),
- SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 176, 179),
- SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_UINT16, 180, SL_MAX_VERSION),
+ SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, SLV_176, SL_MAX_VERSION),
+ SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, SLV_176, SL_MAX_VERSION),
+ SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, SLV_176, SL_MAX_VERSION),
+ SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, SLV_176, SL_MAX_VERSION),
+ SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, SLV_176, SLV_180),
+ SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_UINT16, SLV_180, SL_MAX_VERSION),
SLE_REF(OrderBackup, orders, REF_ORDER),
SLE_END()
};
diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp
index 8cf5ee36b6..9be9506b15 100644
--- a/src/saveload/saveload.cpp
+++ b/src/saveload/saveload.cpp
@@ -21,6 +21,8 @@
* repeat this until everything is done, and flush any remaining output to file
*
*/
+#include
+
#include "../stdafx.h"
#include "../debug.h"
#include "../station_base.h"
@@ -51,236 +53,16 @@
#include "../safeguards.h"
-/*
- * Previous savegame versions, the trunk revision where they were
- * introduced and the released version that had that particular
- * savegame version.
- * Up to savegame version 18 there is a minor version as well.
- *
- * 1.0 0.1.x, 0.2.x
- * 2.0 0.3.0
- * 2.1 0.3.1, 0.3.2
- * 3.x lost
- * 4.0 1
- * 4.1 122 0.3.3, 0.3.4
- * 4.2 1222 0.3.5
- * 4.3 1417
- * 4.4 1426
- * 5.0 1429
- * 5.1 1440
- * 5.2 1525 0.3.6
- * 6.0 1721
- * 6.1 1768
- * 7.0 1770
- * 8.0 1786
- * 9.0 1909
- * 10.0 2030
- * 11.0 2033
- * 11.1 2041
- * 12.1 2046
- * 13.1 2080 0.4.0, 0.4.0.1
- * 14.0 2441
- * 15.0 2499
- * 16.0 2817
- * 16.1 3155
- * 17.0 3212
- * 17.1 3218
- * 18 3227
- * 19 3396
- * 20 3403
- * 21 3472 0.4.x
- * 22 3726
- * 23 3915
- * 24 4150
- * 25 4259
- * 26 4466
- * 27 4757
- * 28 4987
- * 29 5070
- * 30 5946
- * 31 5999
- * 32 6001
- * 33 6440
- * 34 6455
- * 35 6602
- * 36 6624
- * 37 7182
- * 38 7195
- * 39 7269
- * 40 7326
- * 41 7348 0.5.x
- * 42 7573
- * 43 7642
- * 44 8144
- * 45 8501
- * 46 8705
- * 47 8735
- * 48 8935
- * 49 8969
- * 50 8973
- * 51 8978
- * 52 9066
- * 53 9316
- * 54 9613
- * 55 9638
- * 56 9667
- * 57 9691
- * 58 9762
- * 59 9779
- * 60 9874
- * 61 9892
- * 62 9905
- * 63 9956
- * 64 10006
- * 65 10210
- * 66 10211
- * 67 10236
- * 68 10266
- * 69 10319
- * 70 10541
- * 71 10567
- * 72 10601
- * 73 10903
- * 74 11030
- * 75 11107
- * 76 11139
- * 77 11172
- * 78 11176
- * 79 11188
- * 80 11228
- * 81 11244
- * 82 11410
- * 83 11589
- * 84 11822
- * 85 11874
- * 86 12042
- * 87 12129
- * 88 12134
- * 89 12160
- * 90 12293
- * 91 12347
- * 92 12381 0.6.x
- * 93 12648
- * 94 12816
- * 95 12924
- * 96 13226
- * 97 13256
- * 98 13375
- * 99 13838
- * 100 13952
- * 101 14233
- * 102 14332
- * 103 14598
- * 104 14735
- * 105 14803
- * 106 14919
- * 107 15027
- * 108 15045
- * 109 15075
- * 110 15148
- * 111 15190
- * 112 15290
- * 113 15340
- * 114 15601
- * 115 15695
- * 116 15893 0.7.x
- * 117 16037
- * 118 16129
- * 119 16242
- * 120 16439
- * 121 16694
- * 122 16855
- * 123 16909
- * 124 16993
- * 125 17113
- * 126 17433
- * 127 17439
- * 128 18281
- * 129 18292
- * 130 18404
- * 131 18481
- * 132 18522
- * 133 18674
- * 134 18703
- * 135 18719
- * 136 18764
- * 137 18912
- * 138 18942 1.0.x
- * 139 19346
- * 140 19382
- * 141 19799
- * 142 20003
- * 143 20048
- * 144 20334
- * 145 20376
- * 146 20446
- * 147 20621
- * 148 20659
- * 149 20832
- * 150 20857
- * 151 20918
- * 152 21171
- * 153 21263
- * 154 21426
- * 155 21453
- * 156 21728
- * 157 21862
- * 158 21933
- * 159 21962
- * 160 21974 1.1.x
- * 161 22567
- * 162 22713
- * 163 22767
- * 164 23290
- * 165 23304
- * 166 23415
- * 167 23504
- * 168 23637
- * 169 23816
- * 170 23826
- * 171 23835
- * 172 23947
- * 173 23967 1.2.0-RC1
- * 174 23973 1.2.x
- * 175 24136
- * 176 24446
- * 177 24619
- * 178 24789
- * 179 24810
- * 180 24998 1.3.x
- * 181 25012
- * 182 25296
- * 183 25363
- * 184 25508
- * 185 25620
- * 186 25833
- * 187 25899
- * 188 26169 1.4.x
- * 189 26450
- * 190 26547
- * 191 26646
- * 192 26700
- * 193 26802
- * 194 26881 1.5.x, 1.6.0
- * 195 27572 1.6.x
- * 196 27778 1.7.x
- * 197 27978 1.8.x
- * 198
- * 199
- * 200 #6805 Extend railtypes to 64, adding uint16 to map array.
- * 201 #6885 Extend NewGRF persistant storages.
- * 202 #6867 Increase industry cargo slots to 16 in, 16 out
- */
-extern const uint16 SAVEGAME_VERSION = 202; ///< Current savegame version of OpenTTD.
+extern const SaveLoadVersion SAVEGAME_VERSION = (SaveLoadVersion)(SL_MAX_VERSION - 1); ///< Current savegame version of OpenTTD.
SavegameType _savegame_type; ///< type of savegame we are loading
FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop.
-uint32 _ttdp_version; ///< version of TTDP savegame (if applicable)
-uint16 _sl_version; ///< the major savegame version identifier
-byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
-char _savegame_format[8]; ///< how to compress savegames
-bool _do_autosave; ///< are we doing an autosave at the moment?
+uint32 _ttdp_version; ///< version of TTDP savegame (if applicable)
+SaveLoadVersion _sl_version; ///< the major savegame version identifier
+byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
+char _savegame_format[8]; ///< how to compress savegames
+bool _do_autosave; ///< are we doing an autosave at the moment?
/** What are we currently doing? */
enum SaveLoadAction {
@@ -815,7 +597,7 @@ static inline byte SlCalcConvFileLen(VarType conv)
/** Return the size in bytes of a reference (pointer) */
static inline size_t SlCalcRefLen()
{
- return IsSavegameVersionBefore(69) ? 2 : 4;
+ return IsSavegameVersionBefore(SLV_69) ? 2 : 4;
}
void SlSetArrayIndex(uint index)
@@ -1156,7 +938,7 @@ static void SlString(void *ptr, size_t length, VarType conv)
StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK;
if ((conv & SLF_ALLOW_CONTROL) != 0) {
settings = settings | SVS_ALLOW_CONTROL_CODE;
- if (IsSavegameVersionBefore(169)) {
+ if (IsSavegameVersionBefore(SLV_169)) {
str_fix_scc_encoded((char *)ptr, (char *)ptr + len);
}
}
@@ -1284,7 +1066,7 @@ static void *IntToReference(size_t index, SLRefType rt)
/* After version 4.3 REF_VEHICLE_OLD is saved as REF_VEHICLE,
* and should be loaded like that */
- if (rt == REF_VEHICLE_OLD && !IsSavegameVersionBefore(4, 4)) {
+ if (rt == REF_VEHICLE_OLD && !IsSavegameVersionBefore(SLV_4, 4)) {
rt = REF_VEHICLE;
}
@@ -1303,7 +1085,7 @@ static void *IntToReference(size_t index, SLRefType rt)
case REF_ORDER:
if (Order::IsValidID(index)) return Order::Get(index);
/* in old versions, invalid order was used to mark end of order list */
- if (IsSavegameVersionBefore(5, 2)) return NULL;
+ if (IsSavegameVersionBefore(SLV_5, 2)) return NULL;
SlErrorCorrupt("Referencing invalid Order");
case REF_VEHICLE_OLD:
@@ -1355,7 +1137,7 @@ static inline size_t SlCalcListLen(const void *list)
{
const std::list *l = (const std::list *) list;
- int type_size = IsSavegameVersionBefore(69) ? 2 : 4;
+ int type_size = IsSavegameVersionBefore(SLV_69) ? 2 : 4;
/* Each entry is saved as type_size bytes, plus type_size bytes are used for the length
* of the list */
return l->size() * type_size + type_size;
@@ -1392,11 +1174,11 @@ static void SlList(void *list, SLRefType conv)
}
case SLA_LOAD_CHECK:
case SLA_LOAD: {
- size_t length = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32();
+ size_t length = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32();
/* Load each reference and push to the end of the list */
for (size_t i = 0; i < length; i++) {
- size_t data = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32();
+ size_t data = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32();
l->push_back((void *)data);
}
break;
@@ -1420,10 +1202,133 @@ static void SlList(void *list, SLRefType conv)
}
+/**
+ * Template class to help with std::deque.
+ */
+template
+class SlDequeHelper {
+ typedef std::deque SlDequeT;
+public:
+ /**
+ * Internal templated helper to return the size in bytes of a std::deque.
+ * @param deque The std::deque to find the size of
+ * @param conv VarType type of variable that is used for calculating the size
+ */
+ static size_t SlCalcDequeLen(const void *deque, VarType conv)
+ {
+ const SlDequeT *l = (const SlDequeT *)deque;
+
+ int type_size = 4;
+ /* Each entry is saved as type_size bytes, plus type_size bytes are used for the length
+ * of the list */
+ return l->size() * SlCalcConvFileLen(conv) + type_size;
+ }
+
+ /**
+ * Internal templated helper to save/load a std::deque.
+ * @param deque The std::deque being manipulated
+ * @param conv VarType type of variable that is used for calculating the size
+ */
+ static void SlDeque(void *deque, VarType conv)
+ {
+ SlDequeT *l = (SlDequeT *)deque;
+
+ switch (_sl.action) {
+ case SLA_SAVE: {
+ SlWriteUint32((uint32)l->size());
+
+ typename SlDequeT::iterator iter;
+ for (iter = l->begin(); iter != l->end(); ++iter) {
+ SlSaveLoadConv(&(*iter), conv);
+ }
+ break;
+ }
+ case SLA_LOAD_CHECK:
+ case SLA_LOAD: {
+ size_t length = SlReadUint32();
+
+ /* Load each value and push to the end of the deque */
+ for (size_t i = 0; i < length; i++) {
+ T data;
+ SlSaveLoadConv(&data, conv);
+ l->push_back(data);
+ }
+ break;
+ }
+ case SLA_PTRS:
+ break;
+ case SLA_NULL:
+ l->clear();
+ break;
+ default: NOT_REACHED();
+ }
+ }
+};
+
+
+/**
+ * Return the size in bytes of a std::deque.
+ * @param deque The std::deque to find the size of
+ * @param conv VarType type of variable that is used for calculating the size
+ */
+static inline size_t SlCalcDequeLen(const void *deque, VarType conv)
+{
+ switch (GetVarMemType(conv)) {
+ case SLE_VAR_BL:
+ return SlDequeHelper::SlCalcDequeLen(deque, conv);
+ case SLE_VAR_I8:
+ case SLE_VAR_U8:
+ return SlDequeHelper::SlCalcDequeLen(deque, conv);
+ case SLE_VAR_I16:
+ case SLE_VAR_U16:
+ return SlDequeHelper::SlCalcDequeLen(deque, conv);
+ case SLE_VAR_I32:
+ case SLE_VAR_U32:
+ return SlDequeHelper::SlCalcDequeLen(deque, conv);
+ case SLE_VAR_I64:
+ case SLE_VAR_U64:
+ return SlDequeHelper::SlCalcDequeLen(deque, conv);
+ default: NOT_REACHED();
+ }
+}
+
+
+/**
+ * Save/load a std::deque.
+ * @param deque The std::deque being manipulated
+ * @param conv VarType type of variable that is used for calculating the size
+ */
+static void SlDeque(void *deque, VarType conv)
+{
+ switch (GetVarMemType(conv)) {
+ case SLE_VAR_BL:
+ SlDequeHelper::SlDeque(deque, conv);
+ break;
+ case SLE_VAR_I8:
+ case SLE_VAR_U8:
+ SlDequeHelper::SlDeque(deque, conv);
+ break;
+ case SLE_VAR_I16:
+ case SLE_VAR_U16:
+ SlDequeHelper::SlDeque(deque, conv);
+ break;
+ case SLE_VAR_I32:
+ case SLE_VAR_U32:
+ SlDequeHelper::SlDeque(deque, conv);
+ break;
+ case SLE_VAR_I64:
+ case SLE_VAR_U64:
+ SlDequeHelper::SlDeque(deque, conv);
+ break;
+ default: NOT_REACHED();
+ }
+}
+
+
/** Are we going to save this object or not? */
static inline bool SlIsObjectValidInSavegame(const SaveLoad *sld)
{
- if (_sl_version < sld->version_from || _sl_version > sld->version_to) return false;
+ if (_sl_version < sld->version_from || _sl_version >= sld->version_to) return false;
if (sld->conv & SLF_NOT_IN_SAVE) return false;
return true;
@@ -1471,6 +1376,7 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld)
case SL_ARR:
case SL_STR:
case SL_LST:
+ case SL_DEQUE:
/* CONDITIONAL saveload types depend on the savegame version */
if (!SlIsObjectValidInSavegame(sld)) break;
@@ -1480,6 +1386,7 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld)
case SL_ARR: return SlCalcArrayLen(sld->length, sld->conv);
case SL_STR: return SlCalcStringLen(GetVariableAddress(object, sld), sld->length, sld->conv);
case SL_LST: return SlCalcListLen(GetVariableAddress(object, sld));
+ case SL_DEQUE: return SlCalcDequeLen(GetVariableAddress(object, sld), sld->conv);
default: NOT_REACHED();
}
break;
@@ -1548,6 +1455,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld)
case SL_ARR:
case SL_STR:
case SL_LST:
+ case SL_DEQUE:
/* CONDITIONAL saveload types depend on the savegame version */
if (!SlIsObjectValidInSavegame(sld)) return false;
if (SlSkipVariableOnLoad(sld)) return false;
@@ -1561,7 +1469,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld)
break;
case SLA_LOAD_CHECK:
case SLA_LOAD:
- *(size_t *)ptr = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32();
+ *(size_t *)ptr = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32();
break;
case SLA_PTRS:
*(void **)ptr = IntToReference(*(size_t *)ptr, (SLRefType)conv);
@@ -1575,21 +1483,20 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld)
case SL_ARR: SlArray(ptr, sld->length, conv); break;
case SL_STR: SlString(ptr, sld->length, sld->conv); break;
case SL_LST: SlList(ptr, (SLRefType)conv); break;
+ case SL_DEQUE: SlDeque(ptr, conv); break;
default: NOT_REACHED();
}
break;
- /* SL_WRITEBYTE translates a value of a variable to another one upon
- * saving or loading.
- * XXX - variable renaming abuse
- * game_value: the value of the variable ingame is abused by sld->version_from
- * file_value: the value of the variable in the savegame is abused by sld->version_to */
+ /* SL_WRITEBYTE writes a value to the savegame to identify the type of an object.
+ * When loading, the value is read explictly with SlReadByte() to determine which
+ * object description to use. */
case SL_WRITEBYTE:
switch (_sl.action) {
- case SLA_SAVE: SlWriteByte(sld->version_to); break;
+ case SLA_SAVE: SlWriteByte(*(uint8 *)ptr); break;
case SLA_LOAD_CHECK:
- case SLA_LOAD: *(byte *)ptr = sld->version_from; break;
- case SLA_PTRS: break;
+ case SLA_LOAD:
+ case SLA_PTRS:
case SLA_NULL: break;
default: NOT_REACHED();
}
@@ -2008,7 +1915,7 @@ struct LZOLoadFilter : LoadFilter {
/* Check if size is bad */
((uint32*)out)[0] = size = tmp[1];
- if (_sl_version != 0) {
+ if (_sl_version != SL_MIN_VERSION) {
tmp[0] = TO_BE32(tmp[0]);
size = TO_BE32(size);
}
@@ -2655,7 +2562,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
if (fmt == endof(_saveload_formats)) {
DEBUG(sl, 0, "Unknown savegame type, trying to load it as the buggy format");
_sl.lf->Reset();
- _sl_version = 0;
+ _sl_version = SL_MIN_VERSION;
_sl_minor_version = 0;
/* Try to find the LZO savegame format; it uses 'OTTD' as tag. */
@@ -2673,7 +2580,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
if (fmt->tag == hdr[0]) {
/* check version number */
- _sl_version = TO_BE32(hdr[1]) >> 16;
+ _sl_version = (SaveLoadVersion)(TO_BE32(hdr[1]) >> 16);
/* Minor is not used anymore from version 18.0, but it is still needed
* in versions before that (4 cases) which can't be removed easy.
* Therefore it is loaded, but never saved (or, it saves a 0 in any scenario). */
@@ -2708,7 +2615,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
GamelogReset();
- if (IsSavegameVersionBefore(4)) {
+ if (IsSavegameVersionBefore(SLV_4)) {
/*
* NewGRFs were introduced between 0.3,4 and 0.3.5, which both
* shared savegame version 4. Anything before that 'obviously'
@@ -2814,7 +2721,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, Detaile
ClearGRFConfigList(&_grfconfig);
GamelogReset();
if (!LoadOldSaveGame(filename)) return SL_REINIT;
- _sl_version = 0;
+ _sl_version = SL_MIN_VERSION;
_sl_minor_version = 0;
GamelogStartAction(GLAT_LOAD);
if (!AfterLoadGame()) {
diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h
index cca56ce07e..613c9ce514 100644
--- a/src/saveload/saveload.h
+++ b/src/saveload/saveload.h
@@ -15,6 +15,284 @@
#include "../fileio_type.h"
#include "../strings_type.h"
+/** SaveLoad versions
+ * Previous savegame versions, the trunk revision where they were
+ * introduced and the released version that had that particular
+ * savegame version.
+ * Up to savegame version 18 there is a minor version as well.
+ *
+ * Older entries keep their original numbering.
+ *
+ * Newer entries should use a descriptive labels, numeric version
+ * and PR can be added to comment.
+ *
+ * Note that this list must not be reordered.
+ */
+enum SaveLoadVersion : uint16 {
+ SL_MIN_VERSION, ///< First savegame version
+
+ SLV_1, ///< 1.0 0.1.x, 0.2.x
+ SLV_2, /**< 2.0 0.3.0
+ * 2.1 0.3.1, 0.3.2 */
+ SLV_3, ///< 3.x lost
+ SLV_4, /**< 4.0 1
+ * 4.1 122 0.3.3, 0.3.4
+ * 4.2 1222 0.3.5
+ * 4.3 1417
+ * 4.4 1426 */
+
+ SLV_5, /**< 5.0 1429
+ * 5.1 1440
+ * 5.2 1525 0.3.6 */
+ SLV_6, /**< 6.0 1721
+ * 6.1 1768 */
+ SLV_7, ///< 7.0 1770
+ SLV_8, ///< 8.0 1786
+ SLV_9, ///< 9.0 1909
+
+ SLV_10, ///< 10.0 2030
+ SLV_11, /**< 11.0 2033
+ * 11.1 2041 */
+ SLV_12, ///< 12.1 2046
+ SLV_13, ///< 13.1 2080 0.4.0, 0.4.0.1
+ SLV_14, ///< 14.0 2441
+
+ SLV_15, ///< 15.0 2499
+ SLV_16, /**< 16.0 2817
+ * 16.1 3155 */
+ SLV_17, /**< 17.0 3212
+ * 17.1 3218 */
+ SLV_18, ///< 18 3227
+ SLV_19, ///< 19 3396
+
+ SLV_20, ///< 20 3403
+ SLV_21, ///< 21 3472 0.4.x
+ SLV_22, ///< 22 3726
+ SLV_23, ///< 23 3915
+ SLV_24, ///< 24 4150
+
+ SLV_25, ///< 25 4259
+ SLV_26, ///< 26 4466
+ SLV_27, ///< 27 4757
+ SLV_28, ///< 28 4987
+ SLV_29, ///< 29 5070
+
+ SLV_30, ///< 30 5946
+ SLV_31, ///< 31 5999
+ SLV_32, ///< 32 6001
+ SLV_33, ///< 33 6440
+ SLV_34, ///< 34 6455
+
+ SLV_35, ///< 35 6602
+ SLV_36, ///< 36 6624
+ SLV_37, ///< 37 7182
+ SLV_38, ///< 38 7195
+ SLV_39, ///< 39 7269
+
+ SLV_40, ///< 40 7326
+ SLV_41, ///< 41 7348 0.5.x
+ SLV_42, ///< 42 7573
+ SLV_43, ///< 43 7642
+ SLV_44, ///< 44 8144
+
+ SLV_45, ///< 45 8501
+ SLV_46, ///< 46 8705
+ SLV_47, ///< 47 8735
+ SLV_48, ///< 48 8935
+ SLV_49, ///< 49 8969
+
+ SLV_50, ///< 50 8973
+ SLV_51, ///< 51 8978
+ SLV_52, ///< 52 9066
+ SLV_53, ///< 53 9316
+ SLV_54, ///< 54 9613
+
+ SLV_55, ///< 55 9638
+ SLV_56, ///< 56 9667
+ SLV_57, ///< 57 9691
+ SLV_58, ///< 58 9762
+ SLV_59, ///< 59 9779
+
+ SLV_60, ///< 60 9874
+ SLV_61, ///< 61 9892
+ SLV_62, ///< 62 9905
+ SLV_63, ///< 63 9956
+ SLV_64, ///< 64 10006
+
+ SLV_65, ///< 65 10210
+ SLV_66, ///< 66 10211
+ SLV_67, ///< 67 10236
+ SLV_68, ///< 68 10266
+ SLV_69, ///< 69 10319
+
+ SLV_70, ///< 70 10541
+ SLV_71, ///< 71 10567
+ SLV_72, ///< 72 10601
+ SLV_73, ///< 73 10903
+ SLV_74, ///< 74 11030
+
+ SLV_75, ///< 75 11107
+ SLV_76, ///< 76 11139
+ SLV_77, ///< 77 11172
+ SLV_78, ///< 78 11176
+ SLV_79, ///< 79 11188
+
+ SLV_80, ///< 80 11228
+ SLV_81, ///< 81 11244
+ SLV_82, ///< 82 11410
+ SLV_83, ///< 83 11589
+ SLV_84, ///< 84 11822
+
+ SLV_85, ///< 85 11874
+ SLV_86, ///< 86 12042
+ SLV_87, ///< 87 12129
+ SLV_88, ///< 88 12134
+ SLV_89, ///< 89 12160
+
+ SLV_90, ///< 90 12293
+ SLV_91, ///< 91 12347
+ SLV_92, ///< 92 12381 0.6.x
+ SLV_93, ///< 93 12648
+ SLV_94, ///< 94 12816
+
+ SLV_95, ///< 95 12924
+ SLV_96, ///< 96 13226
+ SLV_97, ///< 97 13256
+ SLV_98, ///< 98 13375
+ SLV_99, ///< 99 13838
+
+ SLV_100, ///< 100 13952
+ SLV_101, ///< 101 14233
+ SLV_102, ///< 102 14332
+ SLV_103, ///< 103 14598
+ SLV_104, ///< 104 14735
+
+ SLV_105, ///< 105 14803
+ SLV_106, ///< 106 14919
+ SLV_107, ///< 107 15027
+ SLV_108, ///< 108 15045
+ SLV_109, ///< 109 15075
+
+ SLV_110, ///< 110 15148
+ SLV_111, ///< 111 15190
+ SLV_112, ///< 112 15290
+ SLV_113, ///< 113 15340
+ SLV_114, ///< 114 15601
+
+ SLV_115, ///< 115 15695
+ SLV_116, ///< 116 15893 0.7.x
+ SLV_117, ///< 117 16037
+ SLV_118, ///< 118 16129
+ SLV_119, ///< 119 16242
+
+ SLV_120, ///< 120 16439
+ SLV_121, ///< 121 16694
+ SLV_122, ///< 122 16855
+ SLV_123, ///< 123 16909
+ SLV_124, ///< 124 16993
+
+ SLV_125, ///< 125 17113
+ SLV_126, ///< 126 17433
+ SLV_127, ///< 127 17439
+ SLV_128, ///< 128 18281
+ SLV_129, ///< 129 18292
+
+ SLV_130, ///< 130 18404
+ SLV_131, ///< 131 18481
+ SLV_132, ///< 132 18522
+ SLV_133, ///< 133 18674
+ SLV_134, ///< 134 18703
+
+ SLV_135, ///< 135 18719
+ SLV_136, ///< 136 18764
+ SLV_137, ///< 137 18912
+ SLV_138, ///< 138 18942 1.0.x
+ SLV_139, ///< 139 19346
+
+ SLV_140, ///< 140 19382
+ SLV_141, ///< 141 19799
+ SLV_142, ///< 142 20003
+ SLV_143, ///< 143 20048
+ SLV_144, ///< 144 20334
+
+ SLV_145, ///< 145 20376
+ SLV_146, ///< 146 20446
+ SLV_147, ///< 147 20621
+ SLV_148, ///< 148 20659
+ SLV_149, ///< 149 20832
+
+ SLV_150, ///< 150 20857
+ SLV_151, ///< 151 20918
+ SLV_152, ///< 152 21171
+ SLV_153, ///< 153 21263
+ SLV_154, ///< 154 21426
+
+ SLV_155, ///< 155 21453
+ SLV_156, ///< 156 21728
+ SLV_157, ///< 157 21862
+ SLV_158, ///< 158 21933
+ SLV_159, ///< 159 21962
+
+ SLV_160, ///< 160 21974 1.1.x
+ SLV_161, ///< 161 22567
+ SLV_162, ///< 162 22713
+ SLV_163, ///< 163 22767
+ SLV_164, ///< 164 23290
+
+ SLV_165, ///< 165 23304
+ SLV_166, ///< 166 23415
+ SLV_167, ///< 167 23504
+ SLV_168, ///< 168 23637
+ SLV_169, ///< 169 23816
+
+ SLV_170, ///< 170 23826
+ SLV_171, ///< 171 23835
+ SLV_172, ///< 172 23947
+ SLV_173, ///< 173 23967 1.2.0-RC1
+ SLV_174, ///< 174 23973 1.2.x
+
+ SLV_175, ///< 175 24136
+ SLV_176, ///< 176 24446
+ SLV_177, ///< 177 24619
+ SLV_178, ///< 178 24789
+ SLV_179, ///< 179 24810
+
+ SLV_180, ///< 180 24998 1.3.x
+ SLV_181, ///< 181 25012
+ SLV_182, ///< 182 25115 FS#5492, r25259, r25296 Goal status
+ SLV_183, ///< 183 25363 Cargodist
+ SLV_184, ///< 184 25508 Unit localisation split
+
+ SLV_185, ///< 185 25620 Storybooks
+ SLV_186, ///< 186 25833 Objects storage
+ SLV_187, ///< 187 25899 Linkgraph - restricted flows
+ SLV_188, ///< 188 26169 FS#5831 Unify RV travel time
+ SLV_189, ///< 189 26450 Heirarchical vehicle subgroups
+
+ SLV_190, ///< 190 26547 Separate order travel and wait times
+ SLV_191, ///< 191 26636 FS#6026 Fix disaster vehicle storage (No bump)
+ ///< 191 26646 FS#6041 Linkgraph - store locations
+ SLV_192, ///< 192 26700 FS#6066 Fix saving of order backups
+ SLV_193, ///< 193 26802
+ SLV_194, ///< 194 26881 v1.5
+
+ SLV_195, ///< 195 27572 v1.6.1
+ SLV_196, ///< 196 27778 v1.7
+ SLV_197, ///< 197 27978 v1.8
+ SLV_198, ///< 198 PR#6763 Switch town growth rate and counter to actual game ticks
+ SLV_EXTEND_CARGOTYPES, ///< 199 PR#6802 Extend cargotypes to 64
+
+ SLV_EXTEND_RAILTYPES, ///< 200 PR#6805 Extend railtypes to 64, adding uint16 to map array.
+ SLV_EXTEND_PERSISTENT_STORAGE, ///< 201 PR#6885 Extend NewGRF persistant storages.
+ SLV_EXTEND_INDUSTRY_CARGO_SLOTS, ///< 202 PR#6867 Increase industry cargo slots to 16 in, 16 out
+ SLV_SHIP_PATH_CACHE, ///< 203 PR#7072 Add path cache for ships
+ SLV_SHIP_ROTATION, ///< 204 PR#7065 Add extra rotation stages for ships.
+
+ SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries.
+
+ SL_MAX_VERSION, ///< Highest possible saveload version
+};
+
/** Save or load result codes. */
enum SaveOrLoadResult {
SL_OK = 0, ///< completed successfully
@@ -92,9 +370,6 @@ enum SLRefType {
REF_LINK_GRAPH_JOB = 11, ///< Load/save a reference to a link graph job.
};
-/** Highest possible savegame version. */
-#define SL_MAX_VERSION UINT16_MAX
-
/** Flags of a chunk. */
enum ChunkType {
CH_RIFF = 0,
@@ -195,6 +470,7 @@ enum SaveLoadTypes {
SL_ARR = 2, ///< Save/load an array.
SL_STR = 3, ///< Save/load a string.
SL_LST = 4, ///< Save/load a list.
+ SL_DEQUE = 5, ///< Save/load a deque.
/* non-normal save-load types */
SL_WRITEBYTE = 8,
SL_VEH_INCLUDE = 9,
@@ -210,8 +486,8 @@ struct SaveLoad {
SaveLoadType cmd; ///< the action to take with the saved/loaded type, All types need different action
VarType conv; ///< type of the variable to be saved, int
uint16 length; ///< (conditional) length of the variable (eg. arrays) (max array size is 65536 elements)
- uint16 version_from; ///< save/load the variable starting from this savegame version
- uint16 version_to; ///< save/load the variable until this savegame version
+ SaveLoadVersion version_from; ///< save/load the variable starting from this savegame version
+ SaveLoadVersion version_to; ///< save/load the variable until this savegame version
/* NOTE: This element either denotes the address of the variable for a global
* variable, or the offset within a struct which is then bound to a variable
* during runtime. Decision on which one to use is controlled by the function
@@ -287,13 +563,23 @@ typedef SaveLoad SaveLoadGlobVarList;
*/
#define SLE_CONDLST(base, variable, type, from, to) SLE_GENERAL(SL_LST, base, variable, type, 0, from, to)
+/**
+ * Storage of a deque in some savegame versions.
+ * @param base Name of the class or struct containing the list.
+ * @param variable Name of the variable in the class or struct referenced by \a base.
+ * @param type Storage of the data in memory and in the savegame.
+ * @param from First savegame version that has the list.
+ * @param to Last savegame version that has the list.
+ */
+#define SLE_CONDDEQUE(base, variable, type, from, to) SLE_GENERAL(SL_DEQUE, base, variable, type, 0, from, to)
+
/**
* Storage of a variable in every version of a savegame.
* @param base Name of the class or struct containing the variable.
* @param variable Name of the variable in the class or struct referenced by \a base.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, 0, SL_MAX_VERSION)
+#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a reference in every version of a savegame.
@@ -301,7 +587,7 @@ typedef SaveLoad SaveLoadGlobVarList;
* @param variable Name of the variable in the class or struct referenced by \a base.
* @param type Type of the reference, a value from #SLRefType.
*/
-#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, 0, SL_MAX_VERSION)
+#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of an array in every version of a savegame.
@@ -310,7 +596,7 @@ typedef SaveLoad SaveLoadGlobVarList;
* @param type Storage of the data in memory and in the savegame.
* @param length Number of elements in the array.
*/
-#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, 0, SL_MAX_VERSION)
+#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a string in every savegame version.
@@ -319,7 +605,7 @@ typedef SaveLoad SaveLoadGlobVarList;
* @param type Storage of the data in memory and in the savegame.
* @param length Number of elements in the string (only used for fixed size buffers).
*/
-#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, 0, SL_MAX_VERSION)
+#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a list in every savegame version.
@@ -327,13 +613,13 @@ typedef SaveLoad SaveLoadGlobVarList;
* @param variable Name of the variable in the class or struct referenced by \a base.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, 0, SL_MAX_VERSION)
+#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Empty space in every savegame version.
* @param length Length of the empty space.
*/
-#define SLE_NULL(length) SLE_CONDNULL(length, 0, SL_MAX_VERSION)
+#define SLE_NULL(length) SLE_CONDNULL(length, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Empty space in some savegame versions.
@@ -344,13 +630,13 @@ typedef SaveLoad SaveLoadGlobVarList;
#define SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to)
/** Translate values ingame to different values in the savegame and vv. */
-#define SLE_WRITEBYTE(base, variable, value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, value, value)
+#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION)
-#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0}
-#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0}
+#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0}
+#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0}
/** End marker of a struct/class save or load. */
-#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL, 0}
+#define SLE_END() {false, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0}
/**
* Storage of global simple variables, references (pointers), and arrays.
@@ -415,35 +701,35 @@ typedef SaveLoad SaveLoadGlobVarList;
* @param variable Name of the global variable.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, 0, SL_MAX_VERSION)
+#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a global reference in every savegame version.
* @param variable Name of the global variable.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, 0, SL_MAX_VERSION)
+#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a global array in every savegame version.
* @param variable Name of the global variable.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), 0, SL_MAX_VERSION)
+#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a global string in every savegame version.
* @param variable Name of the global variable.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), 0, SL_MAX_VERSION)
+#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Storage of a global list in every savegame version.
* @param variable Name of the global variable.
* @param type Storage of the data in memory and in the savegame.
*/
-#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION)
+#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
/**
* Empty global space in some savegame versions.
@@ -454,7 +740,7 @@ typedef SaveLoad SaveLoadGlobVarList;
#define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to, (void*)NULL}
/** End marker of global variables save or load. */
-#define SLEG_END() {true, SL_END, 0, 0, 0, 0, NULL, 0}
+#define SLEG_END() {true, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0}
/**
* Checks whether the savegame is below \a major.\a minor.
@@ -462,24 +748,24 @@ typedef SaveLoad SaveLoadGlobVarList;
* @param minor Minor number of the version to check against. If \a minor is 0 or not specified, only the major number is checked.
* @return Savegame version is earlier than the specified version.
*/
-static inline bool IsSavegameVersionBefore(uint16 major, byte minor = 0)
+static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0)
{
- extern uint16 _sl_version;
- extern byte _sl_minor_version;
+ extern SaveLoadVersion _sl_version;
+ extern byte _sl_minor_version;
return _sl_version < major || (minor > 0 && _sl_version == major && _sl_minor_version < minor);
}
/**
* Checks if some version from/to combination falls within the range of the
* active savegame version.
- * @param version_from Lowest version number that falls within the range.
- * @param version_to Highest version number that falls within the range.
+ * @param version_from Inclusive savegame version lower bound.
+ * @param version_to Exclusive savegame version upper bound. SL_MAX_VERSION if no upper bound.
* @return Active savegame version falls within the given range.
*/
-static inline bool SlIsObjectCurrentlyValid(uint16 version_from, uint16 version_to)
+static inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to)
{
- extern const uint16 SAVEGAME_VERSION;
- if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION > version_to) return false;
+ extern const SaveLoadVersion SAVEGAME_VERSION;
+ if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION >= version_to) return false;
return true;
}
diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp
index 132ac181e4..545c628b36 100644
--- a/src/saveload/signs_sl.cpp
+++ b/src/saveload/signs_sl.cpp
@@ -19,15 +19,15 @@
/** Description of a sign within the savegame. */
static const SaveLoad _sign_desc[] = {
- SLE_CONDVAR(Sign, name, SLE_NAME, 0, 83),
- SLE_CONDSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
- SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, 0, 4),
- SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, 0, 4),
- SLE_CONDVAR(Sign, x, SLE_INT32, 5, SL_MAX_VERSION),
- SLE_CONDVAR(Sign, y, SLE_INT32, 5, SL_MAX_VERSION),
- SLE_CONDVAR(Sign, owner, SLE_UINT8, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, 0, 163),
- SLE_CONDVAR(Sign, z, SLE_INT32, 164, SL_MAX_VERSION),
+ SLE_CONDVAR(Sign, name, SLE_NAME, SL_MIN_VERSION, SLV_84),
+ SLE_CONDSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
+ SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Sign, x, SLE_INT32, SLV_5, SL_MAX_VERSION),
+ SLE_CONDVAR(Sign, y, SLE_INT32, SLV_5, SL_MAX_VERSION),
+ SLE_CONDVAR(Sign, owner, SLE_UINT8, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164),
+ SLE_CONDVAR(Sign, z, SLE_INT32, SLV_164, SL_MAX_VERSION),
SLE_END()
};
@@ -55,12 +55,12 @@ static void Load_SIGN()
* - we can't use IsValidCompany() now, so this is fixed in AfterLoadGame()
* All signs that were saved are valid (including those with just 'Sign' and INVALID_OWNER).
* - so set owner to OWNER_NONE if needed (signs from pre-version 6.1 would be lost) */
- if (IsSavegameVersionBefore(6, 1) || (IsSavegameVersionBefore(83) && si->owner == INVALID_OWNER)) {
+ if (IsSavegameVersionBefore(SLV_6, 1) || (IsSavegameVersionBefore(SLV_83) && si->owner == INVALID_OWNER)) {
si->owner = OWNER_NONE;
}
/* Signs placed in scenario editor shall now be OWNER_DEITY */
- if (IsSavegameVersionBefore(171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) {
+ if (IsSavegameVersionBefore(SLV_171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) {
si->owner = OWNER_DEITY;
}
}
diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp
index 670d6fcf06..995483ee6d 100644
--- a/src/saveload/station_sl.cpp
+++ b/src/saveload/station_sl.cpp
@@ -150,43 +150,43 @@ void AfterLoadRoadStops()
static const SaveLoad _roadstop_desc[] = {
SLE_VAR(RoadStop, xy, SLE_UINT32),
- SLE_CONDNULL(1, 0, 44),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45),
SLE_VAR(RoadStop, status, SLE_UINT8),
/* Index was saved in some versions, but this is not needed */
- SLE_CONDNULL(4, 0, 8),
- SLE_CONDNULL(2, 0, 44),
- SLE_CONDNULL(1, 0, 25),
+ SLE_CONDNULL(4, SL_MIN_VERSION, SLV_9),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_26),
SLE_REF(RoadStop, next, REF_ROADSTOPS),
- SLE_CONDNULL(2, 0, 44),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45),
- SLE_CONDNULL(4, 0, 24),
- SLE_CONDNULL(1, 25, 25),
+ SLE_CONDNULL(4, SL_MIN_VERSION, SLV_25),
+ SLE_CONDNULL(1, SLV_25, SLV_26),
SLE_END()
};
static const SaveLoad _old_station_desc[] = {
- SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Station, xy, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDNULL(4, 0, 5), ///< bus/lorry tile
- SLE_CONDVAR(Station, train_station.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Station, train_station.tile, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Station, airport.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Station, airport.tile, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Station, dock_tile, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Station, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDNULL(4, SL_MIN_VERSION, SLV_6), ///< bus/lorry tile
+ SLE_CONDVAR(Station, train_station.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Station, train_station.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, airport.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Station, airport.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Station, dock_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLE_REF(Station, town, REF_TOWN),
SLE_VAR(Station, train_station.w, SLE_FILE_U8 | SLE_VAR_U16),
- SLE_CONDVAR(Station, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_2, SL_MAX_VERSION),
- SLE_CONDNULL(1, 0, 3), ///< alpha_order
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_4), ///< alpha_order
SLE_VAR(Station, string_id, SLE_STRINGID),
- SLE_CONDSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
- SLE_CONDVAR(Station, indtype, SLE_UINT8, 103, SL_MAX_VERSION),
- SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, 0, 121),
- SLE_CONDVAR(Station, had_vehicle_of_type, SLE_UINT8, 122, SL_MAX_VERSION),
+ SLE_CONDSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, indtype, SLE_UINT8, SLV_103, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_122),
+ SLE_CONDVAR(Station, had_vehicle_of_type, SLE_UINT8, SLV_122, SL_MAX_VERSION),
SLE_VAR(Station, time_since_load, SLE_UINT8),
SLE_VAR(Station, time_since_unload, SLE_UINT8),
@@ -195,32 +195,32 @@ static const SaveLoad _old_station_desc[] = {
SLE_VAR(Station, facilities, SLE_UINT8),
SLE_VAR(Station, airport.type, SLE_UINT8),
- SLE_CONDNULL(2, 0, 5), ///< Truck/bus stop status
- SLE_CONDNULL(1, 0, 4), ///< Blocked months
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), ///< Truck/bus stop status
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_5), ///< Blocked months
- SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, 0, 2),
- SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, 3, 45),
- SLE_CONDVAR(Station, airport.flags, SLE_UINT64, 46, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, SL_MIN_VERSION, SLV_3),
+ SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, SLV_3, SLV_46),
+ SLE_CONDVAR(Station, airport.flags, SLE_UINT64, SLV_46, SL_MAX_VERSION),
- SLE_CONDNULL(2, 0, 25), ///< last-vehicle
- SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, 26, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_26), ///< last-vehicle
+ SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, SLV_26, SL_MAX_VERSION),
- SLE_CONDNULL(2, 3, 25), ///< custom station class and id
- SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 30),
- SLE_CONDVAR(Station, build_date, SLE_INT32, 31, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SLV_3, SLV_26), ///< custom station class and id
+ SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, SLV_3, SLV_31),
+ SLE_CONDVAR(Station, build_date, SLE_INT32, SLV_31, SL_MAX_VERSION),
- SLE_CONDREF(Station, bus_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION),
- SLE_CONDREF(Station, truck_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION),
+ SLE_CONDREF(Station, bus_stops, REF_ROADSTOPS, SLV_6, SL_MAX_VERSION),
+ SLE_CONDREF(Station, truck_stops, REF_ROADSTOPS, SLV_6, SL_MAX_VERSION),
/* Used by newstations for graphic variations */
- SLE_CONDVAR(Station, random_bits, SLE_UINT16, 27, SL_MAX_VERSION),
- SLE_CONDVAR(Station, waiting_triggers, SLE_UINT8, 27, SL_MAX_VERSION),
- SLE_CONDVAR(Station, num_specs, SLE_UINT8, 27, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, random_bits, SLE_UINT16, SLV_27, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, waiting_triggers, SLE_UINT8, SLV_27, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, num_specs, SLE_UINT8, SLV_27, SL_MAX_VERSION),
- SLE_CONDLST(Station, loading_vehicles, REF_VEHICLE, 57, SL_MAX_VERSION),
+ SLE_CONDLST(Station, loading_vehicles, REF_VEHICLE, SLV_57, SL_MAX_VERSION),
/* reserve extra space in savegame here. (currently 32 bytes) */
- SLE_CONDNULL(32, 2, SL_MAX_VERSION),
+ SLE_CONDNULL(32, SLV_2, SL_MAX_VERSION),
SLE_END()
};
@@ -233,8 +233,8 @@ static uint8 _cargo_days;
static Money _cargo_feeder_share;
static const SaveLoad _station_speclist_desc[] = {
- SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, 27, SL_MAX_VERSION),
- SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8, 27, SL_MAX_VERSION),
+ SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, SLV_27, SL_MAX_VERSION),
+ SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8, SLV_27, SL_MAX_VERSION),
SLE_END()
};
@@ -254,7 +254,7 @@ static const SaveLoad _flow_desc[] = {
SLE_VAR(FlowSaveLoad, source, SLE_UINT16),
SLE_VAR(FlowSaveLoad, via, SLE_UINT16),
SLE_VAR(FlowSaveLoad, share, SLE_UINT32),
- SLE_CONDVAR(FlowSaveLoad, restricted, SLE_BOOL, 187, SL_MAX_VERSION),
+ SLE_CONDVAR(FlowSaveLoad, restricted, SLE_BOOL, SLV_187, SL_MAX_VERSION),
SLE_END()
};
@@ -266,27 +266,27 @@ static const SaveLoad _flow_desc[] = {
const SaveLoad *GetGoodsDesc()
{
static const SaveLoad goods_desc[] = {
- SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 67),
- SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, 68, SL_MAX_VERSION),
- SLE_CONDNULL(2, 51, 67),
+ SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, SL_MIN_VERSION, SLV_68),
+ SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, SLV_68, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SLV_51, SLV_68),
SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8),
SLE_VAR(GoodsEntry, rating, SLE_UINT8),
- SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
- SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67),
- SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67),
- SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67),
+ SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_7),
+ SLEG_CONDVAR( _cargo_source, SLE_UINT16, SLV_7, SLV_68),
+ SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, SLV_44, SLV_68),
+ SLEG_CONDVAR( _cargo_days, SLE_UINT8, SL_MIN_VERSION, SLV_68),
SLE_VAR(GoodsEntry, last_speed, SLE_UINT8),
SLE_VAR(GoodsEntry, last_age, SLE_UINT8),
- SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 64),
- SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67),
- SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, 150, SL_MAX_VERSION),
- SLEG_CONDLST( _packets, REF_CARGO_PACKET, 68, 182),
- SLEG_CONDVAR( _num_dests, SLE_UINT32, 183, SL_MAX_VERSION),
- SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, 181, SL_MAX_VERSION),
- SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, 183, SL_MAX_VERSION),
- SLE_CONDVAR(GoodsEntry, node, SLE_UINT16, 183, SL_MAX_VERSION),
- SLEG_CONDVAR( _num_flows, SLE_UINT32, 183, SL_MAX_VERSION),
- SLE_CONDVAR(GoodsEntry, max_waiting_cargo, SLE_UINT32, 183, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, SLV_14, SLV_65),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, SLV_65, SLV_68),
+ SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, SLV_150, SL_MAX_VERSION),
+ SLEG_CONDLST( _packets, REF_CARGO_PACKET, SLV_68, SLV_183),
+ SLEG_CONDVAR( _num_dests, SLE_UINT32, SLV_183, SL_MAX_VERSION),
+ SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, SLV_181, SL_MAX_VERSION),
+ SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, SLV_183, SL_MAX_VERSION),
+ SLE_CONDVAR(GoodsEntry, node, SLE_UINT16, SLV_183, SL_MAX_VERSION),
+ SLEG_CONDVAR( _num_flows, SLE_UINT32, SLV_183, SL_MAX_VERSION),
+ SLE_CONDVAR(GoodsEntry, max_waiting_cargo, SLE_UINT32, SLV_183, SL_MAX_VERSION),
SLE_END()
};
@@ -329,7 +329,7 @@ static void Load_STNS()
_cargo_days = 0;
_cargo_feeder_share = 0;
- uint num_cargo = IsSavegameVersionBefore(55) ? 12 : IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
+ uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
int index;
while ((index = SlIterateArray()) != -1) {
Station *st = new (index) Station();
@@ -342,11 +342,11 @@ static void Load_STNS()
GoodsEntry *ge = &st->goods[i];
SlObject(ge, GetGoodsDesc());
SwapPackets(ge);
- if (IsSavegameVersionBefore(68)) {
+ if (IsSavegameVersionBefore(SLV_68)) {
SB(ge->status, GoodsEntry::GES_ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15));
if (GB(_waiting_acceptance, 0, 12) != 0) {
/* In old versions, enroute_from used 0xFF as INVALID_STATION */
- StationID source = (IsSavegameVersionBefore(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
+ StationID source = (IsSavegameVersionBefore(SLV_7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
/* Make sure we can allocate the CargoPacket. This is safe
* as there can only be ~64k stations and 32 cargoes in these
@@ -375,12 +375,12 @@ static void Load_STNS()
static void Ptrs_STNS()
{
/* Don't run when savegame version is higher than or equal to 123. */
- if (!IsSavegameVersionBefore(123)) return;
+ if (!IsSavegameVersionBefore(SLV_123)) return;
- uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
+ uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
Station *st;
FOR_ALL_STATIONS(st) {
- if (!IsSavegameVersionBefore(68)) {
+ if (!IsSavegameVersionBefore(SLV_68)) {
for (CargoID i = 0; i < num_cargo; i++) {
GoodsEntry *ge = &st->goods[i];
SwapPackets(ge);
@@ -414,7 +414,7 @@ static const SaveLoad _base_station_desc[] = {
static OldPersistentStorage _old_st_persistent_storage;
static const SaveLoad _station_desc[] = {
- SLE_WRITEBYTE(Station, facilities, FACIL_NONE),
+ SLE_WRITEBYTE(Station, facilities),
SLE_ST_INCLUDE(),
SLE_VAR(Station, train_station.tile, SLE_UINT32),
@@ -425,14 +425,14 @@ static const SaveLoad _station_desc[] = {
SLE_REF(Station, truck_stops, REF_ROADSTOPS),
SLE_VAR(Station, dock_tile, SLE_UINT32),
SLE_VAR(Station, airport.tile, SLE_UINT32),
- SLE_CONDVAR(Station, airport.w, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION),
- SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, airport.w, SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION),
SLE_VAR(Station, airport.type, SLE_UINT8),
- SLE_CONDVAR(Station, airport.layout, SLE_UINT8, 145, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, airport.layout, SLE_UINT8, SLV_145, SL_MAX_VERSION),
SLE_VAR(Station, airport.flags, SLE_UINT64),
- SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, 145, SL_MAX_VERSION),
- SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 160),
- SLE_CONDREF(Station, airport.psa, REF_STORAGE, 161, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, SLV_145, SL_MAX_VERSION),
+ SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, SLV_145, SLV_161),
+ SLE_CONDREF(Station, airport.psa, REF_STORAGE, SLV_161, SL_MAX_VERSION),
SLE_VAR(Station, indtype, SLE_UINT8),
@@ -441,21 +441,21 @@ static const SaveLoad _station_desc[] = {
SLE_VAR(Station, last_vehicle_type, SLE_UINT8),
SLE_VAR(Station, had_vehicle_of_type, SLE_UINT8),
SLE_LST(Station, loading_vehicles, REF_VEHICLE),
- SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, 127, 198),
- SLE_CONDVAR(Station, always_accepted, SLE_UINT64, 199, SL_MAX_VERSION),
+ SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, SLV_127, SLV_EXTEND_CARGOTYPES),
+ SLE_CONDVAR(Station, always_accepted, SLE_UINT64, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION),
SLE_END()
};
static const SaveLoad _waypoint_desc[] = {
- SLE_WRITEBYTE(Waypoint, facilities, FACIL_WAYPOINT),
+ SLE_WRITEBYTE(Waypoint, facilities),
SLE_ST_INCLUDE(),
SLE_VAR(Waypoint, town_cn, SLE_UINT16),
- SLE_CONDVAR(Waypoint, train_station.tile, SLE_UINT32, 124, SL_MAX_VERSION),
- SLE_CONDVAR(Waypoint, train_station.w, SLE_FILE_U8 | SLE_VAR_U16, 124, SL_MAX_VERSION),
- SLE_CONDVAR(Waypoint, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, 124, SL_MAX_VERSION),
+ SLE_CONDVAR(Waypoint, train_station.tile, SLE_UINT32, SLV_124, SL_MAX_VERSION),
+ SLE_CONDVAR(Waypoint, train_station.w, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION),
+ SLE_CONDVAR(Waypoint, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION),
SLE_END()
};
@@ -522,7 +522,7 @@ static void Load_STNN()
{
_num_flows = 0;
- uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
+ uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
int index;
while ((index = SlIterateArray()) != -1) {
bool waypoint = (SlReadByte() & FACIL_WAYPOINT) != 0;
@@ -534,7 +534,7 @@ static void Load_STNN()
Station *st = Station::From(bst);
/* Before savegame version 161, persistent storages were not stored in a pool. */
- if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(145) && st->facilities & FACIL_AIRPORT) {
+ if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_145) && st->facilities & FACIL_AIRPORT) {
/* Store the old persistent storage. The GRFID will be added later. */
assert(PersistentStorage::CanAllocateItem());
st->airport.psa = new PersistentStorage(0, 0, 0);
@@ -555,7 +555,7 @@ static void Load_STNN()
}
prev_source = flow.source;
}
- if (IsSavegameVersionBefore(183)) {
+ if (IsSavegameVersionBefore(SLV_183)) {
SwapPackets(&st->goods[i]);
} else {
StationCargoPair pair;
@@ -581,14 +581,14 @@ static void Load_STNN()
static void Ptrs_STNN()
{
/* Don't run when savegame version lower than 123. */
- if (IsSavegameVersionBefore(123)) return;
+ if (IsSavegameVersionBefore(SLV_123)) return;
- uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
+ uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
Station *st;
FOR_ALL_STATIONS(st) {
for (CargoID i = 0; i < num_cargo; i++) {
GoodsEntry *ge = &st->goods[i];
- if (IsSavegameVersionBefore(183)) {
+ if (IsSavegameVersionBefore(SLV_183)) {
SwapPackets(ge);
SlObject(ge, GetGoodsDesc());
SwapPackets(ge);
diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp
index 04980c7c37..1396d25aee 100644
--- a/src/saveload/storage_sl.cpp
+++ b/src/saveload/storage_sl.cpp
@@ -17,9 +17,9 @@
/** Description of the data to save and load in #PersistentStorage. */
static const SaveLoad _storage_desc[] = {
- SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, 161, 200),
- SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, 201, SL_MAX_VERSION),
+ SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, SLV_161, SLV_EXTEND_PERSISTENT_STORAGE),
+ SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, SLV_EXTEND_PERSISTENT_STORAGE, SL_MAX_VERSION),
SLE_END()
};
diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp
index 87e3720a62..f9bbf34b9b 100644
--- a/src/saveload/story_sl.cpp
+++ b/src/saveload/story_sl.cpp
@@ -19,7 +19,7 @@
/** Called after load to trash broken pages. */
void AfterLoadStoryBook()
{
- if (IsSavegameVersionBefore(185)) {
+ if (IsSavegameVersionBefore(SLV_185)) {
/* Trash all story pages and page elements because
* they were saved with wrong data types.
*/
@@ -29,11 +29,11 @@ void AfterLoadStoryBook()
}
static const SaveLoad _story_page_elements_desc[] = {
- SLE_CONDVAR(StoryPageElement, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 184),
- SLE_CONDVAR(StoryPageElement, sort_value, SLE_UINT32, 185, SL_MAX_VERSION),
+ SLE_CONDVAR(StoryPageElement, sort_value, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_185),
+ SLE_CONDVAR(StoryPageElement, sort_value, SLE_UINT32, SLV_185, SL_MAX_VERSION),
SLE_VAR(StoryPageElement, page, SLE_UINT16),
- SLE_CONDVAR(StoryPageElement, type, SLE_FILE_U16 | SLE_VAR_U8, 0, 184),
- SLE_CONDVAR(StoryPageElement, type, SLE_UINT8, 185, SL_MAX_VERSION),
+ SLE_CONDVAR(StoryPageElement, type, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_185),
+ SLE_CONDVAR(StoryPageElement, type, SLE_UINT8, SLV_185, SL_MAX_VERSION),
SLE_VAR(StoryPageElement, referenced_id, SLE_UINT32),
SLE_STR(StoryPageElement, text, SLE_STR | SLF_ALLOW_CONTROL, 0),
SLE_END()
@@ -66,11 +66,11 @@ static void Load_STORY_PAGE_ELEMENT()
}
static const SaveLoad _story_pages_desc[] = {
- SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 184),
- SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32, 185, SL_MAX_VERSION),
+ SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_185),
+ SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32, SLV_185, SL_MAX_VERSION),
SLE_VAR(StoryPage, date, SLE_UINT32),
- SLE_CONDVAR(StoryPage, company, SLE_FILE_U16 | SLE_VAR_U8, 0, 184),
- SLE_CONDVAR(StoryPage, company, SLE_UINT8, 185, SL_MAX_VERSION),
+ SLE_CONDVAR(StoryPage, company, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_185),
+ SLE_CONDVAR(StoryPage, company, SLE_UINT8, SLV_185, SL_MAX_VERSION),
SLE_STR(StoryPage, title, SLE_STR | SLF_ALLOW_CONTROL, 0),
SLE_END()
};
diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp
index aa2fdd3e60..d8fe81d113 100644
--- a/src/saveload/strings_sl.cpp
+++ b/src/saveload/strings_sl.cpp
@@ -63,7 +63,7 @@ char *CopyFromOldName(StringID id)
/* Is this name an (old) custom name? */
if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return NULL;
- if (IsSavegameVersionBefore(37)) {
+ if (IsSavegameVersionBefore(SLV_37)) {
/* Allow for expansion when converted to UTF-8. */
char tmp[LEN_OLD_STRINGS * MAX_CHAR_LENGTH];
uint offs = _savegame_type == SGT_TTO ? LEN_OLD_STRINGS_TTO * GB(id, 0, 8) : LEN_OLD_STRINGS * GB(id, 0, 9);
diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp
index f6d650468c..6f10ec8d09 100644
--- a/src/saveload/subsidy_sl.cpp
+++ b/src/saveload/subsidy_sl.cpp
@@ -19,13 +19,13 @@
static const SaveLoad _subsidies_desc[] = {
SLE_VAR(Subsidy, cargo_type, SLE_UINT8),
SLE_VAR(Subsidy, remaining, SLE_UINT8),
- SLE_CONDVAR(Subsidy, awarded, SLE_UINT8, 125, SL_MAX_VERSION),
- SLE_CONDVAR(Subsidy, src_type, SLE_UINT8, 125, SL_MAX_VERSION),
- SLE_CONDVAR(Subsidy, dst_type, SLE_UINT8, 125, SL_MAX_VERSION),
- SLE_CONDVAR(Subsidy, src, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
- SLE_CONDVAR(Subsidy, src, SLE_UINT16, 5, SL_MAX_VERSION),
- SLE_CONDVAR(Subsidy, dst, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
- SLE_CONDVAR(Subsidy, dst, SLE_UINT16, 5, SL_MAX_VERSION),
+ SLE_CONDVAR(Subsidy, awarded, SLE_UINT8, SLV_125, SL_MAX_VERSION),
+ SLE_CONDVAR(Subsidy, src_type, SLE_UINT8, SLV_125, SL_MAX_VERSION),
+ SLE_CONDVAR(Subsidy, dst_type, SLE_UINT8, SLV_125, SL_MAX_VERSION),
+ SLE_CONDVAR(Subsidy, src, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Subsidy, src, SLE_UINT16, SLV_5, SL_MAX_VERSION),
+ SLE_CONDVAR(Subsidy, dst, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Subsidy, dst, SLE_UINT16, SLV_5, SL_MAX_VERSION),
SLE_END()
};
diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp
index 13438d85bf..a31c886ec2 100644
--- a/src/saveload/town_sl.cpp
+++ b/src/saveload/town_sl.cpp
@@ -116,105 +116,105 @@ void UpdateHousesAndTowns()
/** Save and load of towns. */
static const SaveLoad _town_desc[] = {
- SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Town, xy, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Town, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION),
- SLE_CONDNULL(2, 0, 2), ///< population, no longer in use
- SLE_CONDNULL(4, 3, 84), ///< population, no longer in use
- SLE_CONDNULL(2, 0, 91), ///< num_houses, no longer in use
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_3), ///< population, no longer in use
+ SLE_CONDNULL(4, SLV_3, SLV_85), ///< population, no longer in use
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_92), ///< num_houses, no longer in use
- SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, 66, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, SLV_66, SL_MAX_VERSION),
SLE_VAR(Town, townnametype, SLE_UINT16),
SLE_VAR(Town, townnameparts, SLE_UINT32),
- SLE_CONDSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
+ SLE_CONDSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
SLE_VAR(Town, flags, SLE_UINT8),
- SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, 0, 103),
- SLE_CONDVAR(Town, statues, SLE_UINT16, 104, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104),
+ SLE_CONDVAR(Town, statues, SLE_UINT16, SLV_104, SL_MAX_VERSION),
- SLE_CONDNULL(1, 0, 1), ///< sort_index, no longer in use
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_2), ///< sort_index, no longer in use
- SLE_CONDVAR(Town, have_ratings, SLE_FILE_U8 | SLE_VAR_U16, 0, 103),
- SLE_CONDVAR(Town, have_ratings, SLE_UINT16, 104, SL_MAX_VERSION),
- SLE_CONDARR(Town, ratings, SLE_INT16, 8, 0, 103),
- SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, have_ratings, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104),
+ SLE_CONDVAR(Town, have_ratings, SLE_UINT16, SLV_104, SL_MAX_VERSION),
+ SLE_CONDARR(Town, ratings, SLE_INT16, 8, SL_MIN_VERSION, SLV_104),
+ SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, SLV_104, SL_MAX_VERSION),
/* failed bribe attempts are stored since savegame format 4 */
- SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 103),
- SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, 104, SL_MAX_VERSION),
+ SLE_CONDARR(Town, unwanted, SLE_INT8, 8, SLV_4, SLV_104),
+ SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, SLV_104, SL_MAX_VERSION),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
- SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, 9, 164),
- SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, 9, 164),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, SLV_9, SLV_165),
+ SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, SLV_9, SLV_165),
- SLE_CONDNULL(2, 0, 163), ///< pct_pass_transported / pct_mail_transported, now computed on the fly
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly
- SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, 0, 164),
- SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, 0, 164),
- SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, 0, 164),
- SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, 0, 164),
+ SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
+ SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
+ SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
+ SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
- SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, 165, SL_MAX_VERSION),
+ SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION),
- SLE_CONDSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, 0, 168, SL_MAX_VERSION),
+ SLE_CONDSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_168, SL_MAX_VERSION),
- SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, 0, 53),
- SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, 0, 53),
- SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, 0, 53),
+ SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_54),
+ SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_54),
+ SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, SL_MIN_VERSION, SLV_54),
- SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, 54, SL_MAX_VERSION),
- SLE_CONDVAR(Town, grow_counter, SLE_UINT16, 54, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, SLV_54, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, grow_counter, SLE_UINT16, SLV_54, SL_MAX_VERSION),
- SLE_CONDVAR(Town, growth_rate, SLE_FILE_I16 | SLE_VAR_U16, 54, 164),
- SLE_CONDVAR(Town, growth_rate, SLE_UINT16, 165, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, growth_rate, SLE_FILE_I16 | SLE_VAR_U16, SLV_54, SLV_165),
+ SLE_CONDVAR(Town, growth_rate, SLE_UINT16, SLV_165, SL_MAX_VERSION),
SLE_VAR(Town, fund_buildings_months, SLE_UINT8),
SLE_VAR(Town, road_build_months, SLE_UINT8),
- SLE_CONDVAR(Town, exclusivity, SLE_UINT8, 2, SL_MAX_VERSION),
- SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, exclusivity, SLE_UINT8, SLV_2, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, SLV_2, SL_MAX_VERSION),
- SLE_CONDVAR(Town, larger_town, SLE_BOOL, 56, SL_MAX_VERSION),
- SLE_CONDVAR(Town, layout, SLE_UINT8, 113, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, larger_town, SLE_BOOL, SLV_56, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, layout, SLE_UINT8, SLV_113, SL_MAX_VERSION),
- SLE_CONDLST(Town, psa_list, REF_STORAGE, 161, SL_MAX_VERSION),
+ SLE_CONDLST(Town, psa_list, REF_STORAGE, SLV_161, SL_MAX_VERSION),
- SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, 166, 198),
- SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, 199, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, SLV_166, SLV_EXTEND_CARGOTYPES),
+ SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION),
/* reserve extra space in savegame here. (currently 30 bytes) */
- SLE_CONDNULL(30, 2, SL_MAX_VERSION),
+ SLE_CONDNULL(30, SLV_2, SL_MAX_VERSION),
SLE_END()
};
static const SaveLoad _town_supplied_desc[] = {
- SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT32, 165, SL_MAX_VERSION),
- SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT32, 165, SL_MAX_VERSION),
- SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT32, 165, SL_MAX_VERSION),
- SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT32, 165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT32, SLV_165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT32, SLV_165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT32, SLV_165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT32, SLV_165, SL_MAX_VERSION),
SLE_END()
};
static const SaveLoad _town_received_desc[] = {
- SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT16, 165, SL_MAX_VERSION),
- SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT16, 165, SL_MAX_VERSION),
- SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT16, 165, SL_MAX_VERSION),
- SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT16, 165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT16, SLV_165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT16, SLV_165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT16, SLV_165, SL_MAX_VERSION),
+ SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT16, SLV_165, SL_MAX_VERSION),
SLE_END()
};
@@ -253,7 +253,7 @@ static void RealSave_Town(Town *t)
SlObject(&t->received[i], _town_received_desc);
}
- if (IsSavegameVersionBefore(166)) return;
+ if (IsSavegameVersionBefore(SLV_166)) return;
SlObject(&t->cargo_accepted, GetTileMatrixDesc());
if (t->cargo_accepted.area.w != 0) {
@@ -275,7 +275,7 @@ static void Save_TOWN()
static void Load_TOWN()
{
int index;
- uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
+ uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
while ((index = SlIterateArray()) != -1) {
Town *t = new (index) Town();
@@ -292,7 +292,7 @@ static void Load_TOWN()
SlErrorCorrupt("Invalid town name generator");
}
- if (IsSavegameVersionBefore(166)) continue;
+ if (IsSavegameVersionBefore(SLV_166)) continue;
SlObject(&t->cargo_accepted, GetTileMatrixDesc());
if (t->cargo_accepted.area.w != 0) {
@@ -310,7 +310,7 @@ static void Load_TOWN()
static void Ptrs_TOWN()
{
/* Don't run when savegame version lower than 161. */
- if (IsSavegameVersionBefore(161)) return;
+ if (IsSavegameVersionBefore(SLV_161)) return;
Town *t;
FOR_ALL_TOWNS(t) {
diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp
index bb3db3fe3e..540416586c 100644
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -273,7 +273,7 @@ void AfterLoadVehicles(bool part_of_load)
FOR_ALL_VEHICLES(v) {
if (v->orders.old != NULL) {
- if (IsSavegameVersionBefore(105)) { // Pre-105 didn't save an OrderList
+ if (IsSavegameVersionBefore(SLV_105)) { // Pre-105 didn't save an OrderList
if (mapping[v->orders.old] == NULL) {
/* This adds the whole shared vehicle chain for case b */
@@ -285,7 +285,7 @@ void AfterLoadVehicles(bool part_of_load)
} else {
v->orders.list = mapping[v->orders.old];
/* For old games (case a) we must create the shared vehicle chain */
- if (IsSavegameVersionBefore(5, 2)) {
+ if (IsSavegameVersionBefore(SLV_5, 2)) {
v->AddToShared(v->orders.list->GetFirstSharedVehicle());
}
}
@@ -308,7 +308,7 @@ void AfterLoadVehicles(bool part_of_load)
}
if (part_of_load) {
- if (IsSavegameVersionBefore(105)) {
+ if (IsSavegameVersionBefore(SLV_105)) {
/* Before 105 there was no order for shared orders, thus it messed up horribly */
FOR_ALL_VEHICLES(v) {
if (v->First() != v || v->orders.list != NULL || v->previous_shared != NULL || v->next_shared == NULL) continue;
@@ -322,7 +322,7 @@ void AfterLoadVehicles(bool part_of_load)
}
}
- if (IsSavegameVersionBefore(157)) {
+ if (IsSavegameVersionBefore(SLV_157)) {
/* The road vehicle subtype was converted to a flag. */
RoadVehicle *rv;
FOR_ALL_ROADVEHICLES(rv) {
@@ -339,7 +339,7 @@ void AfterLoadVehicles(bool part_of_load)
}
}
- if (IsSavegameVersionBefore(160)) {
+ if (IsSavegameVersionBefore(SLV_160)) {
/* In some old savegames there might be some "crap" stored. */
FOR_ALL_VEHICLES(v) {
if (!v->IsPrimaryVehicle() && v->type != VEH_DISASTER) {
@@ -349,14 +349,14 @@ void AfterLoadVehicles(bool part_of_load)
}
}
- if (IsSavegameVersionBefore(162)) {
+ if (IsSavegameVersionBefore(SLV_162)) {
/* Set the vehicle-local cargo age counter from the old global counter. */
FOR_ALL_VEHICLES(v) {
v->cargo_age_counter = _age_cargo_skip_counter;
}
}
- if (IsSavegameVersionBefore(180)) {
+ if (IsSavegameVersionBefore(SLV_180)) {
/* Set service interval flags */
FOR_ALL_VEHICLES(v) {
if (!v->IsPrimaryVehicle()) continue;
@@ -368,6 +368,25 @@ void AfterLoadVehicles(bool part_of_load)
v->SetServiceIntervalIsPercent(c->settings.vehicle.servint_ispercent);
}
}
+
+ if (IsSavegameVersionBefore(SLV_SHIP_ROTATION)) {
+ /* Ship rotation added */
+ Ship *s;
+ FOR_ALL_SHIPS(s) {
+ s->rotation = s->direction;
+ }
+ } else {
+ Ship *s;
+ FOR_ALL_SHIPS(s) {
+ if (s->rotation == s->direction) continue;
+ /* In case we are rotating on gameload, set the rotation position to
+ * the current position, otherwise the applied workaround offset would
+ * be with respect to 0,0.
+ */
+ s->rotation_x_pos = s->x_pos;
+ s->rotation_y_pos = s->y_pos;
+ }
+ }
}
CheckValidVehicles();
@@ -408,7 +427,7 @@ void AfterLoadVehicles(bool part_of_load)
}
/* Stop non-front engines */
- if (part_of_load && IsSavegameVersionBefore(112)) {
+ if (part_of_load && IsSavegameVersionBefore(SLV_112)) {
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_TRAIN) {
Train *t = Train::From(v);
@@ -421,7 +440,7 @@ void AfterLoadVehicles(bool part_of_load)
}
/* trains weren't stopping gradually in old OTTD versions (and TTO/TTD)
* other vehicle types didn't have zero speed while stopped (even in 'recent' OTTD versions) */
- if ((v->vehstatus & VS_STOPPED) && (v->type != VEH_TRAIN || IsSavegameVersionBefore(2, 1))) {
+ if ((v->vehstatus & VS_STOPPED) && (v->type != VEH_TRAIN || IsSavegameVersionBefore(SLV_2, 1))) {
v->cur_speed = 0;
}
}
@@ -578,160 +597,160 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_VAR(Vehicle, subtype, SLE_UINT8),
SLE_REF(Vehicle, next, REF_VEHICLE_OLD),
- SLE_CONDVAR(Vehicle, name, SLE_NAME, 0, 83),
- SLE_CONDSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, 0, 7),
- SLE_CONDVAR(Vehicle, unitnumber, SLE_UINT16, 8, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, name, SLE_NAME, SL_MIN_VERSION, SLV_84),
+ SLE_CONDSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_8),
+ SLE_CONDVAR(Vehicle, unitnumber, SLE_UINT16, SLV_8, SL_MAX_VERSION),
SLE_VAR(Vehicle, owner, SLE_UINT8),
- SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163),
- SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164),
+ SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION),
SLE_VAR(Vehicle, direction, SLE_UINT8),
- SLE_CONDNULL(2, 0, 57),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_58),
SLE_VAR(Vehicle, spritenum, SLE_UINT8),
- SLE_CONDNULL(5, 0, 57),
+ SLE_CONDNULL(5, SL_MIN_VERSION, SLV_58),
SLE_VAR(Vehicle, engine_type, SLE_UINT16),
- SLE_CONDNULL(2, 0, 151),
+ SLE_CONDNULL(2, SL_MIN_VERSION, SLV_152),
SLE_VAR(Vehicle, cur_speed, SLE_UINT16),
SLE_VAR(Vehicle, subspeed, SLE_UINT8),
SLE_VAR(Vehicle, acceleration, SLE_UINT8),
SLE_VAR(Vehicle, progress, SLE_UINT8),
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
- SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
- SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, 5, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, last_loading_station, SLE_UINT16, 182, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, SLV_5, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, last_loading_station, SLE_UINT16, SLV_182, SL_MAX_VERSION),
SLE_VAR(Vehicle, cargo_type, SLE_UINT8),
- SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, 35, SL_MAX_VERSION),
- SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67),
- SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
- SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67),
- SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67),
+ SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, SLV_35, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_days, SLE_UINT8, SL_MIN_VERSION, SLV_68),
+ SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_7),
+ SLEG_CONDVAR( _cargo_source, SLE_UINT16, SLV_7, SLV_68),
+ SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, SLV_44, SLV_68),
SLE_VAR(Vehicle, cargo_cap, SLE_UINT16),
- SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, 182, SL_MAX_VERSION),
- SLEG_CONDVAR( _cargo_count, SLE_UINT16, 0, 67),
- SLE_CONDLST(Vehicle, cargo.packets, REF_CARGO_PACKET, 68, SL_MAX_VERSION),
- SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, 181, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, 162, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, SLV_182, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_count, SLE_UINT16, SL_MIN_VERSION, SLV_68),
+ SLE_CONDLST(Vehicle, cargo.packets, REF_CARGO_PACKET, SLV_68, SL_MAX_VERSION),
+ SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, SLV_181, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, SLV_162, SL_MAX_VERSION),
SLE_VAR(Vehicle, day_counter, SLE_UINT8),
SLE_VAR(Vehicle, tick_counter, SLE_UINT8),
- SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, SLV_88, SL_MAX_VERSION),
SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8),
- SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, 158, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, SLV_158, SL_MAX_VERSION),
/* num_orders is now part of OrderList and is not saved but counted */
- SLE_CONDNULL(1, 0, 104),
+ SLE_CONDNULL(1, SL_MIN_VERSION, SLV_105),
/* This next line is for version 4 and prior compatibility.. it temporarily reads
type and flags (which were both 4 bits) into type. Later on this is
converted correctly */
- SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 0, 4),
- SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
+ SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
/* Orders for version 5 and on */
- SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 5, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, current_order.flags, SLE_UINT8, 5, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, 5, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, SLV_5, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.flags, SLE_UINT8, SLV_5, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, SLV_5, SL_MAX_VERSION),
/* Refit in current order */
- SLE_CONDVAR(Vehicle, current_order.refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION),
- SLE_CONDNULL(1, 36, 181), // refit_subtype
+ SLE_CONDVAR(Vehicle, current_order.refit_cargo, SLE_UINT8, SLV_36, SL_MAX_VERSION),
+ SLE_CONDNULL(1, SLV_36, SLV_182), // refit_subtype
/* Timetable in current order */
- SLE_CONDVAR(Vehicle, current_order.wait_time, SLE_UINT16, 67, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, current_order.travel_time, SLE_UINT16, 67, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, current_order.max_speed, SLE_UINT16, 174, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, timetable_start, SLE_INT32, 129, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.wait_time, SLE_UINT16, SLV_67, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.travel_time, SLE_UINT16, SLV_67, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.max_speed, SLE_UINT16, SLV_174, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, timetable_start, SLE_INT32, SLV_129, SL_MAX_VERSION),
- SLE_CONDREF(Vehicle, orders, REF_ORDER, 0, 104),
- SLE_CONDREF(Vehicle, orders, REF_ORDERLIST, 105, SL_MAX_VERSION),
+ SLE_CONDREF(Vehicle, orders, REF_ORDER, SL_MIN_VERSION, SLV_105),
+ SLE_CONDREF(Vehicle, orders, REF_ORDERLIST, SLV_105, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Vehicle, max_age, SLE_INT32, 31, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32, 31, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 0, 30),
- SLE_CONDVAR(Vehicle, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 31, 179),
- SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 180, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Vehicle, age, SLE_INT32, SLV_31, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Vehicle, max_age, SLE_INT32, SLV_31, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32, SLV_31, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Vehicle, service_interval, SLE_FILE_U32 | SLE_VAR_U16, SLV_31, SLV_180),
+ SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, SLV_180, SL_MAX_VERSION),
SLE_VAR(Vehicle, reliability, SLE_UINT16),
SLE_VAR(Vehicle, reliability_spd_dec, SLE_UINT16),
SLE_VAR(Vehicle, breakdown_ctr, SLE_UINT8),
SLE_VAR(Vehicle, breakdown_delay, SLE_UINT8),
SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8),
SLE_VAR(Vehicle, breakdown_chance, SLE_UINT8),
- SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Vehicle, build_year, SLE_INT32, 31, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Vehicle, build_year, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLE_VAR(Vehicle, load_unload_ticks, SLE_UINT16),
- SLEG_CONDVAR( _cargo_paid_for, SLE_UINT16, 45, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 40, 179),
- SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT16, 180, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_paid_for, SLE_UINT16, SLV_45, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, SLV_40, SLV_180),
+ SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT16, SLV_180, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
- SLE_CONDVAR(Vehicle, profit_this_year, SLE_INT64, 65, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
- SLE_CONDVAR(Vehicle, profit_last_year, SLE_INT64, 65, SL_MAX_VERSION),
- SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64, 51, 64),
- SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67),
- SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, 51, 67),
- SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
- SLE_CONDVAR(Vehicle, value, SLE_INT64, 65, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65),
+ SLE_CONDVAR(Vehicle, profit_this_year, SLE_INT64, SLV_65, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65),
+ SLE_CONDVAR(Vehicle, profit_last_year, SLE_INT64, SLV_65, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64, SLV_51, SLV_65),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, SLV_65, SLV_68),
+ SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, SLV_51, SLV_68),
+ SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65),
+ SLE_CONDVAR(Vehicle, value, SLE_INT64, SLV_65, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, 2, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, SLV_2, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, SLV_2, SL_MAX_VERSION),
- SLE_CONDREF(Vehicle, next_shared, REF_VEHICLE, 2, SL_MAX_VERSION),
- SLE_CONDNULL(2, 2, 68),
- SLE_CONDNULL(4, 69, 100),
+ SLE_CONDREF(Vehicle, next_shared, REF_VEHICLE, SLV_2, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SLV_2, SLV_69),
+ SLE_CONDNULL(4, SLV_69, SLV_101),
- SLE_CONDVAR(Vehicle, group_id, SLE_UINT16, 60, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, group_id, SLE_UINT16, SLV_60, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, 67, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, SLV_67, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, SLV_67, SL_MAX_VERSION),
- SLE_CONDNULL(10, 2, 143), // old reserved space
+ SLE_CONDNULL(10, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _train_desc[] = {
- SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN),
+ SLE_WRITEBYTE(Vehicle, type),
SLE_VEH_INCLUDE(),
SLE_VAR(Train, crash_anim_pos, SLE_UINT16),
SLE_VAR(Train, force_proceed, SLE_UINT8),
SLE_VAR(Train, railtype, SLE_UINT8),
SLE_VAR(Train, track, SLE_UINT8),
- SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, 2, 99),
- SLE_CONDVAR(Train, flags, SLE_UINT16, 100, SL_MAX_VERSION),
- SLE_CONDNULL(2, 2, 59),
+ SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, SLV_2, SLV_100),
+ SLE_CONDVAR(Train, flags, SLE_UINT16, SLV_100, SL_MAX_VERSION),
+ SLE_CONDNULL(2, SLV_2, SLV_60),
- SLE_CONDVAR(Train, wait_counter, SLE_UINT16, 136, SL_MAX_VERSION),
+ SLE_CONDVAR(Train, wait_counter, SLE_UINT16, SLV_136, SL_MAX_VERSION),
- SLE_CONDNULL(2, 2, 19),
- SLE_CONDVAR(Train, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION),
- SLE_CONDNULL(11, 2, 143), // old reserved space
+ SLE_CONDNULL(2, SLV_2, SLV_20),
+ SLE_CONDVAR(Train, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION),
+ SLE_CONDNULL(11, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _roadveh_desc[] = {
- SLE_WRITEBYTE(Vehicle, type, VEH_ROAD),
+ SLE_WRITEBYTE(Vehicle, type),
SLE_VEH_INCLUDE(),
SLE_VAR(RoadVehicle, state, SLE_UINT8),
SLE_VAR(RoadVehicle, frame, SLE_UINT8),
@@ -741,115 +760,117 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16),
SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8),
- SLE_CONDNULL(2, 6, 68),
- SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION),
- SLE_CONDNULL(4, 69, 130),
- SLE_CONDNULL(2, 6, 130),
- SLE_CONDNULL(16, 2, 143), // old reserved space
+ SLE_CONDNULL(2, SLV_6, SLV_69),
+ SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION),
+ SLE_CONDNULL(4, SLV_69, SLV_131),
+ SLE_CONDNULL(2, SLV_6, SLV_131),
+ SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _ship_desc[] = {
- SLE_WRITEBYTE(Vehicle, type, VEH_SHIP),
+ SLE_WRITEBYTE(Vehicle, type),
SLE_VEH_INCLUDE(),
- SLE_VAR(Ship, state, SLE_UINT8),
+ SLE_VAR(Ship, state, SLE_UINT8),
+ SLE_CONDDEQUE(Ship, path, SLE_UINT8, SLV_SHIP_PATH_CACHE, SL_MAX_VERSION),
+ SLE_CONDVAR(Ship, rotation, SLE_UINT8, SLV_SHIP_ROTATION, SL_MAX_VERSION),
- SLE_CONDNULL(16, 2, 143), // old reserved space
+ SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _aircraft_desc[] = {
- SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT),
+ SLE_WRITEBYTE(Vehicle, type),
SLE_VEH_INCLUDE(),
SLE_VAR(Aircraft, crashed_counter, SLE_UINT16),
SLE_VAR(Aircraft, pos, SLE_UINT8),
- SLE_CONDVAR(Aircraft, targetairport, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
- SLE_CONDVAR(Aircraft, targetairport, SLE_UINT16, 5, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, targetairport, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Aircraft, targetairport, SLE_UINT16, SLV_5, SL_MAX_VERSION),
SLE_VAR(Aircraft, state, SLE_UINT8),
- SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION),
- SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION),
- SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, SLV_2, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, SLV_2, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, SLV_2, SL_MAX_VERSION),
- SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, 136, SL_MAX_VERSION),
- SLE_CONDVAR(Aircraft, flags, SLE_UINT8, 167, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, SLV_136, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, flags, SLE_UINT8, SLV_167, SL_MAX_VERSION),
- SLE_CONDNULL(13, 2, 143), // old reserved space
+ SLE_CONDNULL(13, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _special_desc[] = {
- SLE_WRITEBYTE(Vehicle, type, VEH_EFFECT),
+ SLE_WRITEBYTE(Vehicle, type),
SLE_VAR(Vehicle, subtype, SLE_UINT8),
- SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
- SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
- SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163),
- SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164),
+ SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION),
SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32),
- SLE_CONDNULL(5, 0, 57),
+ SLE_CONDNULL(5, SL_MIN_VERSION, SLV_59),
SLE_VAR(Vehicle, progress, SLE_UINT8),
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
SLE_VAR(EffectVehicle, animation_state, SLE_UINT16),
SLE_VAR(EffectVehicle, animation_substate, SLE_UINT8),
- SLE_CONDVAR(Vehicle, spritenum, SLE_UINT8, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, spritenum, SLE_UINT8, SLV_2, SL_MAX_VERSION),
- SLE_CONDNULL(15, 2, 143), // old reserved space
+ SLE_CONDNULL(15, SLV_2, SLV_144), // old reserved space
SLE_END()
};
static const SaveLoad _disaster_desc[] = {
- SLE_WRITEBYTE(Vehicle, type, VEH_DISASTER),
+ SLE_WRITEBYTE(Vehicle, type),
SLE_REF(Vehicle, next, REF_VEHICLE_OLD),
SLE_VAR(Vehicle, subtype, SLE_UINT8),
- SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, 6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
- SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
- SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163),
- SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164),
+ SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION),
SLE_VAR(Vehicle, direction, SLE_UINT8),
- SLE_CONDNULL(5, 0, 57),
+ SLE_CONDNULL(5, SL_MIN_VERSION, SLV_58),
SLE_VAR(Vehicle, owner, SLE_UINT8),
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
- SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
- SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, 5, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
+ SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, SLV_5, SL_MAX_VERSION),
SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32),
- SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
- SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31),
+ SLE_CONDVAR(Vehicle, age, SLE_INT32, SLV_31, SL_MAX_VERSION),
SLE_VAR(Vehicle, tick_counter, SLE_UINT8),
- SLE_CONDVAR(DisasterVehicle, image_override, SLE_FILE_U16 | SLE_VAR_U32, 0, 190),
- SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, 191, SL_MAX_VERSION),
- SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, 0, 190),
- SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, 191, SL_MAX_VERSION),
- SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, 194, SL_MAX_VERSION),
+ SLE_CONDVAR(DisasterVehicle, image_override, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_191),
+ SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, SLV_191, SL_MAX_VERSION),
+ SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_191),
+ SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, SLV_191, SL_MAX_VERSION),
+ SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, SLV_194, SL_MAX_VERSION),
- SLE_CONDNULL(16, 2, 143), // old reserved space
+ SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
SLE_END()
};
@@ -910,13 +931,13 @@ void Load_VEHS()
}
/* Old savegames used 'last_station_visited = 0xFF' */
- if (IsSavegameVersionBefore(5) && v->last_station_visited == 0xFF) {
+ if (IsSavegameVersionBefore(SLV_5) && v->last_station_visited == 0xFF) {
v->last_station_visited = INVALID_STATION;
}
- if (IsSavegameVersionBefore(182)) v->last_loading_station = INVALID_STATION;
+ if (IsSavegameVersionBefore(SLV_182)) v->last_loading_station = INVALID_STATION;
- if (IsSavegameVersionBefore(5)) {
+ if (IsSavegameVersionBefore(SLV_5)) {
/* Convert the current_order.type (which is a mix of type and flags, because
* in those versions, they both were 4 bits big) to type and flags */
v->current_order.flags = GB(v->current_order.type, 4, 4);
@@ -924,7 +945,7 @@ void Load_VEHS()
}
/* Advanced vehicle lists got added */
- if (IsSavegameVersionBefore(60)) v->group_id = DEFAULT_GROUP;
+ if (IsSavegameVersionBefore(SLV_60)) v->group_id = DEFAULT_GROUP;
}
}
diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp
index 0f93969853..ae74d812b1 100644
--- a/src/saveload/waypoint_sl.cpp
+++ b/src/saveload/waypoint_sl.cpp
@@ -70,7 +70,7 @@ void MoveWaypointsToBaseStations()
* waypoints to make way for storing the index in m2. The custom graphics
* id which was stored in m4 is now saved as a grf/id reference in the
* waypoint struct. */
- if (IsSavegameVersionBefore(17)) {
+ if (IsSavegameVersionBefore(SLV_17)) {
for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) {
if (wp->delete_ctr != 0) continue; // The waypoint was deleted
@@ -113,7 +113,7 @@ void MoveWaypointsToBaseStations()
TileIndex t = wp->xy;
if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp->index) {
/* The tile might've been reserved! */
- bool reserved = !IsSavegameVersionBefore(100) && HasBit(_m[t].m5, 4);
+ bool reserved = !IsSavegameVersionBefore(SLV_100) && HasBit(_m[t].m5, 4);
/* The tile really has our waypoint, so reassign the map array */
MakeRailWaypoint(t, GetTileOwner(t), new_wp->index, (Axis)GB(_m[t].m5, 0, 1), 0, GetRailType(t));
@@ -150,21 +150,21 @@ void MoveWaypointsToBaseStations()
}
static const SaveLoad _old_waypoint_desc[] = {
- SLE_CONDVAR(OldWaypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
- SLE_CONDVAR(OldWaypoint, xy, SLE_UINT32, 6, SL_MAX_VERSION),
- SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16, 12, 121),
- SLE_CONDREF(OldWaypoint, town, REF_TOWN, 122, SL_MAX_VERSION),
- SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, 12, 88),
- SLE_CONDVAR(OldWaypoint, town_cn, SLE_UINT16, 89, SL_MAX_VERSION),
- SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, 0, 83),
- SLE_CONDSTR(OldWaypoint, name, SLE_STR, 0, 84, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
+ SLE_CONDVAR(OldWaypoint, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16, SLV_12, SLV_122),
+ SLE_CONDREF(OldWaypoint, town, REF_TOWN, SLV_122, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, SLV_12, SLV_89),
+ SLE_CONDVAR(OldWaypoint, town_cn, SLE_UINT16, SLV_89, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, SL_MIN_VERSION, SLV_84),
+ SLE_CONDSTR(OldWaypoint, name, SLE_STR, 0, SLV_84, SL_MAX_VERSION),
SLE_VAR(OldWaypoint, delete_ctr, SLE_UINT8),
- SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 30),
- SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32, 31, SL_MAX_VERSION),
- SLE_CONDVAR(OldWaypoint, localidx, SLE_UINT8, 3, SL_MAX_VERSION),
- SLE_CONDVAR(OldWaypoint, grfid, SLE_UINT32, 17, SL_MAX_VERSION),
- SLE_CONDVAR(OldWaypoint, owner, SLE_UINT8, 101, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, SLV_3, SLV_31),
+ SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32, SLV_31, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, localidx, SLE_UINT8, SLV_3, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, grfid, SLE_UINT32, SLV_17, SL_MAX_VERSION),
+ SLE_CONDVAR(OldWaypoint, owner, SLE_UINT8, SLV_101, SL_MAX_VERSION),
SLE_END()
};
@@ -190,10 +190,10 @@ static void Ptrs_WAYP()
for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) {
SlObject(wp, _old_waypoint_desc);
- if (IsSavegameVersionBefore(12)) {
+ if (IsSavegameVersionBefore(SLV_12)) {
wp->town_cn = (wp->string_id & 0xC000) == 0xC000 ? (wp->string_id >> 8) & 0x3F : 0;
wp->town = ClosestTownFromTile(wp->xy, UINT_MAX);
- } else if (IsSavegameVersionBefore(122)) {
+ } else if (IsSavegameVersionBefore(SLV_122)) {
/* Only for versions 12 .. 122 */
if (!Town::IsValidID(wp->town_index)) {
/* Upon a corrupted waypoint we'll likely get here. The next step will be to
@@ -206,7 +206,7 @@ static void Ptrs_WAYP()
}
wp->town = Town::Get(wp->town_index);
}
- if (IsSavegameVersionBefore(84)) {
+ if (IsSavegameVersionBefore(SLV_84)) {
wp->name = CopyFromOldName(wp->string_id);
}
}
diff --git a/src/script/api/ai/ai_bridge.hpp.sq b/src/script/api/ai/ai_bridge.hpp.sq
index d09f56421b..9a9b223009 100644
--- a/src/script/api/ai/ai_bridge.hpp.sq
+++ b/src/script/api/ai/ai_bridge.hpp.sq
@@ -37,7 +37,7 @@ void SQAIBridge_Register(Squirrel *engine)
SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::IsValidBridge, "IsValidBridge", 2, ".i");
SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::IsBridgeTile, "IsBridgeTile", 2, ".i");
SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetBridgeID, "GetBridgeID", 2, ".i");
- SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 2, ".i");
+ SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 3, ".ii");
SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i");
SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetPrice, "GetPrice", 3, ".ii");
SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxLength, "GetMaxLength", 2, ".i");
diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp
index 03e9831a11..eb2b3a5013 100644
--- a/src/script/api/ai_changelog.hpp
+++ b/src/script/api/ai_changelog.hpp
@@ -21,6 +21,9 @@
* API additions:
* \li AIAirport::GetMonthlyMaintenanceCost
*
+ * Other changes:
+ * \li AIBridge::GetName takes one extra parameter to refer the vehicle type
+ *
* \b 1.8.0
*
* No changes
diff --git a/src/script/api/game/game_bridge.hpp.sq b/src/script/api/game/game_bridge.hpp.sq
index 029a3ab3d0..df0a945024 100644
--- a/src/script/api/game/game_bridge.hpp.sq
+++ b/src/script/api/game/game_bridge.hpp.sq
@@ -37,7 +37,7 @@ void SQGSBridge_Register(Squirrel *engine)
SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::IsValidBridge, "IsValidBridge", 2, ".i");
SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::IsBridgeTile, "IsBridgeTile", 2, ".i");
SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetBridgeID, "GetBridgeID", 2, ".i");
- SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 2, ".i");
+ SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 3, ".ii");
SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i");
SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetPrice, "GetPrice", 3, ".ii");
SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxLength, "GetMaxLength", 2, ".i");
diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp
index 7aad75b442..094449d73b 100644
--- a/src/script/api/game_changelog.hpp
+++ b/src/script/api/game_changelog.hpp
@@ -28,6 +28,9 @@
* \li GSViewport::ScrollClientTo
* \li GSGoal::QuestionClient
*
+ * Other changes:
+ * \li GSBridge::GetName takes one extra parameter to refer the vehicle type
+ *
* \b 1.8.0
*
* No changes
diff --git a/src/script/api/generate_widget.awk b/src/script/api/generate_widget.awk
index 81d9592d77..cdbe59d970 100644
--- a/src/script/api/generate_widget.awk
+++ b/src/script/api/generate_widget.awk
@@ -24,6 +24,8 @@ BEGIN {
skiptillend = 0;
}
+{ CR = (match($0, "\\r$") > 0 ? "\r" : "") }
+
/@enum/ {
print;
add_indent = gensub("[^ ]*", "", "g");
@@ -42,7 +44,7 @@ BEGIN {
active_comment = 0;
comment = "";
file = filearray[i];
- print add_indent "/* automatically generated from " file " */"
+ print add_indent "/* automatically generated from " file " */" CR
while ((getline < file) > 0) {
sub(rm_indent, "");
@@ -65,7 +67,7 @@ BEGIN {
}
# Forget doxygen comment, if no enum follows
- if (active_comment == 2 && $0 != "") {
+ if (active_comment == 2 && $0 != "" CR) {
active_comment = 0;
comment = "";
}
@@ -78,22 +80,21 @@ BEGIN {
sub(" *//", " //");
match($0, "^( *)([A-Za-z0-9_]+),(.*)", parts);
- enumwidth - length(parts[2])
- if (parts[3] == "") {
- printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] ",")
+ if (parts[3] == "" CR) {
+ printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] "," CR)
} else {
- printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), parts[3];
+ printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), (parts[3]);
}
- } else if ($0 == "") {
- print "";
+ } else if ($0 == "" CR) {
+ print "" CR;
} else {
print add_indent $0;
}
}
if (match($0, "^ *\\};") > 0) {
- if (active != 0) print "";
+ if (active != 0) print "" CR;
active = 0;
}
}
diff --git a/src/script/api/generate_widget.vbs b/src/script/api/generate_widget.vbs
new file mode 100644
index 0000000000..0bd38bb299
--- /dev/null
+++ b/src/script/api/generate_widget.vbs
@@ -0,0 +1,192 @@
+Option Explicit
+
+' $Id$
+'
+' This file is part of OpenTTD.
+' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+
+Dim FSO, filename, skiptillend, eof
+Set FSO = CreateObject("Scripting.FileSystemObject")
+
+filename = "script_window.hpp"
+skiptillend = False
+eof = vbCrLf
+
+If Not FSO.FileExists(filename) Then
+ WScript.Echo filename & " not found"
+ WScript.Quit 1
+End If
+
+Function GetFiles(pattern)
+ Dim parent, re, files, f
+ Set files = CreateObject("Scripting.Dictionary")
+ Set re = New RegExp
+
+ parent = FSO.GetParentFolderName(pattern)
+ pattern = FSO.GetFileName(pattern)
+
+ ' Convert pattern to a valid regex
+ re.Global = True
+ re.Pattern = "\."
+ pattern = re.Replace(pattern, "\.")
+ re.Pattern = "\*"
+ pattern = re.Replace(pattern, ".*")
+ re.Pattern = pattern
+
+ ' Get the file list
+ For Each f In FSO.GetFolder(parent).Files
+ If re.Test(f.Path) Then
+ f = parent & "/" & f.Name
+ files.Add f, f
+ End If
+ Next
+
+ ' Sort the file list
+ Set GetFiles = CreateObject("Scripting.Dictionary")
+ While files.Count <> 0
+ Dim first
+ first = ""
+ For Each f in files
+ If first = "" Or StrComp(first, f) = 1 Then first = f
+ Next
+ GetFiles.Add first, first
+ files.Remove(First)
+ Wend
+End Function
+
+Sub Generate(line, file)
+ Dim re, add_indent, enum_pattern, file_pattern, f, active, active_comment, comment, rm_indent
+ Set re = New RegExp
+
+ re.Global = True
+ re.Pattern = "[^ ]*"
+ add_indent = re.Replace(line, "")
+ re.Global = False
+ re.Pattern = ".*@enum *"
+ line = Split(re.Replace(line, ""))
+ enum_pattern = line(0)
+ file_pattern = line(1)
+ For Each f In GetFiles(file_pattern).Items
+ active = 0
+ active_comment = 0
+ comment = ""
+ file.Write add_indent & "/* automatically generated from " & f & " */" & eof
+ Set f = FSO.OpenTextFile(f, 1)
+ While Not f.AtEndOfStream
+ re.Pattern = rm_indent
+ line = re.Replace(f.ReadLine, "")
+
+ ' Remember possible doxygen comment before enum declaration
+ re.Pattern = "/\*\*"
+ If active = 0 And re.Test(line) Then
+ comment = add_indent & line
+ active_comment = 1
+ ElseIf active_comment = 1 Then
+ comment = comment & vbCrLf & add_indent & line
+ End If
+
+ ' Check for enum match
+ re.Pattern = "^ *enum *" & enum_pattern & " *\{"
+ If re.Test(line) Then
+ re.Global = True
+ re.Pattern = "[^ ]*"
+ rm_indent = re.Replace(line, "")
+ re.Global = False
+ active = 1
+ If active_comment > 0 Then file.Write comment & eof
+ active_comment = 0
+ comment = ""
+ End If
+
+ ' Forget doxygen comment, if no enum follows
+ If active_comment = 2 And line <> "" Then
+ active_comment = 0
+ comment = ""
+ End If
+ re.Pattern = "\*/"
+ If active_comment = 1 And re.Test(line) Then active_comment = 2
+
+ If active <> 0 Then
+ re.Pattern = "^ *[A-Za-z0-9_]* *[,=]"
+ If re.Test(line) Then
+ Dim parts
+ ' Transform enum values
+ re.Pattern = " *=[^,]*"
+ line = re.Replace(line, "")
+ re.Pattern = " *//"
+ line = re.Replace(line, " //")
+
+ re.Pattern = "^( *)([A-Za-z0-9_]+),(.*)"
+ Set parts = re.Execute(line)
+
+ With parts.Item(0).SubMatches
+ If .Item(2) = "" Then
+ file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & eof
+ Else
+ file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & String(44 - Len(.Item(1)), " ") & .Item(2) & eof
+ End If
+ End With
+ ElseIf line = "" Then
+ file.Write eof
+ Else
+ file.Write add_indent & line & eof
+ End If
+ End If
+
+ re.Pattern = "^ *\};"
+ If re.Test(line) Then
+ If active <> 0 Then file.Write eof
+ active = 0
+ End If
+ Wend
+ f.Close
+ Next
+End Sub
+
+Sub Parse(line, file)
+ Dim re
+ Set re = New RegExp
+
+ re.pattern = "@enum"
+ If re.Test(line) Then
+ file.Write line & eof
+ Generate line, file
+ skiptillend = True
+ Exit Sub
+ End If
+
+ re.pattern = "@endenum"
+ If re.Test(line) Then
+ file.Write line & eof
+ skiptillend = False
+ Exit Sub
+ End If
+
+ If Not skiptillend Then
+ file.Write line & eof
+ End If
+End Sub
+
+Dim file, source, lines, i
+
+WScript.Echo "Starting to parse " & filename
+Set file = FSO.OpenTextFile(filename, 1)
+If Not file.AtEndOfStream Then
+ source = file.ReadAll
+End IF
+file.Close
+
+lines = Split(source, eof)
+If UBound(lines) = 0 Then
+ eof = vbLf
+ lines = Split(source, eof)
+End If
+
+Set file = FSO.OpenTextFile(filename, 2)
+For i = LBound(lines) To UBound(lines) - 1 ' Split adds an extra line, we must ignore it
+ Parse lines(i), file
+Next
+file.Close
+WScript.Echo "Done"
diff --git a/src/script/api/script_bridge.cpp b/src/script/api/script_bridge.cpp
index 45bec466c8..f532f11b73 100644
--- a/src/script/api/script_bridge.cpp
+++ b/src/script/api/script_bridge.cpp
@@ -16,6 +16,7 @@
#include "../../bridge_map.h"
#include "../../strings_func.h"
#include "../../date_func.h"
+#include "table/strings.h"
#include "../../safeguards.h"
@@ -135,11 +136,12 @@ static void _DoCommandReturnBuildBridge1(class ScriptInstance *instance)
return ScriptObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR);
}
-/* static */ char *ScriptBridge::GetName(BridgeID bridge_id)
+/* static */ char *ScriptBridge::GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type)
{
+ EnforcePrecondition(NULL, vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER);
if (!IsValidBridge(bridge_id)) return NULL;
- return GetString(::GetBridgeSpec(bridge_id)->transport_name[0]);
+ return GetString(vehicle_type == ScriptVehicle::VT_WATER ? STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT : ::GetBridgeSpec(bridge_id)->transport_name[vehicle_type]);
}
/* static */ int32 ScriptBridge::GetMaxSpeed(BridgeID bridge_id)
diff --git a/src/script/api/script_bridge.hpp b/src/script/api/script_bridge.hpp
index e069285969..5327d42062 100644
--- a/src/script/api/script_bridge.hpp
+++ b/src/script/api/script_bridge.hpp
@@ -66,10 +66,12 @@ public:
/**
* Get the name of a bridge.
* @param bridge_id The bridge to get the name of.
+ * @param vehicle_type The vehicle-type of bridge to get the name of.
* @pre IsValidBridge(bridge_id).
+ * @pre vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER
* @return The name the bridge has.
*/
- static char *GetName(BridgeID bridge_id);
+ static char *GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type);
/**
* Get the maximum speed of a bridge.
diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp
index 4cdd6a9d0e..64f8e166ea 100644
--- a/src/script/api/script_town.cpp
+++ b/src/script/api/script_town.cpp
@@ -170,7 +170,7 @@
break;
default:
- EnforcePrecondition(false, days_between_town_growth <= MAX_TOWN_GROWTH_TICKS);
+ EnforcePrecondition(false, (days_between_town_growth * DAY_TICKS / TOWN_GROWTH_TICKS) <= MAX_TOWN_GROWTH_TICKS);
/* Don't use growth_rate 0 as it means GROWTH_NORMAL */
growth_rate = max(days_between_town_growth * DAY_TICKS, 2u) - 1;
break;
diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp
index e11742bafb..8dfeafc4c5 100644
--- a/src/script/api/script_window.hpp
+++ b/src/script/api/script_window.hpp
@@ -1080,10 +1080,15 @@ public:
WID_SCL_CLASS_ROAD = ::WID_SCL_CLASS_ROAD, ///< Class road.
WID_SCL_CLASS_SHIP = ::WID_SCL_CLASS_SHIP, ///< Class ship.
WID_SCL_CLASS_AIRCRAFT = ::WID_SCL_CLASS_AIRCRAFT, ///< Class aircraft.
+ WID_SCL_GROUPS_RAIL = ::WID_SCL_GROUPS_RAIL, ///< Rail groups.
+ WID_SCL_GROUPS_ROAD = ::WID_SCL_GROUPS_ROAD, ///< Road groups.
+ WID_SCL_GROUPS_SHIP = ::WID_SCL_GROUPS_SHIP, ///< Ship groups.
+ WID_SCL_GROUPS_AIRCRAFT = ::WID_SCL_GROUPS_AIRCRAFT, ///< Aircraft groups.
WID_SCL_SPACER_DROPDOWN = ::WID_SCL_SPACER_DROPDOWN, ///< Spacer for dropdown.
WID_SCL_PRI_COL_DROPDOWN = ::WID_SCL_PRI_COL_DROPDOWN, ///< Dropdown for primary colour.
WID_SCL_SEC_COL_DROPDOWN = ::WID_SCL_SEC_COL_DROPDOWN, ///< Dropdown for secondary colour.
WID_SCL_MATRIX = ::WID_SCL_MATRIX, ///< Matrix.
+ WID_SCL_MATRIX_SCROLLBAR = ::WID_SCL_MATRIX_SCROLLBAR, ///< Matrix scrollbar.
};
/**
@@ -1471,6 +1476,7 @@ public:
WID_GL_CREATE_GROUP = ::WID_GL_CREATE_GROUP, ///< Create group button.
WID_GL_DELETE_GROUP = ::WID_GL_DELETE_GROUP, ///< Delete group button.
WID_GL_RENAME_GROUP = ::WID_GL_RENAME_GROUP, ///< Rename group button.
+ WID_GL_LIVERY_GROUP = ::WID_GL_LIVERY_GROUP, ///< Group livery button.
WID_GL_REPLACE_PROTECTION = ::WID_GL_REPLACE_PROTECTION, ///< Replace protection button.
WID_GL_INFO = ::WID_GL_INFO, ///< Group info.
};
diff --git a/src/script/api/squirrel_export.awk b/src/script/api/squirrel_export.awk
index 2cb47deddd..ef0a74c8db 100644
--- a/src/script/api/squirrel_export.awk
+++ b/src/script/api/squirrel_export.awk
@@ -29,46 +29,46 @@ function dump_class_templates(name)
realname = name
gsub("^Script", "", realname)
- print " template <> inline " name " *GetParam(ForceType<" name " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }"
- print " template <> inline " name " &GetParam(ForceType<" name " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
- print " template <> inline const " name " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }"
- print " template <> inline const " name " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
+ print " template <> inline " name " *GetParam(ForceType<" name " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" CR
+ print " template <> inline " name " &GetParam(ForceType<" name " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" CR
+ print " template <> inline const " name " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" CR
+ print " template <> inline const " name " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" CR
if (name == "ScriptEvent") {
- print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }"
+ print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }" CR
} else if (name == "ScriptText") {
- print ""
- print " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {"
- print " if (sq_gettype(vm, index) == OT_INSTANCE) {"
- print " return GetParam(ForceType(), vm, index, ptr);"
- print " }"
- print " if (sq_gettype(vm, index) == OT_STRING) {"
- print " return new RawText(GetParam(ForceType(), vm, index, ptr));"
- print " }"
- print " return NULL;"
- print " }"
+ print "" CR
+ print " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {" CR
+ print " if (sq_gettype(vm, index) == OT_INSTANCE) {" CR
+ print " return GetParam(ForceType(), vm, index, ptr);" CR
+ print " }" CR
+ print " if (sq_gettype(vm, index) == OT_STRING) {" CR
+ print " return new RawText(GetParam(ForceType(), vm, index, ptr));" CR
+ print " }" CR
+ print " return NULL;" CR
+ print " }" CR
} else {
- print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }"
+ print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }" CR
}
}
function dump_fileheader()
{
# Break the Id tag, so SVN doesn't replace it
- print "/* $I" "d$ */"
- print ""
- print "/*"
- print " * This file is part of OpenTTD."
- print " * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2."
- print " * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- print " * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see ."
- print " */"
- print ""
- print "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */"
- print ""
- print "#include \"../" filename "\""
+ print "/* $I" "d$ */" CR
+ print "" CR
+ print "/*" CR
+ print " * This file is part of OpenTTD." CR
+ print " * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2." CR
+ print " * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." CR
+ print " * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see ." CR
+ print " */" CR
+ print "" CR
+ print "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */" CR
+ print "" CR
+ print "#include \"../" filename "\"" CR
if (api != "Template") {
gsub("script_", "template_", filename)
- print "#include \"../template/" filename ".sq\""
+ print "#include \"../template/" filename ".sq\"" CR
}
}
@@ -103,11 +103,12 @@ BEGIN {
start_squirrel_define_on_next_line = "false"
has_fileheader = "false"
cls_level = 0
- RS = "\r|\n"
apis = tolower(api)
if (apis == "gs") apis = "game"
}
+{ CR = (match($0, "\\r$") > 0 ? "\r" : "") }
+
/@file/ {
filename = $3
gsub("^" apis "_", "script_", filename)
@@ -136,13 +137,13 @@ BEGIN {
if (api == "Template") {
api_selected = "true"
- if ($0 == "none" || $0 == "-all") api_selected = "false"
+ if ($0 == "none" CR || $0 == "-all" CR) api_selected = "false"
next
}
- if ($0 == "none") {
+ if ($0 == "none" CR) {
api_selected = "false"
- } else if ($0 == "-all") {
+ } else if ($0 == "-all" CR) {
api_selected = "false"
} else if (match($0, "-" apis)) {
api_selected = "false"
@@ -259,7 +260,7 @@ BEGIN {
}
# Empty/white lines. When we may do the Squirrel export, do that export.
-/^([ ]*)$/ {
+/^([ ]*)\r*$/ {
if (start_squirrel_define_on_next_line == "false") next
if (cls_in_api != "true") {
@@ -280,19 +281,19 @@ BEGIN {
api_super_cls = super_cls
gsub("^Script", api, api_super_cls)
- print ""
+ print "" CR
if (api == "Template") {
# First check whether we have enums to print
if (enum_size != 0) {
if (namespace_opened == "false") {
- print "namespace SQConvert {"
+ print "namespace SQConvert {" CR
namespace_opened = "true"
}
- print " /* Allow enums to be used as Squirrel parameters */"
+ print " /* Allow enums to be used as Squirrel parameters */" CR
for (i = 1; i <= enum_size; i++) {
- print " template <> inline " enums[i] " GetParam(ForceType<" enums[i] ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" enums[i] ")tmp; }"
- print " template <> inline int Return<" enums[i] ">(HSQUIRRELVM vm, " enums[i] " res) { sq_pushinteger(vm, (int32)res); return 1; }"
+ print " template <> inline " enums[i] " GetParam(ForceType<" enums[i] ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" enums[i] ")tmp; }" CR
+ print " template <> inline int Return<" enums[i] ">(HSQUIRRELVM vm, " enums[i] " res) { sq_pushinteger(vm, (int32)res); return 1; }" CR
delete enums[i]
}
}
@@ -300,10 +301,10 @@ BEGIN {
# Then check whether we have structs/classes to print
if (struct_size != 0) {
if (namespace_opened == "false") {
- print "namespace SQConvert {"
+ print "namespace SQConvert {" CR
namespace_opened = "true"
}
- print " /* Allow inner classes/structs to be used as Squirrel parameters */"
+ print " /* Allow inner classes/structs to be used as Squirrel parameters */" CR
for (i = 1; i <= struct_size; i++) {
dump_class_templates(structs[i])
delete structs[i]
@@ -311,41 +312,41 @@ BEGIN {
}
if (namespace_opened == "false") {
- print "namespace SQConvert {"
+ print "namespace SQConvert {" CR
namespace_opened = "true"
} else {
- print ""
+ print "" CR
}
- print " /* Allow " cls " to be used as Squirrel parameter */"
+ print " /* Allow " cls " to be used as Squirrel parameter */" CR
dump_class_templates(cls)
- print "} // namespace SQConvert"
+ print "} // namespace SQConvert" CR
reset_reader()
next
}
- print "";
- print "template <> const char *GetClassName<" cls ", ST_" toupper(api) ">() { return \"" api_cls "\"; }"
- print "";
+ print "" CR
+ print "template <> const char *GetClassName<" cls ", ST_" toupper(api) ">() { return \"" api_cls "\"; }" CR
+ print "" CR
# Then do the registration functions of the class. */
- print "void SQ" api_cls "_Register(Squirrel *engine)"
- print "{"
- print " DefSQClass<" cls ", ST_" toupper(api) "> SQ" api_cls "(\"" api_cls "\");"
+ print "void SQ" api_cls "_Register(Squirrel *engine)" CR
+ print "{" CR
+ print " DefSQClass<" cls ", ST_" toupper(api) "> SQ" api_cls "(\"" api_cls "\");" CR
if (super_cls == "Text" || super_cls == "ScriptObject" || super_cls == "AIAbstractList::Valuator") {
- print " SQ" api_cls ".PreRegister(engine);"
+ print " SQ" api_cls ".PreRegister(engine);" CR
} else {
- print " SQ" api_cls ".PreRegister(engine, \"" api_super_cls "\");"
+ print " SQ" api_cls ".PreRegister(engine, \"" api_super_cls "\");" CR
}
if (super_cls != "ScriptEvent") {
if (cls_param[2] == "v") {
- print " SQ" api_cls ".AddSQAdvancedConstructor(engine);"
+ print " SQ" api_cls ".AddSQAdvancedConstructor(engine);" CR
} else {
- print " SQ" api_cls ".AddConstructor(engine, \"" cls_param[2] "\");"
+ print " SQ" api_cls ".AddConstructor(engine, \"" cls_param[2] "\");" CR
}
}
- print ""
+ print "" CR
# Enum values
mlen = 0
@@ -353,10 +354,10 @@ BEGIN {
if (mlen <= length(enum_value[i])) mlen = length(enum_value[i])
}
for (i = 1; i <= enum_value_size; i++) {
- print " SQ" api_cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\"" enum_value[i] "\");"
+ print " SQ" api_cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\"" enum_value[i] "\");" CR
delete enum_value[i]
}
- if (enum_value_size != 0) print ""
+ if (enum_value_size != 0) print "" CR
# Const values
mlen = 0
@@ -364,10 +365,10 @@ BEGIN {
if (mlen <= length(const_value[i])) mlen = length(const_value[i])
}
for (i = 1; i <= const_size; i++) {
- print " SQ" api_cls ".DefSQConst(engine, " cls "::" const_value[i] ", " substr(spaces, 1, mlen - length(const_value[i])) "\"" const_value[i] "\");"
+ print " SQ" api_cls ".DefSQConst(engine, " cls "::" const_value[i] ", " substr(spaces, 1, mlen - length(const_value[i])) "\"" const_value[i] "\");" CR
delete const_value[i]
}
- if (const_size != 0) print ""
+ if (const_size != 0) print "" CR
# Mapping of OTTD strings to errors
mlen = 0
@@ -375,11 +376,11 @@ BEGIN {
if (mlen <= length(enum_string_to_error_mapping_string[i])) mlen = length(enum_string_to_error_mapping_string[i])
}
for (i = 1; i <= enum_string_to_error_size; i++) {
- print " ScriptError::RegisterErrorMap(" enum_string_to_error_mapping_string[i] ", " substr(spaces, 1, mlen - length(enum_string_to_error_mapping_string[i])) cls "::" enum_string_to_error_mapping_error[i] ");"
+ print " ScriptError::RegisterErrorMap(" enum_string_to_error_mapping_string[i] ", " substr(spaces, 1, mlen - length(enum_string_to_error_mapping_string[i])) cls "::" enum_string_to_error_mapping_error[i] ");" CR
delete enum_string_to_error_mapping_string[i]
}
- if (enum_string_to_error_size != 0) print ""
+ if (enum_string_to_error_size != 0) print "" CR
# Mapping of errors to human 'readable' strings.
mlen = 0
@@ -387,10 +388,10 @@ BEGIN {
if (mlen <= length(enum_error_to_string_mapping[i])) mlen = length(enum_error_to_string_mapping[i])
}
for (i = 1; i <= enum_error_to_string_size; i++) {
- print " ScriptError::RegisterErrorMapString(" cls "::" enum_error_to_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_to_string_mapping[i])) "\"" enum_error_to_string_mapping[i] "\");"
+ print " ScriptError::RegisterErrorMapString(" cls "::" enum_error_to_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_to_string_mapping[i])) "\"" enum_error_to_string_mapping[i] "\");" CR
delete enum_error_to_string_mapping[i]
}
- if (enum_error_to_string_size != 0) print ""
+ if (enum_error_to_string_size != 0) print "" CR
# Static methods
mlen = 0
@@ -399,13 +400,13 @@ BEGIN {
}
for (i = 1; i <= static_method_size; i++) {
if (static_methods[i, 2] == "v") {
- print " SQ" api_cls ".DefSQAdvancedStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0]) - 8) "\"" static_methods[i, 0] "\");"
+ print " SQ" api_cls ".DefSQAdvancedStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0]) - 8) "\"" static_methods[i, 0] "\");" CR
} else {
- print " SQ" api_cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\"" static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");"
+ print " SQ" api_cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\"" static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");" CR
}
delete static_methods[i]
}
- if (static_method_size != 0) print ""
+ if (static_method_size != 0) print "" CR
# Non-static methods
mlen = 0
@@ -414,16 +415,16 @@ BEGIN {
}
for (i = 1; i <= method_size; i++) {
if (methods[i, 2] == "v") {
- print " SQ" api_cls ".DefSQAdvancedMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0]) - 8) "\"" methods[i, 0] "\");"
+ print " SQ" api_cls ".DefSQAdvancedMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0]) - 8) "\"" methods[i, 0] "\");" CR
} else {
- print " SQ" api_cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\"" methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");"
+ print " SQ" api_cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\"" methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");" CR
}
delete methods[i]
}
- if (method_size != 0) print ""
+ if (method_size != 0) print "" CR
- print " SQ" api_cls ".PostRegister(engine);"
- print "}"
+ print " SQ" api_cls ".PostRegister(engine);" CR
+ print "}" CR
reset_reader()
@@ -438,6 +439,7 @@ BEGIN {
if (in_enum == "true") {
enum_value_size++
sub(",", "", $1)
+ sub("\r", "", $1)
enum_value[enum_value_size] = $1
# Check if this a special error enum
@@ -475,7 +477,7 @@ BEGIN {
}
# Add a method to the list
-/^.*\(.*\).*$/ {
+/^.*\(.*\).*\r*$/ {
if (cls_level != 1) next
if (match($0, "~")) {
if (api_selected != "") {
diff --git a/src/script/api/squirrel_export.sh b/src/script/api/squirrel_export.sh
index 92bd434b93..e1f5e8613c 100755
--- a/src/script/api/squirrel_export.sh
+++ b/src/script/api/squirrel_export.sh
@@ -26,7 +26,7 @@ apilc=`pwd | sed "s@/api@@;s@.*/@@"`
# Check if we are in the root directory of the API, as then we generate all APIs
if [ "$apilc" = "script" ]; then
- for api in `find -type d | cut -b3- | grep -v '\.svn\|/'`; do
+ for api in `find . -type d | cut -b3-`; do
if [ -z "$api" ]; then continue; fi
echo "Generating for API '$api' ..."
cd $api
@@ -43,57 +43,34 @@ case $apilc in
*) echo "Unknown API type."; exit 1 ;;
esac
-if [ -z "$1" ]; then
- for f in `ls ../*.hpp`; do
- bf=`basename ${f} | sed s@script_@${apilc}_@`
+for f in `ls ../*.hpp`; do
+ bf=`basename ${f} | sed s@script_@${apilc}_@`
- # ScriptController has custom code, and should not be generated
- if [ "`basename ${f}`" = "script_controller.hpp" ]; then continue; fi
- if [ "`basename ${f}`" = "script_object.hpp" ]; then continue; fi
+ # ScriptController has custom code, and should not be generated
+ if [ "`basename ${f}`" = "script_controller.hpp" ]; then continue; fi
- ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp
+ ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp
- if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then
- if [ -f "${bf}.sq" ]; then
- echo "Deleted: ${bf}.sq"
- svn del --force ${bf}.sq > /dev/null 2>&1
- fi
- rm -f ${bf}.tmp
- elif ! [ -f "${bf}.sq" ] || [ -n "`diff -I '$Id' ${bf}.tmp ${bf}.sq 2> /dev/null || echo boo`" ]; then
- mv ${bf}.tmp ${bf}.sq
- echo "Updated: ${bf}.sq"
- svn add ${bf}.sq > /dev/null 2>&1
- svn propset svn:eol-style native ${bf}.sq > /dev/null 2>&1
- svn propset svn:keywords Id ${bf}.sq > /dev/null 2>&1
- else
- rm -f ${bf}.tmp
+ if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then
+ if [ -f "${bf}.sq" ]; then
+ echo "Deleted: ${bf}.sq"
+ rm -f ${bf}.sq
fi
- done
-else
- ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk $1 > $1.tmp
- if [ `wc -l $1.tmp | cut -d\ -f1` -eq "0" ]; then
- if [ -f "$1.sq" ]; then
- echo "Deleted: $1.sq"
- svn del --force $1.sq > /dev/null 2>&1
- fi
- rm -f $1.tmp
- elif ! [ -f "${f}.sq" ] || [ -n "`diff -I '$Id' $1.sq $1.tmp 2> /dev/null || echo boo`" ]; then
- mv $1.tmp $1.sq
- echo "Updated: $1.sq"
- svn add $1.sq > /dev/null 2>&1
- svn propset svn:eol-style native $1.sq > /dev/null 2>&1
- svn propset svn:keywords Id $1.sq > /dev/null 2>&1
+ rm -f ${bf}.tmp
+ elif ! [ -f "${bf}.sq" ] || [ -n "`diff -I '$Id' ${bf}.tmp ${bf}.sq 2> /dev/null || echo boo`" ]; then
+ mv ${bf}.tmp ${bf}.sq
+ echo "Updated: ${bf}.sq"
else
- rm -f $1.tmp
+ rm -f ${bf}.tmp
fi
-fi
+done
# Remove .hpp.sq if .hpp doesn't exist anymore
for f in `ls *.hpp.sq`; do
f=`echo ${f} | sed "s/.hpp.sq$/.hpp/;s@${apilc}_@script_@"`
if [ ! -f ../${f} ];then
echo "Deleted: ${f}.sq"
- svn del --force ${f}.sq > /dev/null 2>&1
+ rm -f ${f}.sq
fi
done
diff --git a/src/script/api/squirrel_export.vbs b/src/script/api/squirrel_export.vbs
new file mode 100644
index 0000000000..a13869509a
--- /dev/null
+++ b/src/script/api/squirrel_export.vbs
@@ -0,0 +1,946 @@
+Option Explicit
+
+' $Id$
+'
+' This file is part of OpenTTD.
+' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+
+Dim FSO
+Dim enum_size, enums, enum_value_size, enum_value
+Dim enum_string_to_error_size, enum_string_to_error_mapping_string, enum_string_to_error_mapping_error
+Dim enum_error_to_string_size, enum_error_to_string_mapping, const_size, const_value
+Dim struct_size, structs, method_size, methods, static_method_size, static_methods
+Dim super_cls, cls, api_selected, cls_in_api, start_squirrel_define_on_next_line, has_fileheader, cls_level
+Dim apis, filename, doxygen_skip, squirrel_stuff, is_public, cls_param(2), comment, in_enum
+
+Set FSO = CreateObject("Scripting.FileSystemObject")
+
+Function CompareFiles(filename1, filename2)
+ Dim file, lines1, lines2
+
+ If Not FSO.FileExists(filename1) Then
+ CompareFiles = False
+ Exit Function
+ End If
+ Set file = FSO.OpenTextFile(filename1, 1)
+ If Not file.AtEndOfStream Then
+ lines1 = file.ReadAll
+ End IF
+ file.Close
+
+ If Not FSO.FileExists(filename2) Then
+ CompareFiles = False
+ Exit Function
+ End If
+ Set file = FSO.OpenTextFile(filename2, 1)
+ If Not file.AtEndOfStream Then
+ lines2 = file.ReadAll
+ End IF
+ file.Close
+
+ CompareFiles = (lines1 = lines2)
+End Function
+
+Function IsEmptyFile(filename)
+ Dim file
+ Set file = FSO.OpenTextFile(filename, 1)
+ IsEmptyFile = file.AtEndOfStream
+ file.Close
+End Function
+
+Function DumpClassTemplates(name, file)
+ Dim re, realname
+ Set re = New RegExp
+
+ re.Pattern = "^Script"
+ realname = re.Replace(name, "")
+
+ file.WriteLine " template <> inline " & name & " *GetParam(ForceType<" & name & " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" & name & " *)instance; }"
+ file.WriteLine " template <> inline " & name & " &GetParam(ForceType<" & name & " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" & name & " *)instance; }"
+ file.WriteLine " template <> inline const " & name & " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" & name & " *)instance; }"
+ file.WriteLine " template <> inline const " & name & " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" & name & " *)instance; }"
+ If name = "ScriptEvent" Then
+ file.WriteLine " template <> inline int Return<" & name & " *>(HSQUIRRELVM vm, " & name & " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, " & Chr(34) & realname & Chr(34) & ", res, NULL, DefSQDestructorCallback<" & name & ">, true); return 1; }"
+ ElseIf name = "ScriptText" Then
+ file.WriteLine ""
+ file.WriteLine " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {"
+ file.WriteLine " if (sq_gettype(vm, index) == OT_INSTANCE) {"
+ file.WriteLine " return GetParam(ForceType(), vm, index, ptr);"
+ file.WriteLine " }"
+ file.WriteLine " if (sq_gettype(vm, index) == OT_STRING) {"
+ file.WriteLine " return new RawText(GetParam(ForceType(), vm, index, ptr));"
+ file.WriteLine " }"
+ file.WriteLine " return NULL;"
+ file.WriteLine " }"
+ Else
+ file.WriteLine " template <> inline int Return<" & name & " *>(HSQUIRRELVM vm, " & name & " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, " & Chr(34) & realname & Chr(34) & ", res, NULL, DefSQDestructorCallback<" & name & ">, true); return 1; }"
+ End If
+End Function
+
+Function DumpFileheader(api, file)
+ Dim re
+ Set re = New RegExp
+ ' Break the Id tag, so SVN doesn't replace it
+ file.WriteLine "/* $I" & "d$ */"
+ file.WriteLine ""
+ file.WriteLine "/*"
+ file.WriteLine " * This file is part of OpenTTD."
+ file.WriteLine " * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2."
+ file.WriteLine " * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ file.WriteLine " * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see ."
+ file.WriteLine " */"
+ file.WriteLine ""
+ file.WriteLine "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */"
+ file.WriteLine ""
+ file.WriteLine "#include " & Chr(34) & "../" & filename & Chr(34)
+ If api <> "Template" Then
+ re.Pattern = "script_"
+ filename = re.Replace(filename, "template_")
+ file.WriteLine "#include " & Chr(34) & "../template/" & filename & ".sq" & Chr(34)
+ End If
+End Function
+
+Function ResetReader()
+ enum_size = 0
+ enums.RemoveAll
+ enum_value_size = 0
+ enum_value.RemoveAll
+ enum_string_to_error_size = 0
+ enum_string_to_error_mapping_string.RemoveAll
+ enum_string_to_error_mapping_error.RemoveAll
+ enum_error_to_string_size = 0
+ enum_error_to_string_mapping.RemoveAll
+ const_size = 0
+ const_value.RemoveAll
+ struct_size = 0
+ structs.RemoveAll
+ method_size = 0
+ methods.RemoveAll
+ static_method_size = 0
+ static_methods.RemoveAll
+ cls = ""
+ start_squirrel_define_on_next_line = False
+ cls_level = 0
+ cls_in_api = ""
+End Function
+
+Sub SquirrelExportParse(api, line, file)
+ Dim re
+ Set re = New RegExp
+
+ re.Pattern = "@file"
+ If re.Test(line) Then
+ filename = Split(line)(2)
+ re.Pattern = "^" & apis & "_"
+ filename = re.Replace(filename, "script_")
+ End If
+
+ ' Ignore special doxygen blocks
+ re.Pattern = "^#ifndef DOXYGEN_API"
+ If re.Test(line) Then
+ doxygen_skip = "next"
+ Exit Sub
+ End If
+ re.Pattern = "^#ifdef DOXYGEN_API"
+ If re.Test(line) Then
+ doxygen_skip = "true"
+ Exit Sub
+ End If
+ re.Pattern = "^#endif /\* DOXYGEN_API \*/"
+ If re.Test(line) Then
+ doxygen_skip = "false"
+ Exit Sub
+ End If
+ re.Pattern = "^#else"
+ If re.Test(line) Then
+ If doxygen_skip = "next" Then
+ doxygen_skip = "true"
+ Else
+ doxygen_skip = "false"
+ End If
+ Exit Sub
+ End If
+ If doxygen_skip = "true" Then Exit Sub
+
+ re.Pattern = "^([ ]*)\* @api"
+ If re.Test(line) Then
+ ' By default, classes are not selected
+ If cls_level = 0 Then api_selected = "false"
+
+ re.Pattern = "^([ ]*)"
+ line = re.Replace(line, "")
+ re.Pattern = "\* @api "
+ line = re.Replace(line, "")
+
+ If api = "Template" Then
+ api_selected = "true"
+ If line = "none" Or line = "-all" Then api_selected = "false"
+ Exit Sub
+ End If
+
+ If line = "none" Then
+ api_selected = "false"
+ ElseIf line = "-all" Then
+ api_selected = "false"
+ Else
+ re.Pattern = "-" & apis
+ If re.Test(line) Then
+ api_selected = "false"
+ Else
+ re.Pattern = apis
+ If re.Test(line) Then
+ api_selected = "true"
+ End If
+ End If
+ End If
+ Exit Sub
+ End If
+
+ ' Remove the old squirrel stuff
+ re.Pattern = "#ifdef DEFINE_SQUIRREL_CLASS"
+ If re.Test(line) Then
+ squirrel_stuff = True
+ Exit Sub
+ End If
+ re.Pattern = "^#endif /\* DEFINE_SQUIRREL_CLASS \*/"
+ If re.Test(line) Then
+ If squirrel_stuff Then squirrel_stuff = False
+ Exit Sub
+ End If
+ If squirrel_stuff Then Exit Sub
+
+ ' Ignore forward declarations of classes
+ re.Pattern = "^( *)class(.*);"
+ If re.Test(line) Then Exit Sub
+ ' We only want to have public functions exported for now
+ re.Pattern = "^( *)class"
+ If re.Test(line) Then
+ line = Split(line)
+ If cls_level = 0 Then
+ If api_selected = "" Then
+ WScript.Echo "Class '" & line(1) & "' has no @api. It won't be published to any API."
+ api_selected = "false"
+ End If
+ is_public = False
+ cls_param(0) = ""
+ cls_param(1) = 1
+ cls_param(2) = "x"
+ cls_in_api = api_selected
+ api_selected = ""
+ cls = line(1)
+ re.Pattern = "public|protected|private"
+ If UBound(line) > 2 Then
+ If re.Test(line(3)) Then
+ super_cls = line(4)
+ Else
+ super_cls = line(3)
+ End If
+ End If
+ ElseIf cls_level = 1 Then
+ If api_selected = "" Then api_selected = cls_in_api
+
+ If api_selected = "true" Then
+ struct_size = struct_size + 1
+ structs.Item(struct_size) = cls & "::" & line(1)
+ End If
+ api_selected = ""
+ End If
+ cls_level = cls_level + 1
+ Exit Sub
+ End If
+ re.Pattern = "^( *)public"
+ If re.Test(line) Then
+ If cls_level = 1 Then is_public = True
+ Exit Sub
+ End If
+ re.Pattern = "^( *)protected"
+ If re.Test(line) Then
+ If cls_level = 1 Then is_public = False
+ Exit Sub
+ End If
+ re.Pattern = "^( *)private"
+ If re.Test(line) Then
+ If cls_level = 1 Then is_public = False
+ Exit Sub
+ End If
+
+ ' Ignore the comments
+ re.Pattern = "^#"
+ If re.Test(line) Then Exit Sub
+ re.Pattern = "/\*.*\*/"
+ If re.Test(line) Then
+ comment = False
+ Exit Sub
+ End If
+ re.Pattern = "/\*"
+ If re.Test(line) Then
+ comment = True
+ Exit Sub
+ End If
+ re.Pattern = "\*/"
+ If re.Test(line) Then
+ comment = False
+ Exit Sub
+ End If
+ If comment Then Exit Sub
+
+ ' We need to make specialized conversions for structs
+ re.Pattern = "^( *)struct"
+ If re.Test(line) Then
+ cls_level = cls_level + 1
+
+ ' Check if we want to publish this struct
+ If api_selected = "" Then api_selected = cls_in_api
+ If api_selected = "false" Then
+ api_selected = ""
+ Exit Sub
+ End If
+ api_selected = ""
+
+ If Not is_public Then Exit Sub
+ If cls_level <> 1 Then Exit Sub
+
+ struct_size = struct_size + 1
+ structs.Item(struct_size) = cls & "::" & Split(line)(1)
+ Exit Sub
+ End If
+
+ ' We need to make specialized conversions for enums
+ re.Pattern = "^( *)enum"
+ If re.Test(line) Then
+ cls_level = cls_level + 1
+
+ ' Check if we want to publish this enum
+ If api_selected = "" Then api_selected = cls_in_api
+ If api_selected = "false" Then
+ api_selected = ""
+ Exit Sub
+ End If
+ api_selected = ""
+
+ If Not is_public Then Exit Sub
+
+ in_enum = True
+ enum_size = enum_size + 1
+ enums.Item(enum_size) = cls & "::" & Split(line)(1)
+ Exit Sub
+ End If
+
+ ' Maybe the end of the class, if so we can start with the Squirrel export pretty soon
+ re.Pattern = "};"
+ If re.Test(line) Then
+ cls_level = cls_level - 1
+ If cls_level <> 0 Then
+ in_enum = False
+ Exit Sub
+ End If
+
+ If cls = "" Then Exit Sub
+ start_squirrel_define_on_next_line = True
+ Exit Sub
+ End If
+
+ ' Empty/white lines. When we may do the Squirrel export, do that export.
+ re.Pattern = "^([ ]*)$"
+ If re.Test(line) Then
+ Dim namespace_opened, api_cls, api_super_cls, i, mlen, spaces
+
+ If Not start_squirrel_define_on_next_line Then Exit Sub
+
+ If cls_in_api <> "true" Then
+ ResetReader
+ Exit Sub
+ End If
+ If Not has_fileheader Then
+ DumpFileHeader api, file
+ has_fileheader = True
+ End If
+
+ is_public = False
+ namespace_opened = False
+
+ re.Pattern = "^Script"
+ api_cls = re.Replace(cls, api)
+ api_super_cls = re.Replace(super_cls, api)
+
+ file.WriteLine ""
+
+ If api = "Template" Then
+ ' First check whether we have enums to print
+ If enum_size <> 0 Then
+ If Not namespace_opened Then
+ file.WriteLine "namespace SQConvert {"
+ namespace_opened = True
+ End If
+ file.WriteLine " /* Allow enums to be used as Squirrel parameters */"
+ For i = 1 To enum_size
+ file.WriteLine " template <> inline " & enums.Item(i) & " GetParam(ForceType<" & enums.Item(i) & ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" & enums.Item(i) & ")tmp; }"
+ file.WriteLine " template <> inline int Return<" & enums.Item(i) & ">(HSQUIRRELVM vm, " & enums.Item(i) & " res) { sq_pushinteger(vm, (int32)res); return 1; }"
+ Next
+ End If
+
+ ' Then check whether we have structs/classes to print
+ If struct_size <> 0 Then
+ If Not namespace_opened Then
+ file.WriteLine "namespace SQConvert {"
+ namespace_opened = True
+ End If
+ file.WriteLine " /* Allow inner classes/structs to be used as Squirrel parameters */"
+ For i = 1 To struct_size
+ DumpClassTemplates structs.Item(i), file
+ Next
+ End If
+
+ If Not namespace_opened Then
+ file.WriteLine "namespace SQConvert {"
+ namespace_opened = True
+ Else
+ file.WriteLine ""
+ End If
+ file.WriteLine " /* Allow " & cls & " to be used as Squirrel parameter */"
+ DumpClassTemplates cls, file
+
+ file.WriteLine "} // namespace SQConvert"
+
+ ResetReader
+ Exit Sub
+ End If
+
+ file.WriteLine ""
+ file.WriteLine "template <> const char *GetClassName<" & cls & ", ST_" & UCase(api) & ">() { return " & Chr(34) & api_cls & Chr(34) & "; }"
+ file.WriteLine ""
+
+ ' Then do the registration functions of the class.
+ file.WriteLine "void SQ" & api_cls & "_Register(Squirrel *engine)"
+ file.WriteLine "{"
+ file.WriteLine " DefSQClass<" & cls & ", ST_" & UCase(api) & "> SQ" & api_cls & "(" & Chr(34) & api_cls & Chr(34) & ");"
+ If super_cls = "Text" Or super_cls = "ScriptObject" Or super_cls = "AIAbstractiveList::Valuator" Then
+ file.WriteLine " SQ" & api_cls & ".PreRegister(engine);"
+ Else
+ file.WriteLine " SQ" & api_cls & ".PreRegister(engine, " & Chr(34) & api_super_cls & Chr(34) & ");"
+ End If
+ If super_cls <> "ScriptEvent" Then
+ If cls_param(2) = "v" Then
+ file.WriteLine " SQ" & api_cls & ".AddSQAdvancedConstructor(engine);"
+ Else
+ file.WriteLine " SQ" & api_cls & ".AddConstructor(engine, " & Chr(34) & cls_param(2) & Chr(34) & ");"
+ End If
+ End If
+ file.WriteLine ""
+
+ ' Enum values
+ mlen = 0
+ For i = 1 To enum_value_size
+ If mlen <= Len(enum_value.Item(i)) Then mlen = Len(enum_value.Item(i))
+ Next
+ For i = 1 To enum_value_size
+ file.WriteLine " SQ" & api_cls & ".DefSQConst(engine, " & cls & "::" & enum_value.Item(i) & ", " & Space(mlen - Len(enum_value.Item(i))) & Chr(34) & enum_value.Item(i) & Chr(34) & ");"
+ Next
+ If enum_value_size <> 0 Then file.WriteLine ""
+
+ ' Const values
+ mlen = 0
+ For i = 1 To const_size
+ If mlen <= Len(const_value.Item(i)) Then mlen = Len(const_value.Item(i))
+ Next
+ For i = 1 To const_size
+ file.WriteLine " SQ" & api_cls & ".DefSQConst(engine, " & cls & "::" & const_value.Item(i) & ", " & Space(mlen - Len(const_value.Item(i))) & Chr(34) & const_value.Item(i) & Chr(34) & ");"
+ Next
+ If const_size <> 0 Then file.WriteLine ""
+
+ ' Mapping of OTTD strings to errors
+ mlen = 0
+ For i = 1 To enum_string_to_error_size
+ If mlen <= Len(enum_string_to_error_mapping_string.Item(i)) Then mlen = Len(enum_string_to_error_mapping_string.Item(i))
+ Next
+ For i = 1 To enum_string_to_error_size
+ file.WriteLine " ScriptError::RegisterErrorMap(" & enum_string_to_error_mapping_string.Item(i) & ", " & Space(mlen - Len(enum_string_to_error_mapping_string.Item(i))) & cls & "::" & enum_string_to_error_mapping_error.Item(i) & ");"
+ Next
+ If enum_string_to_error_size <> 0 Then file.WriteLine ""
+
+ ' Mapping of errors to human 'readable' strings.
+ mlen = 0
+ For i = 1 To enum_error_to_string_size
+ If mlen <= Len(enum_error_to_string_mapping.Item(i)) Then mlen = Len(enum_error_to_string_mapping.Item(i))
+ Next
+ For i = 1 To enum_error_to_string_size
+ file.WriteLine " ScriptError::RegisterErrorMapString(" & cls & "::" & enum_error_to_string_mapping.Item(i) & ", " & Space(mlen - Len(enum_error_to_string_mapping.Item(i))) & Chr(34) & enum_error_to_string_mapping.Item(i) & Chr(34) & ");"
+ Next
+ If enum_error_to_string_size <> 0 Then file.WriteLine ""
+
+ ' Static methods
+ mlen = 0
+ For i = 1 To static_method_size
+ If mlen <= Len(static_methods.Item(i)(0)) Then mlen = Len(static_methods.Item(i)(0))
+ Next
+ For i = 1 To static_method_size
+ If static_methods.Item(i)(2) = "v" Then
+ spaces = mlen - Len(static_methods.Item(i)(0)) - 8
+ If spaces < 0 Then spaces = 0
+ file.WriteLine " SQ" & api_cls & ".DefSQAdvancedStaticMethod(engine, &" & cls & "::" & static_methods.Item(i)(0) & ", " & Space(spaces) & Chr(34) & static_methods.Item(i)(0) & Chr(34) & ");"
+ Else
+ file.WriteLine " SQ" & api_cls & ".DefSQStaticMethod(engine, &" & cls & "::" & static_methods.Item(i)(0) & ", " & Space(mlen - Len(static_methods.Item(i)(0))) & Chr(34) & static_methods.Item(i)(0) & Chr(34) & ", " & Space(mlen - Len(static_methods.Item(i)(0))) & static_methods.Item(i)(1) & ", " & Chr(34) & static_methods.Item(i)(2) & Chr(34) & ");"
+ End If
+ Next
+ If static_method_size <> 0 Then file.WriteLine ""
+
+ ' Non-static methods
+ mlen = 0
+ For i = 1 To method_size
+ If mlen <= Len(methods.Item(i)(0)) Then mlen = Len(methods.Item(i)(0))
+ Next
+ For i = 1 To method_size
+ If methods.Item(i)(2) = "v" Then
+ spaces = mlen - Len(methods.Item(i)(0)) - 8
+ If spaces < 0 Then spaces = 0
+ file.WriteLine " SQ" & api_cls & ".DefSQAdvancedMethod(engine, &" & cls & "::" & methods.Item(i)(0) & ", " & Space(spaces) & Chr(34) & methods.Item(i)(0) & Chr(34) & ");"
+ Else
+ file.WriteLine " SQ" & api_cls & ".DefSQMethod(engine, &" & cls & "::" & methods.Item(i)(0) & ", " & Space(mlen - Len(methods.Item(i)(0))) & Chr(34) & methods.Item(i)(0) & Chr(34) & ", " & Space(mlen - Len(methods.Item(i)(0))) & methods.Item(i)(1) & ", " & Chr(34) & methods.Item(i)(2) & Chr(34) & ");"
+ End If
+ Next
+ If method_size <> 0 Then file.WriteLine ""
+
+ file.WriteLine " SQ" & api_cls & ".PostRegister(engine);"
+ file.WriteLine "}"
+
+ ResetReader
+
+ Exit Sub
+ End If
+
+ ' Skip non-public functions
+ If Not is_public Then Exit Sub
+
+ ' Add enums
+ If in_enum Then
+ enum_value_size = enum_value_size + 1
+ re.Pattern = "[, ]"
+ re.Global = True
+ enum_value.Item(enum_value_size) = re.Replace(split(line)(0), "")
+
+ ' Check if this a special error enum
+ re.Pattern = ".*::ErrorMessages"
+ If re.Test(enums.Item(enum_size)) Then
+ ' syntax:
+ ' enum ErrorMessages {
+ ' ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...]
+ ' }
+
+ ' Set the mappings
+ re.Pattern = "\[.*\]"
+ If re.Test(line) Then
+ Dim mappings
+ mappings = re.Execute(line)(0).Value
+ re.Pattern = "[\[ \]]"
+ mappings = re.Replace(mappings, "")
+
+ mappings = Split(mappings, ",")
+ For i = LBound(mappings) To UBound(mappings)
+ enum_string_to_error_size = enum_string_to_error_size + 1
+ enum_string_to_error_mapping_string.Item(enum_string_to_error_size) = mappings(i)
+ enum_string_to_error_mapping_error.Item(enum_string_to_error_size) = enum_value.Item(enum_value_size)
+ Next
+
+ enum_error_to_string_size = enum_error_to_string_size + 1
+ enum_error_to_string_mapping.Item(enum_error_to_string_size) = enum_value.Item(enum_value_size)
+ End If
+ End If
+ re.Global = False
+ Exit Sub
+ End If
+
+ ' Add a const (non-enum) value
+ re.Pattern = "^[ ]*static const \w+ \w+ = -?\(?\w*\)?\w+;"
+ If re.Test(line) Then
+ const_size = const_size + 1
+ const_value.Item(const_size) = Split(line)(3)
+ Exit Sub
+ End If
+
+ ' Add a method to the list
+ re.Pattern = "^.*\(.*\).*$"
+ If re.Test(line) Then
+ Dim is_static, param_s, func, funcname, params, types
+ If cls_level <> 1 Then Exit Sub
+ re.Pattern = "~"
+ If re.Test(line) Then
+ If api_selected <> "" Then
+ WScript.Echo "Destructor for '" & cls & "' has @api. Tag ignored."
+ api_selected = ""
+ End If
+ Exit Sub
+ End If
+
+ re.Pattern = "static"
+ is_static = re.Test(line)
+ re.Pattern = "\bvirtual\b"
+ line = re.Replace(line, "")
+ re.Pattern = "\bstatic\b"
+ line = re.Replace(line, "")
+ re.Pattern = "\bconst\b"
+ line = re.Replace(line, "")
+ re.Pattern = "{.*"
+ line = re.Replace(line, "")
+ param_s = line
+ re.Pattern = "\*"
+ line = re.Replace(line, "")
+ re.Pattern = "\(.*"
+ line = re.Replace(line, "")
+ re.Pattern = "^[ ]*"
+ line = re.Replace(line, "")
+
+ re.Pattern = ".*\("
+ param_s = re.Replace(param_s, "")
+ re.Pattern = "\).*"
+ param_s = re.Replace(param_s, "")
+
+ func = Split(line)
+ If UBound(func) > 0 Then
+ funcname = func(1)
+ Else
+ funcname = ""
+ End If
+ If func(0) = cls And funcname = "" Then
+ If api_selected <> "" Then
+ WScript.Echo "Constructor for '" & cls & "' has @api. Tag ignored."
+ api_selected = ""
+ End If
+ cls_param(0) = param_s
+ If param_s = "" Then Exit Sub
+ ElseIf funcname = "" Then
+ Exit Sub
+ End If
+
+ params = Split(param_s, ",")
+ If is_static Then
+ types = "."
+ Else
+ types = "x"
+ End If
+ For i = LBound(params) To UBound(params)
+ Do ' null loop for logic short-circuit
+ re.Pattern = "^[ ]*"
+ params(i) = re.Replace(params(i), "")
+ re.Pattern = "\*|&"
+ If re.Test(params(i)) Then
+ re.Pattern = "^char"
+ If re.test(params(i)) Then
+ ' Many types can be converted to string, so use '.', not 's'. (handled by our glue code)
+ types = types & "."
+ Exit Do
+ End If
+ re.Pattern = "^void"
+ If re.test(params(i)) Then
+ types = types & "p"
+ Exit Do
+ End If
+ re.Pattern = "^Array"
+ If re.test(params(i)) Then
+ types = types & "a"
+ Exit Do
+ End If
+ re.Pattern = "^struct Array"
+ If re.test(params(i)) Then
+ types = types & "a"
+ Exit Do
+ End If
+ re.Pattern = "^Text"
+ If re.test(params(i)) Then
+ types = types & "."
+ Exit Do
+ End If
+ types = types & "x"
+ Exit Do
+ End If
+ re.Pattern = "^bool"
+ If re.Test(params(i)) Then
+ types = types & "b"
+ Exit Do
+ End If
+ re.Pattern = "^HSQUIRRELVM"
+ If re.Test(params(i)) Then
+ types = "v"
+ Exit Do
+ End If
+ types = types & "i"
+ Loop While False ' end of null loop
+ Next
+ i = i + 1
+
+ ' Check if we want to publish this function
+ If api_selected = "" Then api_selected = cls_in_api
+ If api_selected = "false" Then
+ api_selected = ""
+ Exit Sub
+ End If
+ api_selected = ""
+
+ If func(0) = cls And funcname = "" Then
+ cls_param(1) = i
+ cls_param(2) = types
+ Exit Sub
+ End If
+ If Left(funcname, 1) = "_" And types <> "v" Then Exit Sub
+ If is_static Then
+ static_method_size = static_method_size + 1
+ static_methods.Item(static_method_size) = Array(funcname, i, types)
+ Exit Sub
+ End If
+ method_size = method_size + 1
+ methods.Item(method_size) = Array(funcname, i, types)
+ Exit Sub
+ End If
+End Sub
+
+Sub SquirrelExport(api, srcfilename, dstfilename)
+ Dim src, dst, line
+ Set src = FSO.OpenTextFile(srcfilename, 1)
+ Set dst = FSO.OpenTextFile(dstfilename, 2, True)
+
+ enum_size = 0
+ Set enums = CreateObject("Scripting.Dictionary")
+ enum_value_size = 0
+ Set enum_value = CreateObject("Scripting.Dictionary")
+ enum_string_to_error_size = 0
+ Set enum_string_to_error_mapping_string = CreateObject("Scripting.Dictionary")
+ Set enum_string_to_error_mapping_error = CreateObject("Scripting.Dictionary")
+ enum_error_to_string_size = 0
+ Set enum_error_to_string_mapping = CreateObject("Scripting.Dictionary")
+ const_size = 0
+ Set const_value = CreateObject("Scripting.Dictionary")
+ struct_size = 0
+ Set structs = CreateObject("Scripting.Dictionary")
+ method_size = 0
+ Set methods = CreateObject("Scripting.Dictionary")
+ static_method_size = 0
+ Set static_methods = CreateObject("Scripting.Dictionary")
+ super_cls = ""
+ cls = ""
+ api_selected = ""
+ cls_in_api = ""
+ start_squirrel_define_on_next_line = False
+ has_fileheader = False
+ cls_level = 0
+ apis = LCase(api)
+ If apis = "gs" Then apis = "game"
+
+ While Not src.AtEndOfStream
+ line = src.ReadLine
+ SquirrelExportParse api, line, dst
+ Wend
+
+ src.Close
+ dst.Close
+End Sub
+
+Function SortDict(dict)
+ Set SortDict = CreateObject("Scripting.Dictionary")
+ While dict.Count <> 0
+ Dim first, i
+ first = ""
+ For Each i in dict
+ If first = "" Or StrComp(first, i) = 1 Then first = i
+ Next
+ SortDict.Add first, first
+ dict.Remove(first)
+ Wend
+End Function
+
+Sub ExportInstanceParse(apiuc, apilc, line, file)
+ Dim re, fname, f, files, r, regs
+ Set re = New RegExp
+
+ re.Pattern = "\.hpp\.sq"
+ If re.Test(line) Then
+ re.Pattern = "template"
+ If re.Test(line) Then
+ file.WriteLine line
+ End If
+ Exit Sub
+ End If
+
+ re.Pattern = "SQ" & apiuc & "Controller_Register"
+ If re.Test(line) Then
+ file.WriteLine line
+ Exit Sub
+ End If
+
+ re.Pattern = "SQ" & apiuc & ".*_Register"
+ If re.Test(line) Then Exit Sub
+
+ re.Pattern = "Note: this line is a marker in squirrel_export.sh. Do not change!"
+ If re.Test(line) Then
+ file.WriteLine line
+ Set files = CreateObject("Scripting.Dictionary")
+ For Each fname In FSO.GetFolder(".").Files
+ Do ' null loop for logic short-circuit
+ re.Pattern = ".*_(.*)\.hpp\.sq"
+ If Not re.Test(fname) Then Exit Do
+ Set f = FSO.OpenTextFile(fname, 1)
+ fname = fname.Name
+ re.Pattern = "^void SQ" & apiuc & ".*Register\(Squirrel \*engine\)$"
+ While Not f.AtEndOfStream
+ If re.Test(f.ReadLine) And Not files.Exists(fname) Then
+ files.Add fname, fname
+ End If
+ Wend
+ f.Close
+ Loop While False ' end of null loop
+ Next
+ Set files = SortDict(files)
+ For Each f in files
+ file.WriteLine "#include " & Chr(34) & "../script/api/" & apilc & "/" & f & Chr(34)
+ Next
+ Exit Sub
+ End If
+
+ re.Pattern = "/\* Register all classes \*/"
+ If re.Test(line) Then
+ file.WriteLine line
+ Set regs = CreateObject("Scripting.Dictionary")
+ ' List needs to be registered with squirrel before all List subclasses
+ file.WriteLine " SQ" & apiuc & "List_Register(this->engine);"
+ For Each fname In FSO.GetFolder(".").Files
+ Do ' null loop for logic short-circuit
+ re.Pattern = ".*_(.*)\.hpp\.sq"
+ If Not re.Test(fname) Then Exit Do
+ Set f = FSO.OpenTextFile(fname, 1)
+ While Not f.AtEndOfStream
+ Do ' null loop for logic short-circuit
+ r = f.ReadLine
+ re.Pattern = "^void SQ" & apiuc & ".*Register\(Squirrel \*engine\)$"
+ If Not re.Test(r) Then Exit Do
+ re.Pattern = "SQ" & apiuc & "List_Register"
+ If re.Test(r) Then Exit Do
+ re.Pattern = "^.*void "
+ r = re.Replace(r, "")
+ re.Pattern = "Squirrel \*"
+ r = re.Replace(r, "this->")
+ re.Pattern = "$"
+ r = re.Replace(r, ";")
+ re.Pattern = "_Register"
+ r = re.Replace(r, "0000Register")
+ If Not regs.Exists(r) Then regs.Add r, r
+ Loop While False ' end of null loop
+ Wend
+ f.Close
+ Loop While False ' end of null loop
+ Next
+ Set regs = SortDict(regs)
+ re.Pattern = "0000Register"
+ For Each r in regs.Items
+ r = re.Replace(r, "_Register")
+ If r <> "SQ" & apiuc & "Controller_Register(this->engine);" Then file.WriteLine " " & r
+ Next
+ Exit Sub
+ End If
+
+ file.WriteLine line
+End Sub
+
+Sub ExportInstance(apiuc, apilc, srcfilename, dstfilename)
+ Dim src, dst, line
+ Set src = FSO.OpenTextFile(srcfilename, 1)
+ Set dst = FSO.OpenTextFile(dstfilename, 2, True)
+
+ While Not src.AtEndOfStream
+ line = src.ReadLine
+ ExportInstanceParse apiuc, apilc, line, dst
+ Wend
+
+ src.Close
+ dst.Close
+End Sub
+
+' Recursive entry point
+Sub Main
+ Dim WSH, scriptdir, apilc, re, api, apiuc, f, bf
+ Set WSH = CreateObject("WScript.Shell")
+ Set re = New RegExp
+
+ ' This must be called from within a src/???/api directory.
+ scriptdir = FSO.GetParentFolderName(WScript.ScriptFullName)
+ apilc = WSH.CurrentDirectory
+ re.Pattern = "\\api"
+ apilc = re.Replace(apilc, "")
+ re.Pattern = ".*\\"
+ apilc = re.Replace(apilc, "")
+
+ ' Check if we are in the root directory of the API, as then we generate all APIs
+ If apilc = "script" Then
+ For Each api In FSO.GetFolder(".").SubFolders
+ WScript.Echo "Generating for API '" & api.Name & "' ..."
+ WSH.CurrentDirectory = api
+ Main
+ Next
+ WScript.Quit 0
+ End If
+
+ Select Case apilc
+ Case "template" apiuc = "Template"
+ Case "ai" apiuc = "AI"
+ Case "game" apiuc = "GS"
+ Case Else
+ WScript.Echo "Unknown API type."
+ Exit Sub
+ End Select
+
+ For Each f in FSO.GetFolder("..").Files
+ Do ' null loop for logic short-circuit
+ re.Pattern = ".*\.hpp"
+ If Not re.Test(f) Then Exit Do
+ ' ScriptController has custom code, and should not be generated
+ If f.Name = "script_controller.hpp" Then Exit Do
+ re.Pattern = "script_"
+ bf = re.Replace(f.name, apilc & "_")
+ SquirrelExport apiuc, f, bf & ".tmp"
+ If IsEmptyFile(bf & ".tmp") Then
+ If FSO.FileExists(bf & ".sq") Then
+ WScript.Echo "Deleted: " & bf & ".sq"
+ FSO.DeleteFile bf & ".sq"
+ End If
+ FSO.DeleteFile bf & ".tmp"
+ ElseIf Not FSO.FileExists(bf & ".sq") Or Not CompareFiles(bf & ".sq", bf & ".tmp") Then
+ If FSO.FileExists(bf & ".sq") Then FSO.DeleteFile bf & ".sq"
+ FSO.MoveFile bf & ".tmp", bf & ".sq"
+ WScript.Echo "Updated: " & bf & ".sq"
+ Else
+ FSO.DeleteFile bf & ".tmp"
+ End If
+ Loop While False ' end of null loop
+ Next
+
+ ' Remove .hpp.sq if .hpp doesn't exist anymore
+ For Each f in FSO.GetFolder(".").Files
+ Do ' null loop for logic short-circuit
+ re.Pattern = ".*\.hpp\.sq"
+ If Not re.Test(f) Then Exit Do
+ f = f.Name
+ re.Pattern = "\.hpp\.sq$"
+ f = re.Replace(f, ".hpp")
+ re.Pattern = apilc & "_"
+ f = re.Replace(f, "script_")
+ If Not FSO.FileExists("..\" & f) Then
+ WScript.Echo "Deleted: " & f & ".sq"
+ 'FSO.DeleteFile f & ".sq"
+ End If
+ Loop While False ' end of null loop
+ Next
+
+ If apilc = "template" Then Exit Sub
+
+ ' Add stuff to ${apilc}_instance.cpp
+ f = "..\..\..\" & apilc & "\" & apilc & "_instance.cpp"
+ ExportInstance apiuc, apilc, f, f & ".tmp"
+ If Not FSO.FileExists(f) Or Not CompareFiles(f, f & ".tmp") Then
+ If FSO.FileExists(f) Then FSO.DeleteFile f
+ FSO.MoveFile f & ".tmp", f
+ WScript.Echo "Updated: " & f
+ Else
+ FSO.DeleteFile f & ".tmp"
+ End If
+End Sub
+
+Main
diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp
index dfc675473c..3dfd6bb0b2 100644
--- a/src/script/script_config.hpp
+++ b/src/script/script_config.hpp
@@ -139,7 +139,7 @@ public:
/**
* Randomize all settings the Script requested to be randomized.
*/
- void AddRandomDeviation();
+ virtual void AddRandomDeviation();
/**
* Is this config attached to an Script? In other words, is there a Script
diff --git a/src/settings.cpp b/src/settings.cpp
index 3e61cc87f8..41d3e28092 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1095,7 +1095,7 @@ static bool InvalidateNewGRFChangeWindows(int32 p1)
static bool InvalidateCompanyLiveryWindow(int32 p1)
{
- InvalidateWindowClassesData(WC_COMPANY_COLOUR);
+ InvalidateWindowClassesData(WC_COMPANY_COLOUR, -1);
return RedrawScreen(p1);
}
@@ -1174,6 +1174,7 @@ static bool MaxNoAIsChange(int32 i)
ShowErrorMessage(STR_WARNING_NO_SUITABLE_AI, INVALID_STRING_ID, WL_CRITICAL);
}
+ InvalidateWindowClassesData(WC_GAME_OPTIONS, 0);
return true;
}
@@ -1312,6 +1313,15 @@ static bool MaxVehiclesChanged(int32 p1)
return true;
}
+static bool InvalidateShipPathCache(int32 p1)
+{
+ Ship *s;
+ FOR_ALL_SHIPS(s) {
+ s->path.clear();
+ }
+ return true;
+}
+
#ifdef ENABLE_NETWORK
@@ -1367,7 +1377,7 @@ static void PrepareOldDiffCustom()
*/
static void HandleOldDiffCustom(bool savegame)
{
- uint options_to_load = GAME_DIFFICULTY_NUM - ((savegame && IsSavegameVersionBefore(4)) ? 1 : 0);
+ uint options_to_load = GAME_DIFFICULTY_NUM - ((savegame && IsSavegameVersionBefore(SLV_4)) ? 1 : 0);
if (!savegame) {
/* If we did read to old_diff_custom, then at least one value must be non 0. */
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 134b1f58ff..2faf2b150b 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -162,7 +162,7 @@ struct BaseSetTextfileWindow : public TextfileWindow {
template
void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet* baseset, StringID content_type)
{
- DeleteWindowByClass(WC_TEXTFILE);
+ DeleteWindowById(WC_TEXTFILE, file_type);
new BaseSetTextfileWindow(file_type, baseset, content_type);
}
@@ -182,6 +182,7 @@ struct GameOptionsWindow : Window {
~GameOptionsWindow()
{
DeleteWindowById(WC_CUSTOM_CURRENCY, 0);
+ DeleteWindowByClass(WC_TEXTFILE);
if (this->reload) _switch_mode = SM_MENU;
}
diff --git a/src/ship.h b/src/ship.h
index 0f396a237d..60d4466d68 100644
--- a/src/ship.h
+++ b/src/ship.h
@@ -12,17 +12,25 @@
#ifndef SHIP_H
#define SHIP_H
+#include
+
#include "vehicle_base.h"
#include "water_map.h"
void GetShipSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
WaterClass GetEffectiveWaterClass(TileIndex tile);
+typedef std::deque ShipPathCache;
+
/**
* All ships have this type.
*/
struct Ship FINAL : public SpecializedVehicle {
- TrackBitsByte state; ///< The "track" the ship is following.
+ TrackBitsByte state; ///< The "track" the ship is following.
+ ShipPathCache path; ///< Cached path.
+ DirectionByte rotation; ///< Visible direction.
+ int16 rotation_x_pos; ///< NOSAVE: X Position before rotation.
+ int16 rotation_y_pos; ///< NOSAVE: Y Position before rotation.
/** We don't want GCC to zero our struct! It already is zeroed and has an index! */
Ship() : SpecializedVehicleBase() {}
@@ -46,8 +54,11 @@ struct Ship FINAL : public SpecializedVehicle {
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
void UpdateCache();
+ void SetDestTile(TileIndex tile);
};
+static const uint SHIP_MAX_ORDER_DISTANCE = 130;
+
/**
* Iterate over all ships.
* @param var The variable used for iteration.
diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp
index e606afc0ce..5d3a28b1b4 100644
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -129,6 +129,8 @@ void Ship::GetImage(Direction direction, EngineImageType image_type, VehicleSpri
{
uint8 spritenum = this->spritenum;
+ if (image_type == EIT_ON_MAP) direction = this->rotation;
+
if (is_custom_sprite(spritenum)) {
GetCustomVehicleSprite(this, direction, image_type, result);
if (result->IsValid()) return;
@@ -193,7 +195,7 @@ static void CheckIfShipNeedsService(Vehicle *v)
}
v->current_order.MakeGoToDepot(depot->index, ODTFB_SERVICE);
- v->dest_tile = depot->xy;
+ v->SetDestTile(depot->xy);
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP);
}
@@ -311,12 +313,29 @@ void Ship::UpdateDeltaXY()
{32, 6, -16, -3}, // NW
};
- const int8 *bb = _delta_xy_table[this->direction];
+ const int8 *bb = _delta_xy_table[this->rotation];
this->x_offs = bb[3];
this->y_offs = bb[2];
this->x_extent = bb[1];
this->y_extent = bb[0];
this->z_extent = 6;
+
+ if (this->direction != this->rotation) {
+ /* If we are rotating, then it is possible the ship was moved to its next position. In that
+ * case, because we are still showing the old direction, the ship will appear to glitch sideways
+ * slightly. We can work around this by applying an additional offset to make the ship appear
+ * where it was before it moved. */
+ this->x_offs -= this->x_pos - this->rotation_x_pos;
+ this->y_offs -= this->y_pos - this->rotation_y_pos;
+ }
+}
+
+/**
+ * Test-procedure for HasVehicleOnPos to check for a ship.
+ */
+static Vehicle *EnsureNoVisibleShipProc(Vehicle *v, void *data)
+{
+ return v->type == VEH_SHIP && (v->vehstatus & VS_HIDDEN) == 0 ? v : NULL;
}
static bool CheckShipLeaveDepot(Ship *v)
@@ -330,6 +349,13 @@ static bool CheckShipLeaveDepot(Ship *v)
return true;
}
+ /* Don't leave depot if no destination set */
+ if (v->dest_tile == 0) return true;
+
+ /* Don't leave depot if another vehicle is already entering/leaving */
+ /* This helps avoid CPU load if many ships are set to start at the same time */
+ if (HasVehicleOnPos(v->tile, NULL, &EnsureNoVisibleShipProc)) return true;
+
TileIndex tile = v->tile;
Axis axis = GetShipDepotAxis(tile);
@@ -355,10 +381,10 @@ static bool CheckShipLeaveDepot(Ship *v)
if (north_tracks) {
/* Leave towards north */
- v->direction = DiagDirToDir(north_dir);
+ v->rotation = v->direction = DiagDirToDir(north_dir);
} else if (south_tracks) {
/* Leave towards south */
- v->direction = DiagDirToDir(south_dir);
+ v->rotation = v->direction = DiagDirToDir(south_dir);
} else {
/* Both ways blocked */
return false;
@@ -443,11 +469,41 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr
bool path_found = true;
Track track;
- switch (_settings_game.pf.pathfinder_for_ships) {
- case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break;
- case VPF_NPF: track = NPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break;
- case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found); break;
- default: NOT_REACHED();
+
+ if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > SHIP_MAX_ORDER_DISTANCE + 5) {
+ /* No destination or destination too far, don't invoke pathfinder. */
+ track = TrackBitsToTrack(v->state);
+ if (!IsDiagonalTrack(track)) track = TrackToOppositeTrack(track);
+ if (!HasBit(tracks, track)) {
+ /* Can't continue in same direction so pick first available track. */
+ if (_settings_game.pf.forbid_90_deg) {
+ tracks &= ~TrackCrossesTracks(TrackdirToTrack(v->GetVehicleTrackdir()));
+ if (tracks == TRACK_BIT_NONE) return INVALID_TRACK;
+ }
+ track = FindFirstTrack(tracks);
+ }
+ path_found = false;
+ } else {
+ /* Attempt to follow cached path. */
+ if (!v->path.empty()) {
+ track = TrackdirToTrack(v->path.front());
+
+ if (HasBit(tracks, track)) {
+ v->path.pop_front();
+ /* HandlePathfindResult() is not called here because this is not a new pathfinder result. */
+ return track;
+ }
+
+ /* Cached path is invalid so continue with pathfinder. */
+ v->path.clear();
+ }
+
+ switch (_settings_game.pf.pathfinder_for_ships) {
+ case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break;
+ case VPF_NPF: track = NPFShipChooseTrack(v, path_found); break;
+ case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found, v->path); break;
+ default: NOT_REACHED();
+ }
}
v->HandlePathfindingResult(path_found);
@@ -498,7 +554,6 @@ static void ShipController(Ship *v)
{
uint32 r;
const byte *b;
- Direction dir;
Track track;
TrackBits tracks;
@@ -518,6 +573,16 @@ static void ShipController(Ship *v)
v->ShowVisualEffect();
+ /* Rotating on spot */
+ if (v->direction != v->rotation) {
+ if ((v->tick_counter & 7) == 0) {
+ DirDiff diff = DirDifference(v->direction, v->rotation);
+ v->rotation = ChangeDir(v->rotation, diff > DIRDIFF_REVERSE ? DIRDIFF_45LEFT : DIRDIFF_45RIGHT);
+ v->UpdateViewport(true, true);
+ }
+ return;
+ }
+
if (!ShipAccelerate(v)) return;
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
@@ -608,7 +673,25 @@ static void ShipController(Ship *v)
if (old_wc != new_wc) v->UpdateCache();
}
- v->direction = (Direction)b[2];
+ Direction new_direction = (Direction)b[2];
+ DirDiff diff = DirDifference(new_direction, v->direction);
+ switch (diff) {
+ case DIRDIFF_SAME:
+ case DIRDIFF_45RIGHT:
+ case DIRDIFF_45LEFT:
+ /* Continue at speed */
+ v->rotation = v->direction = new_direction;
+ break;
+
+ default:
+ /* Stop for rotation */
+ v->cur_speed = 0;
+ v->direction = new_direction;
+ /* Remember our current location to avoid movement glitch */
+ v->rotation_x_pos = v->x_pos;
+ v->rotation_y_pos = v->y_pos;
+ break;
+ }
}
} else {
/* On a bridge */
@@ -632,8 +715,12 @@ getout:
return;
reverse_direction:
- dir = ReverseDir(v->direction);
- v->direction = dir;
+ v->direction = ReverseDir(v->direction);
+ /* Remember our current location to avoid movement glitch */
+ v->rotation_x_pos = v->x_pos;
+ v->rotation_y_pos = v->y_pos;
+ v->cur_speed = 0;
+ v->path.clear();
goto getout;
}
@@ -648,6 +735,13 @@ bool Ship::Tick()
return true;
}
+void Ship::SetDestTile(TileIndex tile)
+{
+ if (tile == this->dest_tile) return;
+ this->path.clear();
+ this->dest_tile = tile;
+}
+
/**
* Build a ship.
* @param tile tile of the depot where ship is built.
diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp
index df9fd2df23..10eeca5d36 100644
--- a/src/smallmap_gui.cpp
+++ b/src/smallmap_gui.cpp
@@ -923,8 +923,8 @@ void SmallMapWindow::DrawMapIndicators() const
/* Find main viewport. */
const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport;
- Point upper_left_smallmap_coord = TranslateXYToTileCoord(vp, vp->left, vp->top, false);
- Point lower_right_smallmap_coord = TranslateXYToTileCoord(vp, vp->left + vp->width - 1, vp->top + vp->height - 1, false);
+ Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top);
+ Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1);
Point upper_left = this->RemapTile(upper_left_smallmap_coord.x / (int)TILE_SIZE, upper_left_smallmap_coord.y / (int)TILE_SIZE);
upper_left.x -= this->subscroll;
@@ -1645,7 +1645,7 @@ void SmallMapWindow::SetNewScroll(int sx, int sy, int sub)
void SmallMapWindow::SmallMapCenterOnCurrentPos()
{
const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport;
- Point viewport_center = TranslateXYToTileCoord(vp, vp->left + vp->width / 2, vp->top + vp->height / 2);
+ Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2);
int sub;
const NWidgetBase *wid = this->GetWidget(WID_SM_MAP);
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index b4c7523606..f088ccf6e2 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -1767,16 +1767,16 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
bool distant_join = (station_to_join != INVALID_STATION);
uint8 width = (uint8)GB(p1, 0, 8);
- uint8 lenght = (uint8)GB(p1, 8, 8);
+ uint8 length = (uint8)GB(p1, 8, 8);
/* Check if the requested road stop is too big */
- if (width > _settings_game.station.station_spread || lenght > _settings_game.station.station_spread) return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT);
+ if (width > _settings_game.station.station_spread || length > _settings_game.station.station_spread) return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT);
/* Check for incorrect width / length. */
- if (width == 0 || lenght == 0) return CMD_ERROR;
+ if (width == 0 || length == 0) return CMD_ERROR;
/* Check if the first tile and the last tile are valid */
- if (!IsValidTile(tile) || TileAddWrap(tile, width - 1, lenght - 1) == INVALID_TILE) return CMD_ERROR;
+ if (!IsValidTile(tile) || TileAddWrap(tile, width - 1, length - 1) == INVALID_TILE) return CMD_ERROR;
- TileArea roadstop_area(tile, width, lenght);
+ TileArea roadstop_area(tile, width, length);
if (distant_join && (!_settings_game.station.distant_join_stations || !Station::IsValidID(station_to_join))) return CMD_ERROR;
@@ -1980,7 +1980,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags)
FOR_ALL_ROADVEHICLES(v) {
if (v->First() == v && v->current_order.IsType(OT_GOTO_STATION) &&
v->dest_tile == tile) {
- v->dest_tile = v->GetOrderStationLocation(st->index);
+ v->SetDestTile(v->GetOrderStationLocation(st->index));
}
}
@@ -2604,7 +2604,7 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags)
}
if (s->dest_tile == docking_location) {
- s->dest_tile = 0;
+ s->SetDestTile(0);
s->current_order.Free();
}
}
@@ -3433,7 +3433,7 @@ void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2)
/* Reroute cargo in station. */
ge.cargo.Reroute(UINT_MAX, &ge.cargo, avoid, avoid2, &ge);
- /* Reroute cargo staged to be transfered. */
+ /* Reroute cargo staged to be transferred. */
for (std::list::iterator it(st->loading_vehicles.begin()); it != st->loading_vehicles.end(); ++it) {
for (Vehicle *v = *it; v != NULL; v = v->Next()) {
if (v->cargo_type != c) continue;
@@ -3443,7 +3443,7 @@ void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2)
}
/**
- * Check all next hops of cargo packets in this station for existance of a
+ * Check all next hops of cargo packets in this station for existence of a
* a valid link they may use to travel on. Reroute any cargo not having a valid
* link and remove timed out links found like this from the linkgraph. We're
* not all links here as that is expensive and useless. A link no one is using
@@ -4230,7 +4230,7 @@ void FlowStat::Invalidate()
}
/**
- * Change share for specified station. By specifing INT_MIN as parameter you
+ * Change share for specified station. By specifying INT_MIN as parameter you
* can erase a share. Newly added flows will be unrestricted.
* @param st Next Hop to be removed.
* @param flow Share to be added or removed.
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 11af2f55f4..5c2e06070b 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -657,7 +657,7 @@ const CargoTypes CompanyStationsWindow::cargo_filter_max = ALL_CARGOTYPES;
CargoTypes CompanyStationsWindow::cargo_filter = ALL_CARGOTYPES;
const Station *CompanyStationsWindow::last_station = NULL;
-/* Availible station sorting functions */
+/* Available station sorting functions */
GUIStationList::SortFunction * const CompanyStationsWindow::sorter_funcs[] = {
&StationNameSorter,
&StationTypeSorter,
diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp
index 44cbd127a1..98e11e2eb6 100644
--- a/src/strgen/strgen.cpp
+++ b/src/strgen/strgen.cpp
@@ -540,6 +540,7 @@ int CDECL main(int argc, char *argv[])
HeaderFileWriter writer(pathbuf);
writer.WriteHeader(data);
writer.Finalise(data);
+ if (_errors != 0) return 1;
} else if (mgo.numleft >= 1) {
char *r;
diff --git a/src/table/company_settings.ini b/src/table/company_settings.ini
index 71b95cc393..a6e873f659 100644
--- a/src/table/company_settings.ini
+++ b/src/table/company_settings.ini
@@ -31,7 +31,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
diff --git a/src/table/currency_settings.ini b/src/table/currency_settings.ini
index dede8b0fb7..bcce65801b 100644
--- a/src/table/currency_settings.ini
+++ b/src/table/currency_settings.ini
@@ -25,7 +25,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
diff --git a/src/table/engines.h b/src/table/engines.h
index b79733c7ae..3b29a8dc17 100644
--- a/src/table/engines.h
+++ b/src/table/engines.h
@@ -28,6 +28,19 @@
*/
#define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
+/**
+ * Writes the properties of a multiple-unit train into the EngineInfo struct.
+ * @see EngineInfo
+ * @param a base introduction date (days since 1920-01-01)
+ * @param b decay speed
+ * @param c life length (years)
+ * @param d base life (years)
+ * @param e cargo type
+ * @param f Bitmask of the climates
+ * @note the 5 between b and f is the load amount
+ */
+#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS | 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
+
/**
* Writes the properties of a train carriage into the EngineInfo struct.
* @param a base introduction date (days since 1920-01-01)
@@ -102,8 +115,8 @@ static const EngineInfo _orig_engine_info[] = {
MT( 5114, 20, 21, 30, 0 , T ), // 8 Chaney 'Jubilee' (Steam)
MT( 5479, 20, 20, 30, 0 , T ), // 9 Ginzu 'A4' (Steam)
MT( 12419, 20, 23, 25, 0 , T ), // 10 SH '8P' (Steam)
- MT( 13149, 20, 12, 30, CT_PASSENGERS , T ), // 11 Manley-Morel DMU (Diesel)
- MT( 23376, 20, 15, 35, CT_PASSENGERS , T ), // 12 'Dash' (Diesel)
+ MM( 13149, 20, 12, 30, CT_PASSENGERS , T ), // 11 Manley-Morel DMU (Diesel)
+ MM( 23376, 20, 15, 35, CT_PASSENGERS , T ), // 12 'Dash' (Diesel)
MT( 14976, 20, 18, 28, 0 , T ), // 13 SH/Hendry '25' (Diesel)
MT( 14245, 20, 20, 30, 0 , T ), // 14 UU '37' (Diesel)
MT( 15341, 20, 22, 33, 0 , T ), // 15 Floss '47' (Diesel)
@@ -111,13 +124,13 @@ static const EngineInfo _orig_engine_info[] = {
MT( 16437, 20, 20, 30, 0 , A|S ), // 17 CS 2400 (Diesel)
MT( 18993, 20, 22, 30, 0 , A|S ), // 18 Centennial (Diesel)
MT( 13880, 20, 22, 30, 0 , A|S ), // 19 Kelling 3100 (Diesel)
- MT( 20454, 20, 22, 30, 0 , A|S ), // 20 Turner Turbo (Diesel)
+ MM( 20454, 20, 22, 30, 0 , A|S ), // 20 Turner Turbo (Diesel)
MT( 16071, 20, 22, 30, 0 , A|S ), // 21 MJS 1000 (Diesel)
MT( 20820, 20, 20, 25, CT_MAIL , T ), // 22 SH '125' (Diesel)
MT( 16437, 20, 23, 30, 0 , T ), // 23 SH '30' (Electric)
MT( 19359, 20, 23, 80, 0 , T ), // 24 SH '40' (Electric)
- MT( 23376, 20, 25, 30, 0 , T ), // 25 'T.I.M.' (Electric)
- MT( 26298, 20, 25, 50, 0 , T ), // 26 'AsiaStar' (Electric)
+ MM( 23376, 20, 25, 30, 0 , T ), // 25 'T.I.M.' (Electric)
+ MM( 26298, 20, 25, 50, 0 , T ), // 26 'AsiaStar' (Electric)
MW( 1827, 20, 20, 50, CT_PASSENGERS , T|A|S|Y), // 27 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , T|A|S|Y), // 28 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , T|A ), // 29 Coal Truck
diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini
index 3a47c09e33..624d475c31 100644
--- a/src/table/gameopt_settings.ini
+++ b/src/table/gameopt_settings.ini
@@ -59,7 +59,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
@@ -77,7 +77,7 @@ def = 0
min = 0
max = 0
full = NULL
-to = 3
+to = SLV_4
[SDTG_GENERAL]
name = ""diff_custom""
@@ -91,7 +91,7 @@ def = 0
min = 0
max = 0
full = NULL
-from = 4
+from = SLV_4
##
[SDTG_VAR]
@@ -152,21 +152,21 @@ type = SLE_UINT8
def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT
min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT
max = MAX_SNOWLINE_HEIGHT * TILE_HEIGHT
-to = 21
+to = SLV_22
[SDT_NULL]
length = 1
-from = 22
-to = 164
+from = SLV_22
+to = SLV_165
[SDT_NULL]
length = 1
-to = 22
+to = SLV_23
[SDTC_OMANY]
var = gui.autosave
type = SLE_UINT8
-from = 23
+from = SLV_23
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
def = 1
max = 4
diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini
index 52ca2d16ef..b710478fba 100644
--- a/src/table/misc_settings.ini
+++ b/src/table/misc_settings.ini
@@ -32,7 +32,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
diff --git a/src/table/settings.ini b/src/table/settings.ini
index bb6159693a..2b36e32b7c 100644
--- a/src/table/settings.ini
+++ b/src/table/settings.ini
@@ -42,6 +42,7 @@ static bool InvalidateCompanyInfrastructureWindow(int32 p1);
static bool InvalidateCompanyWindow(int32 p1);
static bool ZoomMinMaxChanged(int32 p1);
static bool MaxVehiclesChanged(int32 p1);
+static bool InvalidateShipPathCache(int32 p1);
#ifdef ENABLE_NETWORK
static bool UpdateClientName(int32 p1);
@@ -88,7 +89,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
@@ -100,7 +101,7 @@ cat = SC_ADVANCED
base = GameSettings
var = difficulty.max_no_competitors
type = SLE_UINT8
-from = 97
+from = SLV_97
def = 0
min = 0
max = MAX_COMPANIES - 1
@@ -110,14 +111,14 @@ cat = SC_BASIC
[SDT_NULL]
length = 1
-from = 97
-to = 109
+from = SLV_97
+to = SLV_110
[SDT_VAR]
base = GameSettings
var = difficulty.number_towns
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_NEWGAME_ONLY
def = 2
min = 0
@@ -130,7 +131,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.industry_density
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING
def = ID_END - 1
min = 0
@@ -145,7 +146,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.max_loan
type = SLE_UINT32
-from = 97
+from = SLV_97
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_CURRENCY
def = 300000
min = 100000
@@ -160,7 +161,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.initial_interest
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = 2
min = 2
@@ -174,7 +175,7 @@ strval = STR_CONFIG_SETTING_PERCENTAGE
base = GameSettings
var = difficulty.vehicle_costs
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING
def = 0
min = 0
@@ -189,7 +190,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.competitor_speed
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING
def = 2
min = 0
@@ -202,14 +203,14 @@ cat = SC_BASIC
[SDT_NULL]
length = 1
-from = 97
-to = 109
+from = SLV_97
+to = SLV_110
[SDT_VAR]
base = GameSettings
var = difficulty.vehicle_breakdowns
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING
def = 1
min = 0
@@ -224,7 +225,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.subsidy_multiplier
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING
def = 2
min = 0
@@ -238,7 +239,7 @@ strval = STR_SUBSIDY_X1_5
base = GameSettings
var = difficulty.construction_cost
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING
def = 0
min = 0
@@ -253,7 +254,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.terrain_type
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 1
min = 0
@@ -268,7 +269,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.quantity_sea_lakes
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_NEWGAME_ONLY
def = 0
min = 0
@@ -280,7 +281,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = difficulty.economy
-from = 97
+from = SLV_97
def = false
str = STR_CONFIG_SETTING_RECESSIONS
strhelp = STR_CONFIG_SETTING_RECESSIONS_HELPTEXT
@@ -288,7 +289,7 @@ strhelp = STR_CONFIG_SETTING_RECESSIONS_HELPTEXT
[SDT_BOOL]
base = GameSettings
var = difficulty.line_reverse_mode
-from = 97
+from = SLV_97
def = false
str = STR_CONFIG_SETTING_TRAIN_REVERSING
strhelp = STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT
@@ -296,7 +297,7 @@ strhelp = STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT
[SDT_BOOL]
base = GameSettings
var = difficulty.disasters
-from = 97
+from = SLV_97
def = false
str = STR_CONFIG_SETTING_DISASTERS
strhelp = STR_CONFIG_SETTING_DISASTERS_HELPTEXT
@@ -306,7 +307,7 @@ cat = SC_BASIC
base = GameSettings
var = difficulty.town_council_tolerance
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING
def = 0
min = 0
@@ -322,8 +323,8 @@ name = ""diff_level""
var = _old_diff_level
type = SLE_UINT8
flags = SLF_NOT_IN_CONFIG
-from = 97
-to = 177
+from = SLV_97
+to = SLV_178
def = 3
min = 0
max = 3
@@ -335,7 +336,7 @@ cat = SC_BASIC
base = GameSettings
var = game_creation.town_name
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_NO_NETWORK
def = 0
max = 255
@@ -346,7 +347,7 @@ cat = SC_BASIC
base = GameSettings
var = game_creation.landscape
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 0
max = 3
@@ -360,14 +361,14 @@ cat = SC_BASIC
; Snow line (or snow_line_height * TILE_HEIGHT)
[SDT_NULL]
length = 1
-from = 97
-to = 163
+from = SLV_97
+to = SLV_164
[SDT_OMANY]
base = GameSettings
var = vehicle.road_side
type = SLE_UINT8
-from = 97
+from = SLV_97
guiflags = SGF_MULTISTRING | SGF_NO_NETWORK
def = 1
max = 1
@@ -383,7 +384,7 @@ proc = CheckRoadSide
base = GameSettings
var = construction.max_heightlevel
type = SLE_UINT8
-from = 194
+from = SLV_194
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = DEF_MAX_HEIGHTLEVEL
min = MIN_MAX_HEIGHTLEVEL
@@ -406,7 +407,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.command_pause_level
type = SLE_UINT8
-from = 154
+from = SLV_154
guiflags = SGF_MULTISTRING | SGF_NO_NETWORK
def = 1
min = 0
@@ -420,7 +421,7 @@ strval = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS
base = GameSettings
var = construction.terraform_per_64k_frames
type = SLE_UINT32
-from = 156
+from = SLV_156
def = 64 << 16
min = 0
max = 1 << 30
@@ -431,7 +432,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.terraform_frame_burst
type = SLE_UINT16
-from = 156
+from = SLV_156
def = 4096
min = 0
max = 1 << 30
@@ -442,7 +443,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.clear_per_64k_frames
type = SLE_UINT32
-from = 156
+from = SLV_156
def = 64 << 16
min = 0
max = 1 << 30
@@ -453,7 +454,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.clear_frame_burst
type = SLE_UINT16
-from = 156
+from = SLV_156
def = 4096
min = 0
max = 1 << 30
@@ -464,7 +465,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.tree_per_64k_frames
type = SLE_UINT32
-from = 175
+from = SLV_175
def = 64 << 16
min = 0
max = 1 << 30
@@ -475,7 +476,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.tree_frame_burst
type = SLE_UINT16
-from = 175
+from = SLV_175
def = 4096
min = 0
max = 1 << 30
@@ -485,7 +486,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = construction.autoslope
-from = 75
+from = SLV_75
def = true
str = STR_CONFIG_SETTING_AUTOSLOPE
strhelp = STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT
@@ -502,7 +503,7 @@ strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT
base = GameSettings
var = construction.max_bridge_length
type = SLE_UINT16
-from = 159
+from = SLV_159
guiflags = SGF_NO_NETWORK
def = 64
min = 1
@@ -516,7 +517,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH
base = GameSettings
var = construction.max_bridge_height
type = SLE_UINT8
-from = 194
+from = SLV_194
guiflags = SGF_NO_NETWORK
def = 12
min = 1
@@ -531,7 +532,7 @@ cat = SC_EXPERT
base = GameSettings
var = construction.max_tunnel_length
type = SLE_UINT16
-from = 159
+from = SLV_159
guiflags = SGF_NO_NETWORK
def = 64
min = 1
@@ -544,7 +545,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH
# construction.longbridges
[SDT_NULL]
length = 1
-to = 158
+to = SLV_159
[SDT_VAR]
base = GameSettings
@@ -572,7 +573,7 @@ strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT
base = GameSettings
var = economy.town_layout
type = SLE_UINT8
-from = 59
+from = SLV_59
guiflags = SGF_MULTISTRING
def = TL_ORIGINAL
min = TL_BEGIN
@@ -586,7 +587,7 @@ proc = TownFoundingChanged
[SDT_BOOL]
base = GameSettings
var = economy.allow_town_roads
-from = 113
+from = SLV_113
guiflags = SGF_NO_NETWORK
def = true
str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
@@ -596,7 +597,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
base = GameSettings
var = economy.found_town
type = SLE_UINT8
-from = 128
+from = SLV_128
guiflags = SGF_MULTISTRING
def = TF_FORBIDDEN
min = TF_BEGIN
@@ -611,7 +612,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = economy.allow_town_level_crossings
-from = 143
+from = SLV_143
guiflags = SGF_NO_NETWORK
def = true
str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS
@@ -623,7 +624,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT
base = GameSettings
var = linkgraph.recalc_interval
type = SLE_UINT16
-from = 183
+from = SLV_183
def = 4
min = 2
max = 32
@@ -636,7 +637,7 @@ strhelp = STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT
base = GameSettings
var = linkgraph.recalc_time
type = SLE_UINT16
-from = 183
+from = SLV_183
def = 16
min = 1
max = 4096
@@ -649,7 +650,7 @@ strhelp = STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT
base = GameSettings
var = linkgraph.distribution_pax
type = SLE_UINT8
-from = 183
+from = SLV_183
guiflags = SGF_MULTISTRING
def = DT_MANUAL
min = DT_MIN
@@ -663,7 +664,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT
base = GameSettings
var = linkgraph.distribution_mail
type = SLE_UINT8
-from = 183
+from = SLV_183
guiflags = SGF_MULTISTRING
def = DT_MANUAL
min = DT_MIN
@@ -677,7 +678,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT
base = GameSettings
var = linkgraph.distribution_armoured
type = SLE_UINT8
-from = 183
+from = SLV_183
guiflags = SGF_MULTISTRING
def = DT_MANUAL
min = DT_MIN
@@ -691,7 +692,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT
base = GameSettings
var = linkgraph.distribution_default
type = SLE_UINT8
-from = 183
+from = SLV_183
guiflags = SGF_MULTISTRING
def = DT_MANUAL
min = DT_BEGIN
@@ -705,7 +706,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT
base = GameSettings
var = linkgraph.accuracy
type = SLE_UINT8
-from = 183
+from = SLV_183
def = 16
min = 2
max = 64
@@ -718,7 +719,7 @@ strhelp = STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT
base = GameSettings
var = linkgraph.demand_distance
type = SLE_UINT8
-from = 183
+from = SLV_183
def = 100
min = 0
max = 255
@@ -731,7 +732,7 @@ strhelp = STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT
base = GameSettings
var = linkgraph.demand_size
type = SLE_UINT8
-from = 183
+from = SLV_183
def = 100
min = 0
max = 100
@@ -744,7 +745,7 @@ strhelp = STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT
base = GameSettings
var = linkgraph.short_path_saturation
type = SLE_UINT8
-from = 183
+from = SLV_183
def = 80
min = 0
max = 250
@@ -773,7 +774,7 @@ proc = TrainAccelerationModelChanged
base = GameSettings
var = vehicle.roadveh_acceleration_model
type = SLE_UINT8
-from = 139
+from = SLV_139
guiflags = SGF_MULTISTRING
def = 1
min = 0
@@ -788,7 +789,7 @@ proc = RoadVehAccelerationModelChanged
base = GameSettings
var = vehicle.train_slope_steepness
type = SLE_UINT8
-from = 133
+from = SLV_133
def = 3
min = 0
max = 10
@@ -803,7 +804,7 @@ cat = SC_EXPERT
base = GameSettings
var = vehicle.roadveh_slope_steepness
type = SLE_UINT8
-from = 139
+from = SLV_139
def = 7
min = 0
max = 10
@@ -820,13 +821,14 @@ var = pf.forbid_90_deg
def = false
str = STR_CONFIG_SETTING_FORBID_90_DEG
strhelp = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT
+proc = InvalidateShipPathCache
cat = SC_EXPERT
[SDT_VAR]
base = GameSettings
var = vehicle.max_train_length
type = SLE_UINT8
-from = 159
+from = SLV_159
def = 7
min = 1
max = 64
@@ -839,13 +841,13 @@ cat = SC_BASIC
; vehicle.mammoth_trains
[SDT_NULL]
length = 1
-to = 158
+to = SLV_159
[SDT_VAR]
base = GameSettings
var = vehicle.smoke_amount
type = SLE_UINT8
-from = 145
+from = SLV_145
guiflags = SGF_MULTISTRING
def = 1
min = 0
@@ -857,7 +859,7 @@ strval = STR_CONFIG_SETTING_NONE
; order.gotodepot
[SDT_NULL]
length = 1
-to = 158
+to = SLV_159
; path finder
@@ -870,31 +872,31 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.new_pathfinding_all
-to = 86
+to = SLV_87
def = false
cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.yapf.ship_use_yapf
-from = 28
-to = 86
+from = SLV_28
+to = SLV_87
def = false
cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.yapf.road_use_yapf
-from = 28
-to = 86
+from = SLV_28
+to = SLV_87
def = true
cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.yapf.rail_use_yapf
-from = 28
-to = 86
+from = SLV_28
+to = SLV_87
def = true
cat = SC_EXPERT
@@ -903,7 +905,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.pathfinder_for_trains
type = SLE_UINT8
-from = 87
+from = SLV_87
guiflags = SGF_MULTISTRING
def = 2
min = 1
@@ -918,7 +920,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.pathfinder_for_roadvehs
type = SLE_UINT8
-from = 87
+from = SLV_87
guiflags = SGF_MULTISTRING
def = 2
min = 1
@@ -933,7 +935,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.pathfinder_for_ships
type = SLE_UINT8
-from = 87
+from = SLV_87
guiflags = SGF_MULTISTRING
def = 2
min = 0
@@ -942,6 +944,7 @@ interval = 1
str = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS
strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT
strval = STR_CONFIG_SETTING_PATHFINDER_OPF
+proc = InvalidateShipPathCache
cat = SC_EXPERT
[SDT_BOOL]
@@ -1009,7 +1012,7 @@ name = NULL
guiflags = SGF_NO_NETWORK
var = _old_vds.servint_ispercent
def = false
-to = 119
+to = SLV_120
[SDTG_VAR]
name = NULL
@@ -1019,7 +1022,7 @@ var = _old_vds.servint_trains
def = 150
min = 5
max = 800
-to = 119
+to = SLV_120
[SDTG_VAR]
name = NULL
@@ -1029,7 +1032,7 @@ var = _old_vds.servint_roadveh
def = 150
min = 5
max = 800
-to = 119
+to = SLV_120
[SDTG_VAR]
name = NULL
@@ -1039,7 +1042,7 @@ var = _old_vds.servint_ships
def = 360
min = 5
max = 800
-to = 119
+to = SLV_120
[SDTG_VAR]
name = NULL
@@ -1049,7 +1052,7 @@ var = _old_vds.servint_aircraft
def = 150
min = 5
max = 800
-to = 119
+to = SLV_120
[SDT_BOOL]
base = GameSettings
@@ -1070,7 +1073,7 @@ proc = UpdateConsists
[SDT_BOOL]
base = GameSettings
var = vehicle.disable_elrails
-from = 38
+from = SLV_38
guiflags = SGF_NO_NETWORK
def = false
str = STR_CONFIG_SETTING_DISABLE_ELRAILS
@@ -1082,7 +1085,7 @@ cat = SC_EXPERT
base = GameSettings
var = vehicle.freight_trains
type = SLE_UINT8
-from = 39
+from = SLV_39
guiflags = SGF_NO_NETWORK
def = 1
min = 1
@@ -1096,14 +1099,14 @@ proc = UpdateConsists
; order.timetabling
[SDT_NULL]
length = 1
-from = 67
-to = 158
+from = SLV_67
+to = SLV_159
[SDT_VAR]
base = GameSettings
var = vehicle.plane_speed
type = SLE_UINT8
-from = 90
+from = SLV_90
guiflags = SGF_NO_NETWORK
def = 4
min = 1
@@ -1115,7 +1118,7 @@ strval = STR_CONFIG_SETTING_PLANE_SPEED_VALUE
[SDT_BOOL]
base = GameSettings
var = vehicle.dynamic_engines
-from = 95
+from = SLV_95
guiflags = SGF_NO_NETWORK
def = true
proc = ChangeDynamicEngines
@@ -1125,7 +1128,7 @@ cat = SC_EXPERT
base = GameSettings
var = vehicle.plane_crashes
type = SLE_UINT8
-from = 138
+from = SLV_138
guiflags = SGF_MULTISTRING
def = 2
min = 0
@@ -1139,12 +1142,12 @@ cat = SC_BASIC
; station.join_stations
[SDT_NULL]
length = 1
-to = 158
+to = SLV_159
[SDTC_BOOL]
var = gui.sg_full_load_any
-from = 22
-to = 92
+from = SLV_22
+to = SLV_93
def = true
[SDT_BOOL]
@@ -1162,14 +1165,14 @@ cat = SC_EXPERT
[SDTC_BOOL]
var = gui.sg_new_nonstop
-from = 22
-to = 92
+from = SLV_22
+to = SLV_93
def = false
; station.nonuniform_stations
[SDT_NULL]
length = 1
-to = 158
+to = SLV_159
[SDT_VAR]
base = GameSettings
@@ -1204,7 +1207,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = order.gradual_loading
-from = 40
+from = SLV_40
guiflags = SGF_NO_NETWORK
def = true
cat = SC_EXPERT
@@ -1212,7 +1215,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = construction.road_stop_on_town_road
-from = 47
+from = SLV_47
def = true
str = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD
strhelp = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT
@@ -1221,7 +1224,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = construction.road_stop_on_competitor_road
-from = 114
+from = SLV_114
def = true
str = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD
strhelp = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT
@@ -1230,14 +1233,14 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = station.adjacent_stations
-from = 62
+from = SLV_62
def = true
cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = economy.station_noise_level
-from = 96
+from = SLV_96
guiflags = SGF_NO_NETWORK
def = false
str = STR_CONFIG_SETTING_NOISE_LEVEL
@@ -1247,7 +1250,7 @@ proc = InvalidateTownViewWindow
[SDT_BOOL]
base = GameSettings
var = station.distant_join_stations
-from = 106
+from = SLV_106
def = true
str = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS
strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT
@@ -1280,7 +1283,7 @@ cat = SC_BASIC
base = GameSettings
var = construction.industry_platform
type = SLE_UINT8
-from = 148
+from = SLV_148
def = 1
min = 0
max = 4
@@ -1298,7 +1301,7 @@ strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
[SDT_NULL]
length = 1
-to = 140
+to = SLV_141
[SDT_BOOL]
base = GameSettings
@@ -1312,7 +1315,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = economy.exclusive_rights
-from = 79
+from = SLV_79
def = true
str = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE
strhelp = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT
@@ -1322,7 +1325,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = economy.fund_buildings
-from = 165
+from = SLV_165
def = true
str = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS
strhelp = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT
@@ -1332,7 +1335,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = economy.fund_roads
-from = 160
+from = SLV_160
def = true
str = STR_CONFIG_SETTING_ALLOW_FUND_ROAD
strhelp = STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT
@@ -1342,7 +1345,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = economy.give_money
-from = 79
+from = SLV_79
def = true
str = STR_CONFIG_SETTING_ALLOW_GIVE_MONEY
strhelp = STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT
@@ -1363,7 +1366,7 @@ cat = SC_BASIC
[SDT_NULL]
length = 4
-to = 143
+to = SLV_144
[SDT_VAR]
base = GameSettings
@@ -1379,7 +1382,7 @@ cat = SC_BASIC
[SDT_NULL]
length = 4
-to = 104
+to = SLV_105
[SDT_BOOL]
base = GameSettings
@@ -1402,7 +1405,7 @@ proc = InvalidateCompanyWindow
base = GameSettings
var = economy.feeder_payment_share
type = SLE_UINT8
-from = 134
+from = SLV_134
def = 75
min = 0
max = 100
@@ -1415,7 +1418,7 @@ cat = SC_EXPERT
base = GameSettings
var = economy.town_growth_rate
type = SLE_UINT8
-from = 54
+from = SLV_54
guiflags = SGF_MULTISTRING
def = 2
min = 0
@@ -1428,7 +1431,7 @@ strval = STR_CONFIG_SETTING_TOWN_GROWTH_NONE
base = GameSettings
var = economy.larger_towns
type = SLE_UINT8
-from = 54
+from = SLV_54
guiflags = SGF_0ISDISABLED
def = 4
min = 0
@@ -1442,7 +1445,7 @@ strval = STR_CONFIG_SETTING_LARGER_TOWNS_VALUE
base = GameSettings
var = economy.initial_city_size
type = SLE_UINT8
-from = 56
+from = SLV_56
def = 2
min = 1
max = 10
@@ -1454,20 +1457,20 @@ strval = STR_JUST_COMMA
[SDT_BOOL]
base = GameSettings
var = economy.mod_road_rebuild
-from = 77
+from = SLV_77
def = true
cat = SC_EXPERT
; previously ai-new setting.
[SDT_NULL]
length = 1
-to = 106
+to = SLV_107
[SDT_OMANY]
base = GameSettings
var = script.settings_profile
type = SLE_UINT8
-from = 178
+from = SLV_178
guiflags = SGF_MULTISTRING
def = SP_EASY
min = SP_EASY
@@ -1518,7 +1521,7 @@ strhelp = STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT
base = GameSettings
var = script.script_max_opcode_till_suspend
type = SLE_UINT32
-from = 107
+from = SLV_107
guiflags = SGF_NEWGAME_ONLY
def = 10000
min = 5000
@@ -1551,7 +1554,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.reverse_at_signals
-from = 159
+from = SLV_159
def = false
str = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS
strhelp = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT
@@ -1578,7 +1581,7 @@ cat = SC_EXPERT
base = GameSettings
var = economy.town_noise_population[0]
type = SLE_UINT16
-from = 96
+from = SLV_96
def = 800
min = 200
max = 65535
@@ -1588,7 +1591,7 @@ cat = SC_EXPERT
base = GameSettings
var = economy.town_noise_population[1]
type = SLE_UINT16
-from = 96
+from = SLV_96
def = 2000
min = 400
max = 65535
@@ -1598,7 +1601,7 @@ cat = SC_EXPERT
base = GameSettings
var = economy.town_noise_population[2]
type = SLE_UINT16
-from = 96
+from = SLV_96
def = 4000
min = 800
max = 65535
@@ -1607,7 +1610,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = economy.infrastructure_maintenance
-from = 166
+from = SLV_166
def = false
str = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE
strhelp = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT
@@ -1619,7 +1622,7 @@ cat = SC_BASIC
base = GameSettings
var = pf.wait_for_pbs_path
type = SLE_UINT8
-from = 100
+from = SLV_100
def = 30
min = 2
max = 255
@@ -1628,7 +1631,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.reserve_paths
-from = 100
+from = SLV_100
def = false
cat = SC_EXPERT
@@ -1636,7 +1639,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.path_backoff_interval
type = SLE_UINT8
-from = 100
+from = SLV_100
def = 20
min = 1
max = 255
@@ -1738,7 +1741,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.npf.npf_rail_pbs_cross_penalty
type = SLE_UINT
-from = 100
+from = SLV_100
def = 3 * NPF_TILE_LENGTH
min = 0
max = 100000
@@ -1748,7 +1751,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.npf.npf_rail_pbs_signal_back_penalty
type = SLE_UINT
-from = 100
+from = SLV_100
def = 15 * NPF_TILE_LENGTH
min = 0
max = 100000
@@ -1794,7 +1797,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.npf.npf_road_drive_through_penalty
type = SLE_UINT
-from = 47
+from = SLV_47
def = 8 * NPF_TILE_LENGTH
min = 0
max = 100000
@@ -1804,7 +1807,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.npf.npf_road_dt_occupied_penalty
type = SLE_UINT
-from = 130
+from = SLV_130
def = 8 * NPF_TILE_LENGTH
min = 0
max = 100000
@@ -1814,7 +1817,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.npf.npf_road_bay_occupied_penalty
type = SLE_UINT
-from = 130
+from = SLV_130
def = 15 * NPF_TILE_LENGTH
min = 0
max = 100000
@@ -1824,7 +1827,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.npf.maximum_go_to_depot_penalty
type = SLE_UINT
-from = 131
+from = SLV_131
def = 20 * NPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1834,7 +1837,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.yapf.disable_node_optimization
-from = 28
+from = SLV_28
def = false
cat = SC_EXPERT
@@ -1842,7 +1845,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.max_search_nodes
type = SLE_UINT
-from = 28
+from = SLV_28
def = 10000
min = 500
max = 1000000
@@ -1851,7 +1854,7 @@ cat = SC_EXPERT
[SDT_BOOL]
base = GameSettings
var = pf.yapf.rail_firstred_twoway_eol
-from = 28
+from = SLV_28
def = false
cat = SC_EXPERT
@@ -1859,7 +1862,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_firstred_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 10 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1869,7 +1872,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_firstred_exit_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 100 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1879,7 +1882,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_lastred_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 10 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1889,7 +1892,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_lastred_exit_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 100 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1899,7 +1902,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_station_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 10 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1909,7 +1912,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_slope_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 2 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1919,7 +1922,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_curve45_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 1 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1929,7 +1932,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_curve90_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 6 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1939,7 +1942,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_depot_reverse_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 50 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1949,7 +1952,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_crossing_penalty
type = SLE_UINT
-from = 28
+from = SLV_28
def = 3 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -1959,7 +1962,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_look_ahead_max_signals
type = SLE_UINT
-from = 28
+from = SLV_28
def = 10
min = 1
max = 100
@@ -1969,7 +1972,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_look_ahead_signal_p0
type = SLE_INT
-from = 28
+from = SLV_28
def = 500
min = -1000000
max = 1000000
@@ -1979,7 +1982,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_look_ahead_signal_p1
type = SLE_INT
-from = 28
+from = SLV_28
def = -100
min = -1000000
max = 1000000
@@ -1989,7 +1992,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_look_ahead_signal_p2
type = SLE_INT
-from = 28
+from = SLV_28
def = 5
min = -1000000
max = 1000000
@@ -1999,7 +2002,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_pbs_cross_penalty
type = SLE_UINT
-from = 100
+from = SLV_100
def = 3 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2009,7 +2012,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_pbs_station_penalty
type = SLE_UINT
-from = 100
+from = SLV_100
def = 8 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2019,7 +2022,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_pbs_signal_back_penalty
type = SLE_UINT
-from = 100
+from = SLV_100
def = 15 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2029,7 +2032,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_doubleslip_penalty
type = SLE_UINT
-from = 100
+from = SLV_100
def = 1 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2039,7 +2042,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_longer_platform_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 8 * YAPF_TILE_LENGTH
min = 0
max = 20000
@@ -2049,7 +2052,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_longer_platform_per_tile_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 0 * YAPF_TILE_LENGTH
min = 0
max = 20000
@@ -2059,7 +2062,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_shorter_platform_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 40 * YAPF_TILE_LENGTH
min = 0
max = 20000
@@ -2069,7 +2072,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.rail_shorter_platform_per_tile_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 0 * YAPF_TILE_LENGTH
min = 0
max = 20000
@@ -2079,7 +2082,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.road_slope_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 2 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2089,7 +2092,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.road_curve_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 1 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2099,7 +2102,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.road_crossing_penalty
type = SLE_UINT
-from = 33
+from = SLV_33
def = 3 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2109,7 +2112,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.road_stop_penalty
type = SLE_UINT
-from = 47
+from = SLV_47
def = 8 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2119,7 +2122,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.road_stop_occupied_penalty
type = SLE_UINT
-from = 130
+from = SLV_130
def = 8 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2129,7 +2132,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.road_stop_bay_occupied_penalty
type = SLE_UINT
-from = 130
+from = SLV_130
def = 15 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2139,7 +2142,7 @@ cat = SC_EXPERT
base = GameSettings
var = pf.yapf.maximum_go_to_depot_penalty
type = SLE_UINT
-from = 131
+from = SLV_131
def = 20 * YAPF_TILE_LENGTH
min = 0
max = 1000000
@@ -2150,7 +2153,7 @@ cat = SC_EXPERT
base = GameSettings
var = game_creation.land_generator
type = SLE_UINT8
-from = 30
+from = SLV_30
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 1
min = 0
@@ -2163,7 +2166,7 @@ strval = STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL
base = GameSettings
var = game_creation.oil_refinery_limit
type = SLE_UINT8
-from = 30
+from = SLV_30
def = 32
min = 12
max = 48
@@ -2175,7 +2178,7 @@ strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT
base = GameSettings
var = game_creation.tgen_smoothness
type = SLE_UINT8
-from = 30
+from = SLV_30
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 1
min = TGEN_SMOOTHNESS_BEGIN
@@ -2189,7 +2192,7 @@ cat = SC_BASIC
base = GameSettings
var = game_creation.variety
type = SLE_UINT8
-from = 197
+from = SLV_197
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 0
min = 0
@@ -2202,7 +2205,7 @@ strval = STR_VARIETY_NONE
base = GameSettings
var = game_creation.generation_seed
type = SLE_UINT32
-from = 30
+from = SLV_30
def = GENERATE_NEW_SEED
min = 0
max = UINT32_MAX
@@ -2212,7 +2215,7 @@ cat = SC_EXPERT
base = GameSettings
var = game_creation.tree_placer
type = SLE_UINT8
-from = 30
+from = SLV_30
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = 2
min = 0
@@ -2270,7 +2273,7 @@ cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = construction.freeform_edges
-from = 111
+from = SLV_111
def = true
proc = CheckFreeformEdges
cat = SC_EXPERT
@@ -2279,7 +2282,7 @@ cat = SC_EXPERT
base = GameSettings
var = game_creation.water_borders
type = SLE_UINT8
-from = 111
+from = SLV_111
def = 15
min = 0
max = 16
@@ -2288,7 +2291,7 @@ max = 16
base = GameSettings
var = game_creation.custom_town_number
type = SLE_UINT16
-from = 115
+from = SLV_115
def = 1
min = 1
max = 5000
@@ -2298,7 +2301,7 @@ cat = SC_BASIC
base = GameSettings
var = construction.extra_tree_placement
type = SLE_UINT8
-from = 132
+from = SLV_132
guiflags = SGF_MULTISTRING
def = 2
min = 0
@@ -2312,7 +2315,7 @@ cat = SC_BASIC
base = GameSettings
var = game_creation.custom_sea_level
type = SLE_UINT8
-from = 149
+from = SLV_149
def = 1
min = 2
max = 90
@@ -2322,7 +2325,7 @@ cat = SC_BASIC
base = GameSettings
var = game_creation.min_river_length
type = SLE_UINT8
-from = 163
+from = SLV_163
def = 16
min = 2
max = 255
@@ -2332,7 +2335,7 @@ cat = SC_EXPERT
base = GameSettings
var = game_creation.river_route_random
type = SLE_UINT8
-from = 163
+from = SLV_163
def = 5
min = 1
max = 255
@@ -2342,7 +2345,7 @@ cat = SC_EXPERT
base = GameSettings
var = game_creation.amount_of_rivers
type = SLE_UINT8
-from = 163
+from = SLV_163
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 2
min = 0
@@ -2357,7 +2360,7 @@ strval = STR_RIVERS_NONE
base = GameSettings
var = locale.currency
type = SLE_UINT8
-from = 97
+from = SLV_97
flags = SLF_NO_NETWORK_SYNC
def = 0
max = CURRENCY_END - 1
@@ -2369,8 +2372,8 @@ cat = SC_BASIC
name = ""units""
var = _old_units
type = SLE_UINT8
-from = 97
-to = 183
+from = SLV_97
+to = SLV_184
flags = SLF_NOT_IN_CONFIG
def = 1
max = 2
@@ -2382,7 +2385,7 @@ cat = SC_BASIC
base = GameSettings
var = locale.units_velocity
type = SLE_UINT8
-from = 184
+from = SLV_184
flags = SLF_NO_NETWORK_SYNC
guiflags = SGF_MULTISTRING
def = 1
@@ -2398,7 +2401,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL
base = GameSettings
var = locale.units_power
type = SLE_UINT8
-from = 184
+from = SLV_184
flags = SLF_NO_NETWORK_SYNC
guiflags = SGF_MULTISTRING
def = 1
@@ -2414,7 +2417,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL
base = GameSettings
var = locale.units_weight
type = SLE_UINT8
-from = 184
+from = SLV_184
flags = SLF_NO_NETWORK_SYNC
guiflags = SGF_MULTISTRING
def = 1
@@ -2430,7 +2433,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL
base = GameSettings
var = locale.units_volume
type = SLE_UINT8
-from = 184
+from = SLV_184
flags = SLF_NO_NETWORK_SYNC
guiflags = SGF_MULTISTRING
def = 1
@@ -2446,7 +2449,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL
base = GameSettings
var = locale.units_force
type = SLE_UINT8
-from = 184
+from = SLV_184
flags = SLF_NO_NETWORK_SYNC
guiflags = SGF_MULTISTRING
def = 2
@@ -2462,7 +2465,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL
base = GameSettings
var = locale.units_height
type = SLE_UINT8
-from = 184
+from = SLV_184
flags = SLF_NO_NETWORK_SYNC
guiflags = SGF_MULTISTRING
def = 1
@@ -2478,7 +2481,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL
base = GameSettings
var = locale.digit_group_separator
type = SLE_STRQ
-from = 118
+from = SLV_118
flags = SLF_NO_NETWORK_SYNC
def = NULL
proc = RedrawScreen
@@ -2488,7 +2491,7 @@ cat = SC_BASIC
base = GameSettings
var = locale.digit_group_separator_currency
type = SLE_STRQ
-from = 118
+from = SLV_118
flags = SLF_NO_NETWORK_SYNC
def = NULL
proc = RedrawScreen
@@ -2498,7 +2501,7 @@ cat = SC_BASIC
base = GameSettings
var = locale.digit_decimal_separator
type = SLE_STRQ
-from = 126
+from = SLV_126
flags = SLF_NO_NETWORK_SYNC
def = NULL
proc = RedrawScreen
diff --git a/src/table/sprites.h b/src/table/sprites.h
index 81d5388f99..da3bc76271 100644
--- a/src/table/sprites.h
+++ b/src/table/sprites.h
@@ -56,7 +56,7 @@ static const SpriteID SPR_LARGE_SMALL_WINDOW = 682;
/** Extra graphic spritenumbers */
static const SpriteID SPR_OPENTTD_BASE = 4896;
-static const uint16 OPENTTD_SPRITE_COUNT = 175;
+static const uint16 OPENTTD_SPRITE_COUNT = 179;
/* Halftile-selection sprites */
static const SpriteID SPR_HALFTILE_SELECTION_FLAT = SPR_OPENTTD_BASE;
@@ -149,6 +149,11 @@ static const SpriteID SPR_GROUP_REPLACE_OFF_ROADVEH = SPR_OPENTTD_BASE + 131;
static const SpriteID SPR_GROUP_REPLACE_OFF_SHIP = SPR_OPENTTD_BASE + 132;
static const SpriteID SPR_GROUP_REPLACE_OFF_AIRCRAFT = SPR_OPENTTD_BASE + 133;
+static const SpriteID SPR_GROUP_LIVERY_TRAIN = SPR_OPENTTD_BASE + 175;
+static const SpriteID SPR_GROUP_LIVERY_ROADVEH = SPR_OPENTTD_BASE + 176;
+static const SpriteID SPR_GROUP_LIVERY_SHIP = SPR_OPENTTD_BASE + 177;
+static const SpriteID SPR_GROUP_LIVERY_AIRCRAFT = SPR_OPENTTD_BASE + 178;
+
static const SpriteID SPR_TOWN_RATING_NA = SPR_OPENTTD_BASE + 162;
static const SpriteID SPR_TOWN_RATING_APALLING = SPR_OPENTTD_BASE + 163;
static const SpriteID SPR_TOWN_RATING_MEDIOCRE = SPR_OPENTTD_BASE + 164;
diff --git a/src/table/town_land.h b/src/table/town_land.h
index e4098334ac..6476015119 100644
--- a/src/table/town_land.h
+++ b/src/table/town_land.h
@@ -1812,8 +1812,11 @@ assert_compile(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4);
* @see HouseSpec
*/
#define MS(mnd, mxd, p, rc, bn, rr, mg, ca1, ca2, ca3, bf, ba, cg1, cg2, cg3) \
- {mnd, mxd, p, rc, bn, rr, mg, {ca1, ca2, ca3}, {cg1, cg2, cg3}, bf, ba, true, \
- GRFFileProps(INVALID_HOUSE_ID), 0, {0, 0, 0, 0}, 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0}
+ {mnd, mxd, p, rc, bn, rr, mg, \
+ {ca1, ca2, ca3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
+ {cg1, cg2, cg3, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, \
+ bf, ba, true, GRFFileProps(INVALID_HOUSE_ID), 0, {0, 0, 0, 0}, \
+ 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0}
/** House specifications from original data */
static const HouseSpec _original_house_specs[] = {
/**
diff --git a/src/table/townname.h b/src/table/townname.h
index e4674f7530..7015b7ac1b 100644
--- a/src/table/townname.h
+++ b/src/table/townname.h
@@ -762,7 +762,7 @@ static const char * const _name_french_real[] = {
"Blois",
"Troyes",
"Charolles",
- "Grenoble",
+ "Toulouse",
"Chamb\xC3\xA9ry",
"Tours",
"St. Brieuc",
@@ -773,7 +773,7 @@ static const char * const _name_french_real[] = {
"Vichy",
"St. Valery",
"Beaujolais",
- "Narbonne",
+ "Reims",
"Albi",
"Paris",
"Biarritz",
@@ -1946,103 +1946,103 @@ static const char * const _name_romanian_real[] = {
"Alba Iulia",
"Alexandria",
"Babadag",
- "Bac\xC3\xA3u",
+ "Bac\xC4\x83u",
"Baia Mare",
- "B\xC3\xA3ile Herculane",
- "B\xC3\xA3ilesti",
+ "B\xC4\x83ile Herculane",
+ "B\xC4\x83ilesti",
"B\xC3\xA2rlad",
"Bicaz",
- "Bistrita",
+ "Bistri\xC8\x9B""a",
"Blaj",
"Borsec",
- "Botosani",
- "Br\xC3\xA3ila",
- "Brasov",
- "Bucuresti",
+ "Boto\xC8\x99""ani",
+ "Br\xC4\x83ila",
+ "Bra\xC8\x9Bov",
+ "Bucure\xC8\x99ti",
"Buftea",
- "Buz\xC3\xA3u",
- "C\xC3\xA3l\xC3\xA3rasi",
- "Caransebes",
- "Cernavod\xC3\xA3",
+ "Buz\xC4\x83u",
+ "C\xC4\x83l\xC4\x83rasi",
+ "Caransebe\xC8\x99",
+ "Cernavod\xC4\x83",
"Cluj-Napoca",
- "Constanta",
+ "Constan\xC8\x9B""a",
"Covasna",
"Craiova",
"Dej",
"Deva",
"Dorohoi",
- "Dr.-Tr. Severin",
- "Dr\xC3\xA3g\xC3\xA3sani",
- "F\xC3\xA3g\xC3\xA3ras",
- "F\xC3\xA3lticeni",
- "Fetesti",
- "Focsani",
- "Galati",
+ "Drobeta-Turnu Severin",
+ "Dr\xC4\x83g\xC4\x83sani",
+ "F\xC4\x83g\xC4\x83ras",
+ "F\xC4\x83lticeni",
+ "Fete\xC8\x99ti",
+ "Foc\xC8\x99""ani",
+ "Gala\xC8\x99i",
"Gheorgheni",
"Giurgiu",
- "H\xC3\xA2rsova",
+ "H\xC3\xA2r\xC8\x99ova",
"Hunedoara",
- "Husi",
- "Iasi",
+ "Hu\xC8\x99i",
+ "Ia\xC8\x99i",
"Isaccea",
"Lugoj",
- "M\xC3\xA3""cin",
+ "M\xC4\x83""cin",
"Mangalia",
"Medgidia",
- "Medias",
+ "Media\xC8\x99",
"Miercurea Ciuc",
"Mizil",
"Motru",
- "N\xC3\xA3s\xC3\xA3ud",
- "N\xC3\xA3vodari",
- "Odobesti",
- "Oltenita",
- "Onesti",
+ "N\xC4\x83s\xC4\x83ud",
+ "N\xC4\x83vodari",
+ "Odobe\xC8x99ti",
+ "Olteni\xC8\x9B""a",
+ "One\xC8\x99ti",
"Oradea",
- "Orsova",
- "Petrosani",
- "Piatra Neamt",
- "Pitesti",
- "Ploiesti",
+ "Or\xC8\x99ova",
+ "Petro\xC8\x99""ani",
+ "Piatra Neam\xC8\x9B",
+ "Pite\xC8\x99ti",
+ "Ploie\xC8\x99ti",
"Predeal",
"R\xC3\xA2mnicu V\xC3\xA2lcea",
"Reghin",
- "Resita",
+ "Re\xC8\x99i\xC8\x9B""a",
"Roman",
- "Rosiorii de Vede",
+ "Ro\xC8\x99iorii de Vede",
"Satu Mare",
- "Sebes",
+ "Sebe\xC8\x99",
"Sf\xC3\xA2ntu Gheorghe",
"Sibiu",
- "Sighisoara",
+ "Sighi\xC8\x99oara",
"Sinaia",
"Slatina",
"Slobozia",
"Sovata",
"Suceava",
"Sulina",
- "T\xC3\xA3nd\xC3\xA3rei",
+ "T\xC4\x83nd\xC4\x83rei",
"T\xC3\xA2rgoviste",
"T\xC3\xA2rgu Jiu",
"T\xC3\xA2rgu Mures",
"Tecuci",
- "Timisoara",
+ "Timi\xC8\x99oara",
"Tulcea",
"Turda",
- "Turnu M\xC3\xA3gurele",
+ "Turnu M\xC4\x83gurele",
"Urziceni",
"Vaslui",
"Vatra Dornei",
"Victoria",
"Videle",
- "Zal\xC3\xA3u",
+ "Zal\xC4\x83u",
};
static const char * const _name_slovak_real[] = {
"Bratislava",
"Banovce nad Bebravou",
- "Banska Bystrica",
- "Banska Stiavnica",
+ "Bansk\xC3\xA1 Bystrica",
+ "Bansk\xC3\xA1 \xC5\xA0tiavnica",
"Bardejov",
"Brezno",
"Brezova pod Bradlom",
@@ -2050,9 +2050,9 @@ static const char * const _name_slovak_real[] = {
"Cadca",
"Cierna nad Tisou",
"Detva",
- "Detva",
- "Dolny Kubin",
+ "Pre\xC5\xA1ov",
"Dolny Kubin",
+ "Spi\xC5\xA1sk\xC3\xA1 Nov\xC3\xA1 Ves",
"Dunajska Streda",
"Gabcikovo",
"Galanta",
@@ -2064,8 +2064,8 @@ static const char * const _name_slovak_real[] = {
"Humenne",
"Hurbanovo",
"Kezmarok",
- "Komarno",
- "Kosice",
+ "Kom\xC3\xA1rno",
+ "Ko\xC5\xA1ice",
"Kremnica",
"Krompachy",
"Kuty",
@@ -2081,15 +2081,15 @@ static const char * const _name_slovak_real[] = {
"Myjava",
"Namestovo",
"Nitra",
- "Nova Bana",
- "Nove Mesto nad Vahom",
- "Nove Zamky",
+ "Nov\xC3\xA1 Ba\xC5\x88""a",
+ "Nov\xC3\xA9"" Mesto nad V\xC3\xA1hom",
+ "Nov\xC3\xA9"" Z\xC3\xA1""mky",
"Partizanske",
"Pezinok",
"Piestany",
"Poltar",
"Poprad",
- "Povazska Bystrica",
+ "Pova\xC5\xBEsk\xC3\xA1 Bystrica",
"Prievidza",
"Puchov",
"Revuca",
@@ -2123,7 +2123,7 @@ static const char * const _name_slovak_real[] = {
"Zahorska Bystrica",
"Zdiar",
"Ziar nad Hronom",
- "Zilina",
+ "\xC5\xBDilina",
"Zlate Moravce",
"Zvolen",
};
diff --git a/src/table/win32_settings.ini b/src/table/win32_settings.ini
index 70c18a424e..bb241f50cd 100644
--- a/src/table/win32_settings.ini
+++ b/src/table/win32_settings.ini
@@ -30,7 +30,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
diff --git a/src/table/window_settings.ini b/src/table/window_settings.ini
index ad77423d9d..41223586a6 100644
--- a/src/table/window_settings.ini
+++ b/src/table/window_settings.ini
@@ -26,7 +26,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
-from = 0
+from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp
index aad9822822..9839f5e34b 100644
--- a/src/terraform_cmd.cpp
+++ b/src/terraform_cmd.cpp
@@ -309,6 +309,14 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
}
if (flags & DC_EXEC) {
+ /* Mark affected areas dirty. */
+ for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) {
+ MarkTileDirtyByTile(*it);
+ TileIndexToHeightMap::const_iterator new_height = ts.tile_to_new_height.find(tile);
+ if (new_height == ts.tile_to_new_height.end()) continue;
+ MarkTileDirtyByTile(*it, 0, new_height->second);
+ }
+
/* change the height */
for (TileIndexToHeightMap::const_iterator it = ts.tile_to_new_height.begin();
it != ts.tile_to_new_height.end(); it++) {
@@ -318,91 +326,6 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
SetTileHeight(tile, (uint)height);
}
- /* Finally mark the dirty tiles dirty */
- for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) {
- MarkTileDirtyByTile(*it);
-
- int height = TerraformGetHeightOfTile(&ts, *it);
-
- /* Now, if we alter the height of the map edge, we need to take care
- * about repainting the affected areas outside map as well.
- * Remember:
- * Outside map, we assume that our landscape descends to
- * height zero as fast as possible.
- * Those simulated tiles (they don't exist as datastructure,
- * only as concept in code) need to be repainted properly,
- * otherwise we will get ugly glitches.
- *
- * Furthermore, note that we have to take care about the possibility,
- * that landscape was higher before the change,
- * so also tiles a bit outside need to be repainted.
- */
- int x = TileX(*it);
- int y = TileY(*it);
- if (x == 0) {
- if (y == 0) {
- /* Height of the northern corner is altered. */
- for (int cx = 0; cx >= -height - 1; cx--) {
- for (int cy = 0; cy >= -height - 1; cy--) {
- /* This means, tiles in the sector north of that
- * corner need to be repainted.
- */
- if (cx + cy >= -height - 2) {
- /* But only tiles that actually might have changed. */
- MarkTileDirtyByTileOutsideMap(cx, cy);
- }
- }
- }
- } else if (y < (int)MapMaxY()) {
- for (int cx = 0; cx >= -height - 1; cx--) {
- MarkTileDirtyByTileOutsideMap(cx, y);
- }
- } else {
- for (int cx = 0; cx >= -height - 1; cx--) {
- for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) {
- if (cx + ((int)MapMaxY() - cy) >= -height - 2) {
- MarkTileDirtyByTileOutsideMap(cx, cy);
- }
- }
- }
- }
- } else if (x < (int)MapMaxX()) {
- if (y == 0) {
- for (int cy = 0; cy >= -height - 1; cy--) {
- MarkTileDirtyByTileOutsideMap(x, cy);
- }
- } else if (y < (int)MapMaxY()) {
- /* Nothing to be done here, we are inside the map. */
- } else {
- for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) {
- MarkTileDirtyByTileOutsideMap(x, cy);
- }
- }
- } else {
- if (y == 0) {
- for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) {
- for (int cy = 0; cy >= -height - 1; cy--) {
- if (((int)MapMaxX() - cx) + cy >= -height - 2) {
- MarkTileDirtyByTileOutsideMap(cx, cy);
- }
- }
- }
- } else if (y < (int)MapMaxY()) {
- for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) {
- MarkTileDirtyByTileOutsideMap(cx, y);
- }
- } else {
- for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) {
- for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) {
- if (((int)MapMaxX() - cx) + ((int)MapMaxY() - cy) >= -height - 2) {
- MarkTileDirtyByTileOutsideMap(cx, cy);
- }
- }
- }
- }
- }
- }
-
if (c != NULL) c->terraform_limit -= (uint32)ts.tile_to_new_height.size() << 16;
}
return total_cost;
diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp
index b0f9b1125a..ff5226c2b5 100644
--- a/src/textfile_gui.cpp
+++ b/src/textfile_gui.cpp
@@ -65,7 +65,7 @@ TextfileWindow::TextfileWindow(TextfileType file_type) : Window(&_textfile_desc)
this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_TF_VSCROLLBAR);
this->hscroll = this->GetScrollbar(WID_TF_HSCROLLBAR);
- this->FinishInitNested();
+ this->FinishInitNested(file_type);
this->GetWidget(WID_TF_CAPTION)->SetDataTip(STR_TEXTFILE_README_CAPTION + file_type, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS);
this->hscroll->SetStepSize(10); // Speed up horizontal scrollbar
diff --git a/src/tgp.cpp b/src/tgp.cpp
index 436870b412..02621f127e 100644
--- a/src/tgp.cpp
+++ b/src/tgp.cpp
@@ -47,7 +47,7 @@
* second sets the major variations to that, ... until finally the smallest
* bumps are added.
*
- * Usefully, this routine is totally scaleable; so when 32bpp comes along, the
+ * Usefully, this routine is totally scalable; so when 32bpp comes along, the
* terrain can be as bumpy as you like! It is also infinitely expandable; a
* single random seed terrain continues in X & Y as far as you care to
* calculate. In theory, we could use just one seed value, but randomly select
@@ -262,7 +262,7 @@ static amplitude_t GetAmplitude(int frequency)
* areas with a particular gradient so that we are able to create maps without too
* many steep slopes up to the wanted height level. It's definitely not perfect since
* it will bring larger rectangles with similar slopes which makes the rectangular
- * behaviour of TGP more noticable. However, these height differentiations cannot
+ * behaviour of TGP more noticeable. However, these height differentiations cannot
* happen over much smaller areas; we basically double the "range" to give a similar
* slope for every doubling of map height.
*/
@@ -977,7 +977,7 @@ static void TgenSetTileHeight(TileIndex tile, int height)
* The main new land generator using Perlin noise. Desert landscape is handled
* different to all others to give a desert valley between two high mountains.
* Clearly if a low height terrain (flat/very flat) is chosen, then the tropic
- * areas wont be high enough, and there will be very little tropic on the map.
+ * areas won't be high enough, and there will be very little tropic on the map.
* Thus Tropic works best on Hilly or Mountainous.
*/
void GenerateTerrainPerlin()
diff --git a/src/tile_map.cpp b/src/tile_map.cpp
index d73beeb886..200a203089 100644
--- a/src/tile_map.cpp
+++ b/src/tile_map.cpp
@@ -14,60 +14,6 @@
#include "safeguards.h"
-/**
- * Returns the tile height for a coordinate outside map. Such a height is
- * needed for painting the area outside map using completely black tiles.
- * The idea is descending to heightlevel 0 as fast as possible.
- * @param x The X-coordinate (same unit as TileX).
- * @param y The Y-coordinate (same unit as TileY).
- * @return The height in the same unit as TileHeight.
- */
-uint TileHeightOutsideMap(int x, int y)
-{
- /* In all cases: Descend to heightlevel 0 as fast as possible.
- * So: If we are at the 0-side of the map (x<0 or y<0), we must
- * subtract the distance to coordinate 0 from the heightlevel at
- * coordinate 0.
- * In other words: Subtract e.g. -x. If we are at the MapMax
- * side of the map, we also need to subtract the distance to
- * the edge of map, e.g. MapMaxX - x.
- *
- * NOTE: Assuming constant heightlevel outside map would be
- * simpler here. However, then we run into painting problems,
- * since whenever a heightlevel change at the map border occurs,
- * we would need to repaint anything outside map.
- * In contrast, by doing it this way, we can localize this change,
- * which means we may assume constant heightlevel for all tiles
- * at more than distance from the
- * map border.
- */
- if (x < 0) {
- if (y < 0) {
- return max((int)TileHeight(TileXY(0, 0)) - (-x) - (-y), 0);
- } else if (y < (int)MapMaxY()) {
- return max((int)TileHeight(TileXY(0, y)) - (-x), 0);
- } else {
- return max((int)TileHeight(TileXY(0, (int)MapMaxY())) - (-x) - (y - (int)MapMaxY()), 0);
- }
- } else if (x < (int)MapMaxX()) {
- if (y < 0) {
- return max((int)TileHeight(TileXY(x, 0)) - (-y), 0);
- } else if (y < (int)MapMaxY()) {
- return TileHeight(TileXY(x, y));
- } else {
- return max((int)TileHeight(TileXY(x, (int)MapMaxY())) - (y - (int)MapMaxY()), 0);
- }
- } else {
- if (y < 0) {
- return max((int)TileHeight(TileXY((int)MapMaxX(), 0)) - (x - (int)MapMaxX()) - (-y), 0);
- } else if (y < (int)MapMaxY()) {
- return max((int)TileHeight(TileXY((int)MapMaxX(), y)) - (x - (int)MapMaxX()), 0);
- } else {
- return max((int)TileHeight(TileXY((int)MapMaxX(), (int)MapMaxY())) - (x - (int)MapMaxX()) - (y - (int)MapMaxY()), 0);
- }
- }
-}
-
/**
* Get a tile's slope given the heigh of its four corners.
* @param hnorth The height at the northern corner in the same unit as TileHeight.
@@ -114,30 +60,26 @@ static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsout
*/
Slope GetTileSlope(TileIndex tile, int *h)
{
- assert(tile < MapSize());
+ uint x1 = TileX(tile);
+ uint y1 = TileY(tile);
+ uint x2 = min(x1 + 1, MapMaxX());
+ uint y2 = min(y1 + 1, MapMaxY());
- uint x = TileX(tile);
- uint y = TileY(tile);
- if (x == MapMaxX() || y == MapMaxY()) {
- if (h != NULL) *h = TileHeight(tile);
- return SLOPE_FLAT;
- }
-
- int hnorth = TileHeight(tile); // Height of the North corner.
- int hwest = TileHeight(tile + TileDiffXY(1, 0)); // Height of the West corner.
- int heast = TileHeight(tile + TileDiffXY(0, 1)); // Height of the East corner.
- int hsouth = TileHeight(tile + TileDiffXY(1, 1)); // Height of the South corner.
+ int hnorth = TileHeight(tile); // Height of the North corner.
+ int hwest = TileHeight(TileXY(x2, y1)); // Height of the West corner.
+ int heast = TileHeight(TileXY(x1, y2)); // Height of the East corner.
+ int hsouth = TileHeight(TileXY(x2, y2)); // Height of the South corner.
return GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth, h);
}
/**
- * Return the slope of a given tile outside the map.
+ * Return the slope of a given tile, also for tiles outside the map (virtual "black" tiles).
*
- * @param x X-coordinate of the tile outside to compute height of.
- * @param y Y-coordinate of the tile outside to compute height of.
- * @param h If not \c NULL, pointer to storage of z height.
- * @return Slope of the tile outside map, except for the HALFTILE part.
+ * @param x X coordinate of the tile to compute slope of, may be ouside the map.
+ * @param y Y coordinate of the tile to compute slope of, may be ouside the map.
+ * @param h If not \c NULL, pointer to storage of z height.
+ * @return Slope of the tile, except for the HALFTILE part.
*/
Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h)
{
@@ -159,17 +101,15 @@ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h)
*/
bool IsTileFlat(TileIndex tile, int *h)
{
- assert(tile < MapSize());
-
- if (!IsInnerTile(tile)) {
- if (h != NULL) *h = TileHeight(tile);
- return true;
- }
+ uint x1 = TileX(tile);
+ uint y1 = TileY(tile);
+ uint x2 = min(x1 + 1, MapMaxX());
+ uint y2 = min(y1 + 1, MapMaxY());
uint z = TileHeight(tile);
- if (TileHeight(tile + TileDiffXY(1, 0)) != z) return false;
- if (TileHeight(tile + TileDiffXY(0, 1)) != z) return false;
- if (TileHeight(tile + TileDiffXY(1, 1)) != z) return false;
+ if (TileHeight(TileXY(x2, y1)) != z) return false;
+ if (TileHeight(TileXY(x1, y2)) != z) return false;
+ if (TileHeight(TileXY(x2, y2)) != z) return false;
if (h != NULL) *h = z;
return true;
@@ -182,33 +122,19 @@ bool IsTileFlat(TileIndex tile, int *h)
*/
int GetTileZ(TileIndex tile)
{
- if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0;
+ uint x1 = TileX(tile);
+ uint y1 = TileY(tile);
+ uint x2 = min(x1 + 1, MapMaxX());
+ uint y2 = min(y1 + 1, MapMaxY());
- int h = TileHeight(tile); // N corner
- h = min(h, TileHeight(tile + TileDiffXY(1, 0))); // W corner
- h = min(h, TileHeight(tile + TileDiffXY(0, 1))); // E corner
- h = min(h, TileHeight(tile + TileDiffXY(1, 1))); // S corner
+ int h = TileHeight(tile); // N corner
+ h = min(h, TileHeight(TileXY(x2, y1))); // W corner
+ h = min(h, TileHeight(TileXY(x1, y2))); // E corner
+ h = min(h, TileHeight(TileXY(x2, y2))); // S corner
return h;
}
-/**
- * Get bottom height of the tile outside map.
- *
- * @param x X-coordinate of the tile outside to compute height of.
- * @param y Y-coordinate of the tile outside to compute height of.
- * @return Minimum height of the tile outside the map.
- */
-int GetTilePixelZOutsideMap(int x, int y)
-{
- uint h = TileHeightOutsideMap(x, y); // N corner.
- h = min(h, TileHeightOutsideMap(x + 1, y)); // W corner.
- h = min(h, TileHeightOutsideMap(x, y + 1)); // E corner.
- h = min(h, TileHeightOutsideMap(x + 1, y + 1)); // S corner
-
- return h * TILE_HEIGHT;
-}
-
/**
* Get top height of the tile inside the map.
* @param t Tile to compute height of
@@ -216,31 +142,15 @@ int GetTilePixelZOutsideMap(int x, int y)
*/
int GetTileMaxZ(TileIndex t)
{
- if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return TileHeightOutsideMap(TileX(t), TileY(t));
+ uint x1 = TileX(t);
+ uint y1 = TileY(t);
+ uint x2 = min(x1 + 1, MapMaxX());
+ uint y2 = min(y1 + 1, MapMaxY());
- int h = TileHeight(t); // N corner
- h = max(h, TileHeight(t + TileDiffXY(1, 0))); // W corner
- h = max(h, TileHeight(t + TileDiffXY(0, 1))); // E corner
- h = max(h, TileHeight(t + TileDiffXY(1, 1))); // S corner
+ int h = TileHeight(t); // N corner
+ h = max(h, TileHeight(TileXY(x2, y1))); // W corner
+ h = max(h, TileHeight(TileXY(x1, y2))); // E corner
+ h = max(h, TileHeight(TileXY(x2, y2))); // S corner
return h;
}
-
-/**
- * Get top height of the tile outside the map.
- *
- * @see Detailed description in header.
- *
- * @param x X-coordinate of the tile outside to compute height of.
- * @param y Y-coordinate of the tile outside to compute height of.
- * @return Maximum height of the tile.
- */
-int GetTileMaxPixelZOutsideMap(int x, int y)
-{
- uint h = TileHeightOutsideMap(x, y);
- h = max(h, TileHeightOutsideMap(x + 1, y));
- h = max(h, TileHeightOutsideMap(x, y + 1));
- h = max(h, TileHeightOutsideMap(x + 1, y + 1));
-
- return h * TILE_HEIGHT;
-}
diff --git a/src/tile_map.h b/src/tile_map.h
index 89f532e4f0..7a76f2b974 100644
--- a/src/tile_map.h
+++ b/src/tile_map.h
@@ -34,7 +34,17 @@ static inline uint TileHeight(TileIndex tile)
return _m[tile].height;
}
-uint TileHeightOutsideMap(int x, int y);
+/**
+ * Returns the height of a tile, also for tiles outside the map (virtual "black" tiles).
+ *
+ * @param x X coordinate of the tile, may be ouside the map.
+ * @param y Y coordinate of the tile, may be ouside the map.
+ * @return The height in the same unit as TileHeight.
+ */
+static inline uint TileHeightOutsideMap(int x, int y)
+{
+ return TileHeight(TileXY(Clamp(x, 0, MapMaxX()), Clamp(y, 0, MapMaxY())));
+}
/**
* Sets the height of a tile.
@@ -67,11 +77,10 @@ static inline uint TilePixelHeight(TileIndex tile)
}
/**
- * Returns the tile height for a coordinate outside map. Such a height is
- * needed for painting the area outside map using completely black tiles.
- * The idea is descending to heightlevel 0 as fast as possible.
- * @param x The X-coordinate (same unit as TileX).
- * @param y The Y-coordinate (same unit as TileY).
+ * Returns the height of a tile in pixels, also for tiles outside the map (virtual "black" tiles).
+ *
+ * @param x X coordinate of the tile, may be ouside the map.
+ * @param y Y coordinate of the tile, may be ouside the map.
* @return The height in pixels in the same unit as TilePixelHeight.
*/
static inline uint TilePixelHeightOutsideMap(int x, int y)
@@ -289,8 +298,6 @@ static inline int GetTilePixelZ(TileIndex tile)
return GetTileZ(tile) * TILE_HEIGHT;
}
-int GetTilePixelZOutsideMap(int x, int y);
-
/**
* Get top height of the tile
* @param tile Tile to compute height of
@@ -301,9 +308,6 @@ static inline int GetTileMaxPixelZ(TileIndex tile)
return GetTileMaxZ(tile) * TILE_HEIGHT;
}
-int GetTileMaxPixelZOutsideMap(int x, int y);
-
-
/**
* Calculate a hash value from a tile position
*
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index cd0f518dfd..afa9adacbd 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -119,12 +119,14 @@ public:
*/
class DropDownListCompanyItem : public DropDownListItem {
Dimension icon_size;
+ Dimension lock_size;
public:
bool greyed;
DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed)
{
this->icon_size = GetSpriteSize(SPR_COMPANY_ICON);
+ this->lock_size = GetSpriteSize(SPR_LOCK);
}
virtual ~DropDownListCompanyItem() {}
@@ -139,12 +141,12 @@ public:
CompanyID company = (CompanyID)this->result;
SetDParam(0, company);
SetDParam(1, company);
- return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + 3;
+ return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6;
}
uint Height(uint width) const
{
- return max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL);
+ return max(max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL);
}
void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
@@ -157,8 +159,12 @@ public:
int icon_offset = (bottom - top - icon_size.height) / 2;
int text_offset = (bottom - top - FONT_HEIGHT_NORMAL) / 2;
+ int lock_offset = (bottom - top - lock_size.height) / 2;
DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset);
+ if (NetworkCompanyIsPassworded(company)) {
+ DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset);
+ }
SetDParam(0, company);
SetDParam(1, company);
@@ -168,7 +174,7 @@ public:
} else {
col = sel ? TC_WHITE : TC_BLACK;
}
- DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 0), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col);
+ DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 3 + this->lock_size.width : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 3 + this->lock_size.width), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col);
}
};
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index 4289d901a1..dacf59ddc4 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -611,7 +611,7 @@ static inline void AddAcceptedCargoSetMask(CargoID cargo, uint amount, CargoArra
static void AddAcceptedCargo_Town(TileIndex tile, CargoArray &acceptance, CargoTypes *always_accepted)
{
const HouseSpec *hs = HouseSpec::Get(GetHouseType(tile));
- CargoID accepts[3];
+ CargoID accepts[lengthof(hs->accepts_cargo)];
/* Set the initial accepted cargo types */
for (uint8 i = 0; i < lengthof(accepts); i++) {
@@ -2945,7 +2945,7 @@ static CommandCost TownActionFundBuildings(Town *t, DoCommandFlag flags)
* Also emulate original behaviour when town was only growing in
* TOWN_GROWTH_TICKS intervals, to make sure that it's not too
* tick-perfect and gives player some time window where he can
- * spam funding with the exact same effeciency.
+ * spam funding with the exact same efficiency.
*/
t->grow_counter = min(t->grow_counter, 2 * TOWN_GROWTH_TICKS - (t->growth_rate - t->grow_counter) % TOWN_GROWTH_TICKS);
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 01aa946edb..c4deedde80 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -2313,7 +2313,7 @@ static const byte _initial_tile_subcoord[6][4][3] = {
static Track DoTrainPathfind(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest)
{
switch (_settings_game.pf.pathfinder_for_trains) {
- case VPF_NPF: return NPFTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest);
+ case VPF_NPF: return NPFTrainChooseTrack(v, path_found, do_track_reservation, dest);
case VPF_YAPF: return YapfTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest);
default: NOT_REACHED();
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index 9015396a8b..62d279db62 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -723,7 +723,7 @@ bool Vehicle::IsEngineCountable() const
/**
* Check whether Vehicle::engine_type has any meaning.
- * @return true if the vehicle has a useable engine type.
+ * @return true if the vehicle has a usable engine type.
*/
bool Vehicle::HasEngineType() const
{
@@ -1813,11 +1813,12 @@ LiveryScheme GetEngineLiveryScheme(EngineID engine_type, EngineID parent_engine_
if (parent_engine_type == INVALID_ENGINE) {
return LS_PASSENGER_WAGON_STEAM;
} else {
+ bool is_mu = HasBit(EngInfo(parent_engine_type)->misc_flags, EF_RAIL_IS_MU);
switch (RailVehInfo(parent_engine_type)->engclass) {
default: NOT_REACHED();
case EC_STEAM: return LS_PASSENGER_WAGON_STEAM;
- case EC_DIESEL: return LS_PASSENGER_WAGON_DIESEL;
- case EC_ELECTRIC: return LS_PASSENGER_WAGON_ELECTRIC;
+ case EC_DIESEL: return is_mu ? LS_DMU : LS_PASSENGER_WAGON_DIESEL;
+ case EC_ELECTRIC: return is_mu ? LS_EMU : LS_PASSENGER_WAGON_ELECTRIC;
case EC_MONORAIL: return LS_PASSENGER_WAGON_MONORAIL;
case EC_MAGLEV: return LS_PASSENGER_WAGON_MAGLEV;
}
@@ -1886,14 +1887,24 @@ const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID
const Company *c = Company::Get(company);
LiveryScheme scheme = LS_DEFAULT;
- /* The default livery is always available for use, but its in_use flag determines
- * whether any _other_ liveries are in use. */
- if (c->livery[LS_DEFAULT].in_use && (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company))) {
- /* Determine the livery scheme to use */
- scheme = GetEngineLiveryScheme(engine_type, parent_engine_type, v);
+ if (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company)) {
+ if (v != NULL) {
+ const Group *g = Group::GetIfValid(v->First()->group_id);
+ if (g != NULL) {
+ /* Traverse parents until we find a livery or reach the top */
+ while (g->livery.in_use == 0 && g->parent != INVALID_GROUP) {
+ g = Group::Get(g->parent);
+ }
+ if (g->livery.in_use != 0) return &g->livery;
+ }
+ }
- /* Switch back to the default scheme if the resolved scheme is not in use */
- if (!c->livery[scheme].in_use) scheme = LS_DEFAULT;
+ /* The default livery is always available for use, but its in_use flag determines
+ * whether any _other_ liveries are in use. */
+ if (c->livery[LS_DEFAULT].in_use != 0) {
+ /* Determine the livery scheme to use */
+ scheme = GetEngineLiveryScheme(engine_type, parent_engine_type, v);
+ }
}
return &c->livery[scheme];
@@ -2337,7 +2348,7 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command)
SetBit(gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS);
}
- this->dest_tile = location;
+ this->SetDestTile(location);
this->current_order.MakeGoToDepot(destination, ODTF_MANUAL);
if (!(command & DEPOT_SERVICE)) this->current_order.SetDepotActionType(ODATFB_HALT);
SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, WID_VV_START_STOP);
diff --git a/src/vehicle_base.h b/src/vehicle_base.h
index b2a2a5d7a4..d02d33e2cc 100644
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -749,6 +749,8 @@ public:
*/
virtual bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse) { return false; }
+ virtual void SetDestTile(TileIndex tile) { this->dest_tile = tile; }
+
CommandCost SendToDepot(DoCommandFlag flags, DepotCommand command);
void UpdateVisualEffect(bool allow_power_change = true);
diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp
index 9231ad689d..9f8e038877 100644
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -420,12 +420,12 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles,
* @param flags type of operation
* @param p1 vehicle ID to refit
* @param p2 various bitstuffed elements
- * - p2 = (bit 0-4) - New cargo type to refit to.
- * - p2 = (bit 6) - Automatic refitting.
- * - p2 = (bit 7) - Refit only this vehicle. Used only for cloning vehicles.
+ * - p2 = (bit 0-7) - New cargo type to refit to.
* - p2 = (bit 8-15) - New cargo subtype to refit to. 0xFF means to try keeping the same subtype according to GetBestFittingSubType().
* - p2 = (bit 16-23) - Number of vehicles to refit (not counting articulated parts). Zero means all vehicles.
* Only used if "refit only this vehicle" is false.
+ * - p2 = (bit 24) - Automatic refitting.
+ * - p2 = (bit 25) - Refit only this vehicle. Used only for cloning vehicles.
* @param text unused
* @return the cost of this operation or an error
*/
@@ -443,7 +443,7 @@ CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
CommandCost ret = CheckOwnership(front->owner);
if (ret.Failed()) return ret;
- bool auto_refit = HasBit(p2, 6);
+ bool auto_refit = HasBit(p2, 24);
bool free_wagon = v->type == VEH_TRAIN && Train::From(front)->IsFreeWagon(); // used by autoreplace/renew
/* Don't allow shadows and such to be refitted. */
@@ -460,12 +460,12 @@ CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
if (front->vehstatus & VS_CRASHED) return_cmd_error(STR_ERROR_VEHICLE_IS_DESTROYED);
/* Check cargo */
- CargoID new_cid = GB(p2, 0, 5);
+ CargoID new_cid = GB(p2, 0, 8);
byte new_subtype = GB(p2, 8, 8);
if (new_cid >= NUM_CARGO) return CMD_ERROR;
/* For ships and aircraft there is always only one. */
- bool only_this = HasBit(p2, 7) || front->type == VEH_SHIP || front->type == VEH_AIRCRAFT;
+ bool only_this = HasBit(p2, 25) || front->type == VEH_SHIP || front->type == VEH_AIRCRAFT;
uint8 num_vehicles = GB(p2, 16, 8);
CommandCost cost = RefitVehicle(v, only_this, num_vehicles, new_cid, new_subtype, flags, auto_refit);
@@ -899,7 +899,7 @@ CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
/* Find out what's the best sub type */
byte subtype = GetBestFittingSubType(v, w, v->cargo_type);
if (w->cargo_type != v->cargo_type || w->cargo_subtype != subtype) {
- CommandCost cost = DoCommand(0, w->index, v->cargo_type | 1U << 7 | (subtype << 8), flags, GetCmdRefitVeh(v));
+ CommandCost cost = DoCommand(0, w->index, v->cargo_type | 1U << 25 | (subtype << 8), flags, GetCmdRefitVeh(v));
if (cost.Succeeded()) total_cost.AddCost(cost);
}
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index 450b0cc2d8..b4d6fdfabe 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -689,8 +689,8 @@ struct RefitWindow : public Window {
{
assert(_current_company == _local_company);
Vehicle *v = Vehicle::Get(this->window_number);
- CommandCost cost = DoCommand(v->tile, this->selected_vehicle, option->cargo | (int)this->auto_refit << 6 | option->subtype << 8 |
- this->num_vehicles << 16, DC_QUERY_COST, GetCmdRefitVeh(v->type));
+ CommandCost cost = DoCommand(v->tile, this->selected_vehicle, option->cargo | option->subtype << 8 | this->num_vehicles << 16 |
+ (int)this->auto_refit << 24, DC_QUERY_COST, GetCmdRefitVeh(v->type));
if (cost.Failed()) return INVALID_STRING_ID;
diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp
index 0655065a6c..6cee4fef28 100644
--- a/src/video/win32_v.cpp
+++ b/src/video/win32_v.cpp
@@ -238,7 +238,7 @@ int RedrawScreenDebug()
#define TID_POLLMOUSE 1
#define MOUSE_POLL_DELAY 75
-static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT event, DWORD time)
+static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT_PTR event, DWORD time)
{
RECT rc;
POINT pt;
@@ -636,7 +636,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
switch (msg) {
case WM_CREATE:
- SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc);
+ SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, TrackMouseTimerProc);
SetCompositionPos(hwnd);
_imm_props = ImmGetProperty(GetKeyboardLayout(0), IGP_PROPERTY);
break;
@@ -741,7 +741,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
_pTrackMouseEvent(&tme);
} else {
- SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc);
+ SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, TrackMouseTimerProc);
}
}
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 350bb92381..11a1587126 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -58,7 +58,7 @@
*
*
* Rows are horizontal sections of the viewport, also half a tile wide.
- * This time the nothern most tile on the map defines 0 and
+ * This time the northern most tile on the map defines 0 and
* everything south of that has a positive number.
*/
@@ -399,65 +399,27 @@ ViewPort *IsPtInWindowViewport(const Window *w, int x, int y)
}
/**
- * Translate screen coordinate in a viewport to a tile coordinate
+ * Translate screen coordinate in a viewport to underlying tile coordinate.
+ *
+ * Returns exact point of the map that is visible in the given place
+ * of the viewport (3D perspective), height of tiles and foundations matter.
+ *
* @param vp Viewport that contains the (\a x, \a y) screen coordinate
- * @param x Screen x coordinate
- * @param y Screen y coordinate
- * @param clamp_to_map Clamp the coordinate outside of the map to the closest tile within the map.
- * @return Tile coordinate
+ * @param x Screen x coordinate, distance in pixels from the left edge of viewport frame
+ * @param y Screen y coordinate, distance in pixels from the top edge of viewport frame
+ * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map
+ * @return Tile coordinate or (-1, -1) if given x or y is not within viewport frame
*/
Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y, bool clamp_to_map)
{
- Point pt;
- int a, b;
- int z;
-
- if ( (uint)(x -= vp->left) >= (uint)vp->width ||
- (uint)(y -= vp->top) >= (uint)vp->height) {
- Point pt = {-1, -1};
- return pt;
+ if (!IsInsideBS(x, vp->left, vp->width) || !IsInsideBS(y, vp->top, vp->height)) {
+ Point pt = { -1, -1 };
+ return pt;
}
- x = (ScaleByZoom(x, vp->zoom) + vp->virtual_left) >> (2 + ZOOM_LVL_SHIFT);
- y = (ScaleByZoom(y, vp->zoom) + vp->virtual_top) >> (1 + ZOOM_LVL_SHIFT);
-
- a = y - x;
- b = y + x;
-
- if (clamp_to_map) {
- /* Bring the coordinates near to a valid range. This is mostly due to the
- * tiles on the north side of the map possibly being drawn too high due to
- * the extra height levels. So at the top we allow a number of extra tiles.
- * This number is based on the tile height and pixels. */
- int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS);
- a = Clamp(a, -extra_tiles * TILE_SIZE, MapMaxX() * TILE_SIZE - 1);
- b = Clamp(b, -extra_tiles * TILE_SIZE, MapMaxY() * TILE_SIZE - 1);
- }
-
- /* (a, b) is the X/Y-world coordinate that belongs to (x,y) if the landscape would be completely flat on height 0.
- * Now find the Z-world coordinate by fix point iteration.
- * This is a bit tricky because the tile height is non-continuous at foundations.
- * The clicked point should be approached from the back, otherwise there are regions that are not clickable.
- * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely)
- * So give it a z-malus of 4 in the first iterations.
- */
- z = 0;
-
- int min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0;
-
- for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(a + max(z, 4) - 4, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + max(z, 4) - 4, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2;
- for (int malus = 3; malus > 0; malus--) z = GetSlopePixelZ(Clamp(a + max(z, malus) - malus, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + max(z, malus) - malus, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2;
- for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(a + z, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + z, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2;
-
- if (clamp_to_map) {
- pt.x = Clamp(a + z, min_coord, MapMaxX() * TILE_SIZE - 1);
- pt.y = Clamp(b + z, min_coord, MapMaxY() * TILE_SIZE - 1);
- } else {
- pt.x = a + z;
- pt.y = b + z;
- }
-
- return pt;
+ return InverseRemapCoords2(
+ ScaleByZoom(x - vp->left, vp->zoom) + vp->virtual_left,
+ ScaleByZoom(y - vp->top, vp->zoom) + vp->virtual_top, clamp_to_map);
}
/* When used for zooming, check area below current coordinates (x,y)
@@ -1669,121 +1631,33 @@ void Window::DrawViewport() const
}
/**
- * Continue criteria for the SearchMapEdge function.
- * @param iter Value to check.
- * @param iter_limit Maximum value for the iter
- * @param sy Screen y coordinate calculated for the tile at hand
- * @param sy_limit Limit to the screen y coordinate
- * @return True when we should continue searching.
+ * Ensure that a given viewport has a valid scroll position.
+ *
+ * There must be a visible piece of the map in the center of the viewport.
+ * If there isn't, the viewport will be scrolled to nearest such location.
+ *
+ * @param vp The viewport.
+ * @param[in,out] scroll_x Viewport X scroll.
+ * @param[in,out] scroll_y Viewport Y scroll.
*/
-typedef bool ContinueMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit);
-
-/** Continue criteria for searching a no-longer-visible tile in negative direction, starting at some tile. */
-static inline bool ContinueLowerMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit) { return iter > 0 && sy > sy_limit; }
-/** Continue criteria for searching a no-longer-visible tile in positive direction, starting at some tile. */
-static inline bool ContinueUpperMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit) { return iter < iter_limit && sy < sy_limit; }
-
-/**
- * Searches, starting at the given tile, by applying the given offset to iter, for a no longer visible tile.
- * The whole sense of this function is keeping the to-be-written code small, thus it is a little bit abstracted
- * so the same function can be used for both the X and Y locations. As such a reference to one of the elements
- * in curr_tile was needed.
- * @param curr_tile A tile
- * @param iter Reference to either the X or Y of curr_tile.
- * @param iter_limit Upper search limit for the iter value.
- * @param offset Search in steps of this size
- * @param sy_limit Search limit to be passed to the criteria
- * @param continue_criteria Search as long as this criteria is true
- * @return The final value of iter.
- */
-static int SearchMapEdge(Point &curr_tile, int &iter, int iter_limit, int offset, int sy_limit, ContinueMapEdgeSearch continue_criteria)
+static inline void ClampViewportToMap(const ViewPort *vp, int *scroll_x, int *scroll_y)
{
- int sy;
- do {
- iter = Clamp(iter + offset, 0, iter_limit);
- sy = GetViewportY(curr_tile);
- } while (continue_criteria(iter, iter_limit, sy, sy_limit));
+ /* Centre of the viewport is hot spot. */
+ Point pt = {
+ *scroll_x + vp->virtual_width / 2,
+ *scroll_y + vp->virtual_height / 2
+ };
- return iter;
-}
+ /* Find nearest tile that is within borders of the map. */
+ bool clamped;
+ pt = InverseRemapCoords2(pt.x, pt.y, true, &clamped);
-/**
- * Determine the clamping of either the X or Y coordinate to the map.
- * @param curr_tile A tile
- * @param iter Reference to either the X or Y of curr_tile.
- * @param iter_limit Upper search limit for the iter value.
- * @param start Start value for the iteration.
- * @param other_ref Reference to the opposite axis in curr_tile than of iter.
- * @param other_value Start value for of the opposite axis
- * @param vp_value Value of the viewport location in the opposite axis as for iter.
- * @param other_limit Limit for the other value, so if iter is X, then other_limit is for Y.
- * @param vp_top Top of the viewport.
- * @param vp_bottom Bottom of the viewport.
- * @return Clamped version of vp_value.
- */
-static inline int ClampXYToMap(Point &curr_tile, int &iter, int iter_limit, int start, int &other_ref, int other_value, int vp_value, int other_limit, int vp_top, int vp_bottom)
-{
- bool upper_edge = other_value < _settings_game.construction.max_heightlevel / 4;
-
- /*
- * First get an estimate of the tiles relevant for us at that edge. Relevant in the sense
- * "at least close to the visible area". Thus, we don't look at exactly each tile, inspecting
- * e.g. every tenth should be enough. After all, the desired screen limit is set such that
- * the bordermost tiles are painted in the middle of the screen when one hits the limit,
- * i.e. it is no harm if there is some small error in that calculation
- */
-
- other_ref = upper_edge ? 0 : other_limit;
- iter = start;
- int min_iter = SearchMapEdge(curr_tile, iter, iter_limit, upper_edge ? -10 : +10, vp_top, upper_edge ? ContinueLowerMapEdgeSearch : ContinueUpperMapEdgeSearch);
- iter = start;
- int max_iter = SearchMapEdge(curr_tile, iter, iter_limit, upper_edge ? +10 : -10, vp_bottom, upper_edge ? ContinueUpperMapEdgeSearch : ContinueLowerMapEdgeSearch);
-
- max_iter = min(max_iter + _settings_game.construction.max_heightlevel / 4, iter_limit);
- min_iter = min(min_iter, max_iter);
-
- /* Now, calculate the highest heightlevel of these tiles. Again just as an estimate. */
- int max_heightlevel_at_edge = 0;
- for (iter = min_iter; iter <= max_iter; iter += 10) {
- max_heightlevel_at_edge = max(max_heightlevel_at_edge, (int)TileHeight(TileXY(curr_tile.x, curr_tile.y)));
+ if (clamped) {
+ /* Convert back to viewport coordinates and remove centering. */
+ pt = RemapCoords2(pt.x, pt.y);
+ *scroll_x = pt.x - vp->virtual_width / 2;
+ *scroll_y = pt.y - vp->virtual_height / 2;
}
-
- /* Based on that heightlevel, calculate the limit. For the upper edge a tile with height zero would
- * get a limit of zero, on the other side it depends on the number of tiles along the axis. */
- return upper_edge ?
- max(vp_value, -max_heightlevel_at_edge * (int)(TILE_HEIGHT * 2 * ZOOM_LVL_BASE)) :
- min(vp_value, (other_limit * TILE_SIZE * 4 - max_heightlevel_at_edge * TILE_HEIGHT * 2) * ZOOM_LVL_BASE);
-}
-
-static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y)
-{
- int original_y = y;
-
- /* Centre of the viewport is hot spot */
- x += vp->virtual_width / 2;
- y += vp->virtual_height / 2;
-
- /* Convert viewport coordinates to map coordinates
- * Calculation is scaled by 4 to avoid rounding errors */
- int vx = -x + y * 2;
- int vy = x + y * 2;
-
- /* Find out which tile corresponds to (vx,vy) if one assumes height zero. The cast is necessary to prevent C++ from
- * converting the result to an uint, which gives an overflow instead of a negative result... */
- int tx = vx / (int)(TILE_SIZE * 4 * ZOOM_LVL_BASE);
- int ty = vy / (int)(TILE_SIZE * 4 * ZOOM_LVL_BASE);
-
- Point curr_tile;
- vx = ClampXYToMap(curr_tile, curr_tile.y, MapMaxY(), ty, curr_tile.x, tx, vx, MapMaxX(), original_y, original_y + vp->virtual_height);
- vy = ClampXYToMap(curr_tile, curr_tile.x, MapMaxX(), tx, curr_tile.y, ty, vy, MapMaxY(), original_y, original_y + vp->virtual_height);
-
- /* Convert map coordinates to viewport coordinates */
- x = (-vx + vy) / 2;
- y = ( vx + vy) / 4;
-
- /* Remove centering */
- x -= vp->virtual_width / 2;
- y -= vp->virtual_height / 2;
}
/**
@@ -1803,7 +1677,7 @@ void UpdateViewportPosition(Window *w)
SetViewportPosition(w, pt.x, pt.y);
} else {
/* Ensure the destination location is within the map */
- ClampViewportToMap(vp, w->viewport->dest_scrollpos_x, w->viewport->dest_scrollpos_y);
+ ClampViewportToMap(vp, &w->viewport->dest_scrollpos_x, &w->viewport->dest_scrollpos_y);
int delta_x = w->viewport->dest_scrollpos_x - w->viewport->scrollpos_x;
int delta_y = w->viewport->dest_scrollpos_y - w->viewport->scrollpos_y;
@@ -1813,8 +1687,8 @@ void UpdateViewportPosition(Window *w)
if (_settings_client.gui.smooth_scroll) {
int max_scroll = ScaleByMapSize1D(512 * ZOOM_LVL_BASE);
/* Not at our desired position yet... */
- w->viewport->scrollpos_x += Clamp(delta_x / 4, -max_scroll, max_scroll);
- w->viewport->scrollpos_y += Clamp(delta_y / 4, -max_scroll, max_scroll);
+ w->viewport->scrollpos_x += Clamp(DivAwayFromZero(delta_x, 4), -max_scroll, max_scroll);
+ w->viewport->scrollpos_y += Clamp(DivAwayFromZero(delta_y, 4), -max_scroll, max_scroll);
} else {
w->viewport->scrollpos_x = w->viewport->dest_scrollpos_x;
w->viewport->scrollpos_y = w->viewport->dest_scrollpos_y;
@@ -1823,7 +1697,7 @@ void UpdateViewportPosition(Window *w)
w->viewport->scrollpos_y == w->viewport->dest_scrollpos_y);
}
- ClampViewportToMap(vp, w->viewport->scrollpos_x, w->viewport->scrollpos_y);
+ ClampViewportToMap(vp, &w->viewport->scrollpos_x, &w->viewport->scrollpos_y);
SetViewportPosition(w, w->viewport->scrollpos_x, w->viewport->scrollpos_y);
if (update_overlay) RebuildViewportOverlay(w);
@@ -1905,11 +1779,12 @@ void ConstrainAllViewportsZoom()
* Mark a tile given by its index dirty for repaint.
* @param tile The tile to mark dirty.
* @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.)
+ * @param tile_height_override Height of the tile (#TileHeight).
* @ingroup dirty
*/
-void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset)
+void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override)
{
- Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, TilePixelHeight(tile));
+ Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, tile_height_override * TILE_HEIGHT);
MarkAllViewportsDirty(
pt.x - MAX_TILE_EXTENT_LEFT,
pt.y - MAX_TILE_EXTENT_TOP - ZOOM_LVL_BASE * TILE_HEIGHT * bridge_level_offset,
@@ -1917,22 +1792,6 @@ void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset)
pt.y + MAX_TILE_EXTENT_BOTTOM);
}
-/**
- * Mark a (virtual) tile outside the map dirty for repaint.
- * @param x Tile X position.
- * @param y Tile Y position.
- * @ingroup dirty
- */
-void MarkTileDirtyByTileOutsideMap(int x, int y)
-{
- Point pt = RemapCoords(x * TILE_SIZE, y * TILE_SIZE, TilePixelHeightOutsideMap(x, y));
- MarkAllViewportsDirty(
- pt.x - MAX_TILE_EXTENT_LEFT,
- pt.y, // no buildings outside of map
- pt.x + MAX_TILE_EXTENT_RIGHT,
- pt.y + MAX_TILE_EXTENT_BOTTOM);
-}
-
/**
* Marks the selected tiles as dirty.
*
diff --git a/src/viewport_func.h b/src/viewport_func.h
index cbdcc5019a..319d4efd60 100644
--- a/src/viewport_func.h
+++ b/src/viewport_func.h
@@ -15,7 +15,7 @@
#include "gfx_type.h"
#include "viewport_type.h"
#include "window_type.h"
-#include "tile_type.h"
+#include "tile_map.h"
#include "station_type.h"
static const int TILE_HEIGHT_STEP = 50; ///< One Z unit tile height difference is displayed as 50m.
@@ -78,9 +78,18 @@ void UpdateAllVirtCoords();
extern Point _tile_fract_coords;
-void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0);
+void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override);
-void MarkTileDirtyByTileOutsideMap(int x, int y);
+/**
+ * Mark a tile given by its index dirty for repaint.
+ * @param tile The tile to mark dirty.
+ * @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.)
+ * @ingroup dirty
+ */
+static inline void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0)
+{
+ MarkTileDirtyByTile(tile, bridge_level_offset, TileHeight(tile));
+}
Point GetViewportStationMiddle(const ViewPort *vp, const Station *st);
diff --git a/src/void_cmd.cpp b/src/void_cmd.cpp
index ffe54df992..a2a45e7227 100644
--- a/src/void_cmd.cpp
+++ b/src/void_cmd.cpp
@@ -10,7 +10,7 @@
/** @file void_cmd.cpp Handling of void tiles. */
#include "stdafx.h"
-#include "tile_cmd.h"
+#include "landscape.h"
#include "command_func.h"
#include "viewport_func.h"
#include "slope_func.h"
@@ -28,7 +28,12 @@ static void DrawTile_Void(TileInfo *ti)
static int GetSlopePixelZ_Void(TileIndex tile, uint x, uint y)
{
- return TilePixelHeight(tile);
+ /* This function may be called on tiles outside the map, don't asssume
+ * that 'tile' is a valid tile index. See GetSlopePixelZOutsideMap. */
+ int z;
+ Slope tileh = GetTilePixelSlopeOutsideMap(x >> 4, y >> 4, &z);
+
+ return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh);
}
static Foundation GetFoundation_Void(TileIndex tile, Slope tileh)
diff --git a/src/widgets/company_widget.h b/src/widgets/company_widget.h
index 4c1a5df4b4..ceb81ae195 100644
--- a/src/widgets/company_widget.h
+++ b/src/widgets/company_widget.h
@@ -86,10 +86,15 @@ enum SelectCompanyLiveryWidgets {
WID_SCL_CLASS_ROAD, ///< Class road.
WID_SCL_CLASS_SHIP, ///< Class ship.
WID_SCL_CLASS_AIRCRAFT, ///< Class aircraft.
+ WID_SCL_GROUPS_RAIL, ///< Rail groups.
+ WID_SCL_GROUPS_ROAD, ///< Road groups.
+ WID_SCL_GROUPS_SHIP, ///< Ship groups.
+ WID_SCL_GROUPS_AIRCRAFT, ///< Aircraft groups.
WID_SCL_SPACER_DROPDOWN, ///< Spacer for dropdown.
WID_SCL_PRI_COL_DROPDOWN, ///< Dropdown for primary colour.
WID_SCL_SEC_COL_DROPDOWN, ///< Dropdown for secondary colour.
WID_SCL_MATRIX, ///< Matrix.
+ WID_SCL_MATRIX_SCROLLBAR, ///< Matrix scrollbar.
};
diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp
index 816e981a14..61656c020e 100644
--- a/src/widgets/dropdown.cpp
+++ b/src/widgets/dropdown.cpp
@@ -352,8 +352,8 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b
/* Longest item in the list, if auto_width is enabled */
uint max_item_width = 0;
- /* Total length of list */
- int height = 0;
+ /* Total height of list */
+ uint height = 0;
for (const DropDownListItem * const *it = list->Begin(); it != list->End(); ++it) {
const DropDownListItem *item = *it;
@@ -361,53 +361,58 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b
if (auto_width) max_item_width = max(max_item_width, item->Width() + 5);
}
- /* Check if the status bar is visible, as we don't want to draw over it */
- int screen_bottom = GetMainViewBottom();
+ /* Scrollbar needed? */
bool scroll = false;
- /* Check if the dropdown will fully fit below the widget */
- if (top + height + 4 >= screen_bottom) {
- /* If not, check if it will fit above the widget */
- int screen_top = GetMainViewTop();
- if (w->top + wi_rect.top > screen_top + height) {
- top = w->top + wi_rect.top - height - 4;
- } else {
- /* If it doesn't fit above the widget, we need to enable a scrollbar... */
- int avg_height = height / (int)list->Length();
- scroll = true;
+ /* Is it better to place the dropdown above the widget? */
+ bool above = false;
- /* ... and choose whether to put the list above or below the widget. */
- bool put_above = false;
- int available_height = screen_bottom - w->top - wi_rect.bottom;
- if (w->top + wi_rect.top - screen_top > available_height) {
- // Put it above.
- available_height = w->top + wi_rect.top - screen_top;
- put_above = true;
- }
+ /* Available height below (or above, if the dropdown is placed above the widget). */
+ uint available_height = (uint)max(GetMainViewBottom() - top - 4, 0);
+
+ /* If the dropdown doesn't fully fit below the widget... */
+ if (height > available_height) {
+
+ uint available_height_above = (uint)max(w->top + wi_rect.top - GetMainViewTop() - 4, 0);
+
+ /* Put the dropdown above if there is more available space. */
+ if (available_height_above > available_height) {
+ above = true;
+ available_height = available_height_above;
+ }
+
+ /* If the dropdown doesn't fully fit, we need a dropdown. */
+ if (height > available_height) {
+ scroll = true;
+ uint avg_height = height / list->Length();
/* Check at least there is space for one item. */
assert(available_height >= avg_height);
- /* And lastly, fit the list... */
- int rows = available_height / avg_height;
+ /* Fit the list. */
+ uint rows = available_height / avg_height;
height = rows * avg_height;
- /* Add space for the scroll bar if we automatically determined
- * the width of the list. */
+ /* Add space for the scrollbar. */
max_item_width += NWidgetScrollbar::GetVerticalDimension().width;
+ }
- /* ... and set the top position if needed. */
- if (put_above) {
- top = w->top + wi_rect.top - height - 4;
- }
+ /* Set the top position if needed. */
+ if (above) {
+ top = w->top + wi_rect.top - height - 4;
}
}
if (auto_width) width = max(width, max_item_width);
Point dw_pos = { w->left + (_current_text_dir == TD_RTL ? wi_rect.right + 1 - (int)width : wi_rect.left), top};
- Dimension dw_size = {width, (uint)height};
- new DropdownWindow(w, list, selected, button, instant_close, dw_pos, dw_size, wi_colour, scroll);
+ Dimension dw_size = {width, height};
+ DropdownWindow *dropdown = new DropdownWindow(w, list, selected, button, instant_close, dw_pos, dw_size, wi_colour, scroll);
+
+ /* The dropdown starts scrolling downwards when opening it towards
+ * the top and holding down the mouse button. It can be fooled by
+ * opening the dropdown scrolled to the very bottom. */
+ if (above && scroll) dropdown->vscroll->UpdatePosition(INT_MAX);
}
/**
diff --git a/src/widgets/group_widget.h b/src/widgets/group_widget.h
index 41e0bcd45a..fe5ae81174 100644
--- a/src/widgets/group_widget.h
+++ b/src/widgets/group_widget.h
@@ -31,6 +31,7 @@ enum GroupListWidgets {
WID_GL_CREATE_GROUP, ///< Create group button.
WID_GL_DELETE_GROUP, ///< Delete group button.
WID_GL_RENAME_GROUP, ///< Rename group button.
+ WID_GL_LIVERY_GROUP, ///< Group livery button.
WID_GL_REPLACE_PROTECTION, ///< Replace protection button.
WID_GL_INFO, ///< Group info.
};
diff --git a/src/window.cpp b/src/window.cpp
index d67c7f2f70..3f4adf5e98 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -655,7 +655,7 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
/* Clicked on a widget that is not disabled.
* So unless the clicked widget is the caption bar, change focus to this widget.
- * Exception: In the OSK we always want the editbox to stay focussed. */
+ * Exception: In the OSK we always want the editbox to stay focused. */
if (widget_type != WWT_CAPTION && w->window_class != WC_OSK) {
/* focused_widget_changed is 'now' only true if the window this widget
* is in gained focus. In that case it must remain true, also if the
@@ -3100,7 +3100,7 @@ void UpdateWindows()
CallWindowRealtimeTickEvent(delta_ms);
-#ifdef ENABLE_NETWORKING
+#ifdef ENABLE_NETWORK
static GUITimer network_message_timer = GUITimer(1);
if (network_message_timer.Elapsed(delta_ms)) {
network_message_timer.SetInterval(1000);
@@ -3516,8 +3516,9 @@ void ChangeVehicleViewports(VehicleID from_index, VehicleID to_index)
*/
void RelocateAllWindows(int neww, int newh)
{
- Window *w;
+ DeleteWindowById(WC_DROPDOWN_MENU, 0);
+ Window *w;
FOR_ALL_WINDOWS_FROM_BACK(w) {
int left, top;
/* XXX - this probably needs something more sane. For example specifying