diff --git a/Doxyfile b/Doxyfile
index 251b36be15..b6b46257a7 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -292,13 +292,13 @@ INCLUDE_FILE_PATTERNS =
PREDEFINED = ENABLE_NETWORK \
WITH_ZLIB \
WITH_LZO \
- WITH_LZMA \
+ WITH_LIBLZMA \
WITH_SDL \
WITH_PNG \
WITH_FONTCONFIG \
WITH_FREETYPE \
- WITH_ICU_SORT \
- WITH_ICU_LAYOUT \
+ WITH_ICU_I18N \
+ WITH_ICU_LX \
UNICODE \
_UNICODE \
_GNU_SOURCE \
diff --git a/README.md b/README.md
index 544a2ea465..77803e3acd 100644
--- a/README.md
+++ b/README.md
@@ -438,12 +438,11 @@ OpenTTD has been ported to several platforms and operating systems. It should
not be very difficult to port it to a new platform. The currently working
platforms are:
-- BeOS (SDL or Allegro)
- DOS (Allegro)
- FreeBSD (SDL)
+- Haiku (SDL)
- Linux (SDL or Allegro)
- macOS (universal) (Cocoa video and sound drivers)
-- MorphOS (SDL)
- OpenBSD (SDL)
- OS/2 (SDL)
- Windows (Win32 GDI (faster) or SDL or Allegro)
@@ -808,7 +807,7 @@ and it should build automatically. In case you want to build with SDL support
you need to add WITH_SDL to the project settings.
PNG (WITH_PNG), ZLIB (WITH_ZLIB), LZO (WITH_LZO), Freetype (WITH_FREETYPE) and
-LZMA (WITH_LZMA) support is enabled by default. For these to work you need their
+libLZMA (WITH_LIBLZMA) support is enabled by default. For these to work you need their
development files. To get them just use vcpkg from https://github.com/Microsoft/vcpkg
using x86-windows-static and x64-windows-static triplets.
For more help with VS see docs/Readme_Windows_MSVC.md.
@@ -833,17 +832,10 @@ However, for the first build one has to do a '`./configure`' first.
To make a universal binary type '`./configure --enabled-universal`'
instead of '`./configure`'.
-### BeOS:
+### Haiku:
Use '`make`', but do a '`./configure`' before the first build.
-### MorphOS:
-
-Use '`make`'. However, for the first build one has to do a '`./configure`'
-first. Note that you need the MorphOS SDK, latest libnix updates (else C++
-parts of OpenTTD will not build) and the powersdl.library SDK. Optionally libz,
-libpng and freetype2 developer files.
-
### OS/2:
A comprehensive GNU build environment is required to build the OS/2 version.
diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml
index 924302fee3..96a23a5401 100644
--- a/azure-pipelines/templates/ci-git-rebase.yml
+++ b/azure-pipelines/templates/ci-git-rebase.yml
@@ -1,9 +1,10 @@
steps:
-# Rebase to origin/master for every PR. This means users don't have to
-# rebase every time master changes. As long as the PR applies cleanly, we
+# Rebase to target branch for every PR. This means users don't have to
+# rebase every time target branch changes. As long as the PR applies cleanly, we
# will validate it.
-- script: |
+- bash: |
git config user.email 'info@openttd.org'
git config user.name 'OpenTTD CI'
- git rebase origin/master
- displayName: 'Rebase to master'
+ git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH}
+ displayName: 'Rebase to target branch'
+ condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml
index 0e4fffefb0..7f442904c4 100644
--- a/azure-pipelines/templates/linux-build.yml
+++ b/azure-pipelines/templates/linux-build.yml
@@ -4,11 +4,27 @@ parameters:
ContainerCommand: ''
steps:
+# 'envVars' in the 'Docker@1' task is a bit funky. When you want to use a
+# variable, you have to quote it. But the quote is also sent directly to
+# Docker and ends up in the variable, which you don't want. To work around
+# this, we set the correct variable first (which becomes an env-variable), and
+# pass that env-variable through to Docker. We cannot use the normal
+# 'variables' entry, as we are a template. So that results in this bit of
+# Bash code. Not because it is pretty, but it is the only way we found that
+# works.
+- bash: |
+ echo "##vso[task.setvariable variable=TARGET_BRANCH]${SYSTEM_PULLREQUEST_TARGETBRANCH}"
+ echo "Target branch is ${SYSTEM_PULLREQUEST_TARGETBRANCH}"
+ displayName: "Set target branch"
+ condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
+
- task: Docker@1
${{ if eq(parameters.Image, 'compile-farm') }}:
displayName: 'Build'
${{ if eq(parameters.Image, 'compile-farm-ci') }}:
displayName: 'Build and test'
+ # Run the commit-checker only if it is a Pull Request
+ condition: and(succeeded(), or(ne(variables['Agent.JobName'], 'commit-checker'), eq(variables['Build.Reason'], 'PullRequest')))
inputs:
command: 'Run an image'
imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }}
@@ -16,3 +32,5 @@ steps:
workingDirectory: '$(Build.SourcesDirectory)'
containerCommand: ${{ parameters.ContainerCommand }}
runInBackground: false
+ envVars: |
+ TARGET_BRANCH
diff --git a/config.lib b/config.lib
index b4aecfb9b0..58263579a8 100644
--- a/config.lib
+++ b/config.lib
@@ -82,7 +82,6 @@ set_default() {
with_iconv="1"
with_midi=""
with_midi_arg=""
- with_libtimidity="1"
with_fluidsynth="1"
with_freetype="1"
with_fontconfig="1"
@@ -163,7 +162,6 @@ set_default() {
with_iconv
with_midi
with_midi_arg
- with_libtimidity
with_fluidsynth
with_freetype
with_fontconfig
@@ -376,10 +374,6 @@ detect_params() {
--without-libpng) with_png="0";;
--with-libpng=*) with_png="$optarg";;
- --with-libtimidity) with_libtimidity="2";;
- --without-libtimidity) with_libtimidity="0";;
- --with-libtimidity=*) with_libtimidity="$optarg";;
-
--with-fluidsynth) with_fluidsynth="2";;
--without-fluidsynth) with_fluidsynth="0";;
--with-fluidsynth=*) with_fluidsynth="$optarg";;
@@ -583,10 +577,10 @@ check_params() {
# Check if all params have valid values
- # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS
- if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then
+ # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS
+ if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then
log 1 "configure: error: invalid option --os=$os"
- log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]"
+ log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]"
exit 1
fi
# cpu_type can be either 32 or 64
@@ -653,7 +647,7 @@ check_params() {
detect_sse_capable_architecture
if [ "$enable_static" = "1" ]; then
- if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "DOS" ]; then
+ if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then
enable_static="2"
else
enable_static="0"
@@ -663,8 +657,8 @@ check_params() {
if [ "$enable_static" != "0" ]; then
log 1 "checking static... yes"
- if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "DOS" ]; then
- log 1 "WARNING: static is only known to work on Windows, DOS, MacOSX and MorphOS"
+ if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ]; then
+ log 1 "WARNING: static is only known to work on Windows, DOS, and MacOSX"
log 1 "WARNING: use static at your own risk on this platform"
sleep 5
@@ -919,7 +913,6 @@ check_params() {
detect_fontconfig
detect_icu_layout
detect_icu_sort
- detect_libtimidity
detect_fluidsynth
if [ "$with_direct_music" != "0" ]; then
@@ -963,9 +956,7 @@ check_params() {
fi
if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then
- if [ "$os" = "MORPHOS" ]; then
- strip_arg="--strip-all --strip-unneeded --remove-section .comment"
- elif [ "$os" = "OSX" ]; then
+ if [ "$os" = "OSX" ]; then
strip_arg=""
elif [ "$os" = "OS2" ]; then
strip_arg=""
@@ -1609,10 +1600,6 @@ make_cflags_and_ldflags() {
if [ "$enable_debug" = "0" ]; then
# No debug, add default stuff
OBJS_SUBDIR="release"
- if [ "$os" = "MORPHOS" ]; then
- CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS"
- LDFLAGS="$LDFLAGS -noixemul"
- fi
if [ "$enable_profiling" = "0" ]; then
# -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible)
@@ -1701,7 +1688,7 @@ make_cflags_and_ldflags() {
fi
fi
- if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "OS2" ]; then
+ if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "OS2" ]; then
LIBS="$LIBS -lpthread"
fi
if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
@@ -1932,11 +1919,6 @@ EOL
LIBS="$LIBS -lc"
fi
- if [ "$os" = "MORPHOS" ]; then
- # -Wstrict-prototypes generates much noise because of system headers
- CFLAGS="$CFLAGS -Wno-strict-prototypes"
- fi
-
if [ "$os" = "OPENBSD" ]; then
LIBS="$LIBS -pthread"
fi
@@ -1960,12 +1942,12 @@ EOL
fi
fi
- if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
+ if [ "$os" = "HAIKU" ]; then
LIBS="$LIBS -lmidi -lbe"
fi
# Most targets act like UNIX, just with some additions
- if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
+ if [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
CFLAGS="$CFLAGS -DUNIX"
fi
# And others like Windows
@@ -2020,7 +2002,7 @@ EOL
fi
if [ -n "$lzma_config" ]; then
- CFLAGS="$CFLAGS -DWITH_LZMA"
+ CFLAGS="$CFLAGS -DWITH_LIBLZMA"
CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' ' '`"
if [ "$enable_static" != "0" ]; then
@@ -2091,7 +2073,7 @@ EOL
fi
if [ -n "$icu_layout_config" ]; then
- CFLAGS="$CFLAGS -DWITH_ICU_LAYOUT"
+ CFLAGS="$CFLAGS -DWITH_ICU_LX"
CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' ' '`"
if [ "$static_icu" != "0" ]; then
@@ -2102,7 +2084,7 @@ EOL
fi
if [ -n "$icu_sort_config" ]; then
- CFLAGS="$CFLAGS -DWITH_ICU_SORT"
+ CFLAGS="$CFLAGS -DWITH_ICU_I18N"
CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' ' '`"
if [ "$static_icu" != "0" ]; then
@@ -2131,17 +2113,6 @@ EOL
CFLAGS="$CFLAGS -DWITH_XAUDIO2"
fi
- if [ -n "$libtimidity_config" ]; then
- CFLAGS="$CFLAGS -DLIBTIMIDITY"
- CFLAGS="$CFLAGS `$libtimidity_config --cflags | tr '\n\r' ' '`"
-
- if [ "$enable_static" != "0" ]; then
- LIBS="$LIBS `$libtimidity_config --libs --static | tr '\n\r' ' '`"
- else
- LIBS="$LIBS `$libtimidity_config --libs | tr '\n\r' ' '`"
- fi
- fi
-
if [ -n "$fluidsynth" ]; then
LIBS="$LIBS -lfluidsynth"
CFLAGS="$CFLAGS -DFLUIDSYNTH"
@@ -2180,10 +2151,6 @@ EOL
if [ "$enable_network" != "0" ]; then
CFLAGS="$CFLAGS -DENABLE_NETWORK"
- if [ "$os" = "BEOS" ]; then
- LDFLAGS="$LDFLAGS -lbind -lsocket"
- fi
-
if [ "$os" = "HAIKU" ]; then
LDFLAGS="$LDFLAGS -lnetwork"
fi
@@ -2680,7 +2647,7 @@ detect_awk() {
detect_os() {
if [ "$os" = "DETECT" ]; then
- # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, and DOS
+ # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, OS2, and DOS
# Try first via dumpmachine, then via uname
os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk '
@@ -2691,8 +2658,6 @@ detect_os() {
/openbsd/ { print "OPENBSD"; exit}
/netbsd/ { print "NETBSD"; exit}
/hp-ux/ { print "HPUX"; exit}
- /morphos/ { print "MORPHOS"; exit}
- /beos/ { print "BEOS"; exit}
/haiku/ { print "HAIKU"; exit}
/sunos/ { print "SUNOS"; exit}
/solaris/ { print "SUNOS"; exit}
@@ -2711,8 +2676,6 @@ detect_os() {
/openbsd/ { print "OPENBSD"; exit}
/netbsd/ { print "NETBSD"; exit}
/hp-ux/ { print "HPUX"; exit}
- /morphos/ { print "MORPHOS"; exit}
- /beos/ { print "BEOS"; exit}
/haiku/ { print "HAIKU"; exit}
/sunos/ { print "SUNOS"; exit}
/cygwin/ { print "CYGWIN"; exit}
@@ -2725,7 +2688,7 @@ detect_os() {
if [ -z "$os" ]; then
log 1 "detecting OS... none detected"
log 1 "I couldn't detect your OS. Please use --os=OS to force one"
- log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS"
+ log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS"
exit 1
fi
@@ -3097,10 +3060,6 @@ detect_lzo2() {
detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h"
}
-detect_libtimidity() {
- detect_pkg_config "$with_libtimidity" "libtimidity" "libtimidity_config" "0.1" "1"
-}
-
detect_fluidsynth() {
detect_library "$with_fluidsynth" "fluidsynth" "" "" "fluidsynth.h"
}
@@ -3838,7 +3797,7 @@ showhelp() {
echo " --lipo=LIPO the lipo to use (OSX ONLY) [HOST-lipo]"
echo " --os=OS the OS we are compiling for [DETECT]"
echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/"
- echo " NETBSD/MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/"
+ echo " NETBSD/HPUX/SUNOS/CYGWIN/"
echo " MINGW/OS2/DOS/HAIKU"
echo ""
echo "Paths:"
@@ -3908,8 +3867,6 @@ showhelp() {
echo " --with-midi=midi define which midi-player to use"
echo " --with-midi-arg=arg define which args to use for the"
echo " midi-player"
- echo " --with-libtimidity[=\"pkg-config libtimidity\"]"
- echo " enables libtimidity support"
echo " --with-fluidsynth enables fluidsynth support"
echo " --with-allegro[=\"pkg-config allegro\"]"
echo " enables Allegro video driver support"
diff --git a/configure b/configure
index afc1de51b4..f6c6a2eec9 100755
--- a/configure
+++ b/configure
@@ -117,17 +117,15 @@ AWKCOMMAND='
if ($0 == "AI" && "'$enable_ai'" == "0") { next; }
if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; }
if ($0 == "DOS" && "'$os'" != "DOS") { next; }
- if ($0 == "BEOS" && "'$os'" != "BEOS" &&
- "'$os'" != "HAIKU") { next; }
+ if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; }
if ($0 == "WIN32" && "'$os'" != "MINGW" &&
"'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; }
- if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; }
if ($0 == "MSVC" && "'$os'" != "MSVC") { next; }
if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; }
- if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; }
if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; }
- if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; }
- if ($0 == "SSE" && "'$with_sse'" != "1") { next; }
+ if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; }
+ if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; }
+ if ($0 == "USE_SSE" && "'$with_sse'" != "1") { next; }
skip += 1;
diff --git a/projects/generate b/projects/generate
index cfedc8b32d..2ab89e8f1b 100755
--- a/projects/generate
+++ b/projects/generate
@@ -132,14 +132,14 @@ load_main_data() {
if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; }
if ($0 == "AI" && "'$enable_ai'" == "0") { next; }
if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; }
- if ($0 == "BEOS" && "'$os'" != "BEOS") { next; }
+ if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; }
if ($0 == "WIN32" && "'$os'" != "MINGW" &&
"'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; }
if ($0 == "MSVC" && "'$os'" != "MSVC") { next; }
if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; }
if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; }
- if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; }
- if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; }
+ if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; }
+ if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; }
skip += 1;
diff --git a/projects/generate.vbs b/projects/generate.vbs
index aa91bd3164..06e037c4cd 100644
--- a/projects/generate.vbs
+++ b/projects/generate.vbs
@@ -179,8 +179,9 @@ Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files)
line = "MSVC" Or _
line = "DIRECTMUSIC" Or _
line = "AI" Or _
- line = "SSE" Or _
- line = "HAVE_THREAD" _
+ line = "USE_SSE" Or _
+ line = "USE_XAUDIO2" Or _
+ line = "USE_THREADS" _
) Then skip = skip + 1
deep = deep + 1
Case "#"
diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj
index b595f2152a..654b6d1ca8 100644
--- a/projects/openttd_vs140.vcxproj
+++ b/projects/openttd_vs140.vcxproj
@@ -107,7 +107,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -172,7 +172,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -230,7 +230,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -293,7 +293,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -462,6 +462,7 @@
+
@@ -673,6 +674,7 @@
+
@@ -709,6 +711,7 @@
+
@@ -726,6 +729,7 @@
+
@@ -758,6 +762,7 @@
+
diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters
index ebb4cd334c..1c92bdfa55 100644
--- a/projects/openttd_vs140.vcxproj.filters
+++ b/projects/openttd_vs140.vcxproj.filters
@@ -477,6 +477,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1110,6 +1113,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1218,6 +1224,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1269,6 +1278,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1365,6 +1377,9 @@
Core Source Code
+
+ Core Source Code
+
Core Source Code
diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in
index 951f8b6048..17b4356cc2 100644
--- a/projects/openttd_vs140.vcxproj.in
+++ b/projects/openttd_vs140.vcxproj.in
@@ -107,7 +107,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -172,7 +172,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -230,7 +230,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -293,7 +293,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj
index 13692a6252..ca0b604ca9 100644
--- a/projects/openttd_vs141.vcxproj
+++ b/projects/openttd_vs141.vcxproj
@@ -107,7 +107,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -172,7 +172,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -230,7 +230,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -293,7 +293,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -462,6 +462,7 @@
+
@@ -673,6 +674,7 @@
+
@@ -709,6 +711,7 @@
+
@@ -726,6 +729,7 @@
+
@@ -758,6 +762,7 @@
+
diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters
index ebb4cd334c..1c92bdfa55 100644
--- a/projects/openttd_vs141.vcxproj.filters
+++ b/projects/openttd_vs141.vcxproj.filters
@@ -477,6 +477,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1110,6 +1113,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1218,6 +1224,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1269,6 +1278,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1365,6 +1377,9 @@
Core Source Code
+
+ Core Source Code
+
Core Source Code
diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in
index d28f500f1c..0b04ebacce 100644
--- a/projects/openttd_vs141.vcxproj.in
+++ b/projects/openttd_vs141.vcxproj.in
@@ -107,7 +107,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -172,7 +172,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -230,7 +230,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -293,7 +293,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj
index d72574c139..b977a2502d 100644
--- a/projects/openttd_vs142.vcxproj
+++ b/projects/openttd_vs142.vcxproj
@@ -107,7 +107,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -172,7 +172,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -230,7 +230,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -293,7 +293,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -462,6 +462,7 @@
+
@@ -673,6 +674,7 @@
+
@@ -709,6 +711,7 @@
+
@@ -726,6 +729,7 @@
+
@@ -758,6 +762,7 @@
+
diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters
index ebb4cd334c..1c92bdfa55 100644
--- a/projects/openttd_vs142.vcxproj.filters
+++ b/projects/openttd_vs142.vcxproj.filters
@@ -477,6 +477,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1110,6 +1113,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1218,6 +1224,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1269,6 +1278,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1365,6 +1377,9 @@
Core Source Code
+
+ Core Source Code
+
Core Source Code
diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in
index 91689e8bde..37f0d6cf92 100644
--- a/projects/openttd_vs142.vcxproj.in
+++ b/projects/openttd_vs142.vcxproj.in
@@ -107,7 +107,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -172,7 +172,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -230,7 +230,7 @@
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)
+ NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -293,7 +293,7 @@
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)
+ _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
diff --git a/source.list b/source.list
index 67fc58c744..8db7fb9f8b 100644
--- a/source.list
+++ b/source.list
@@ -125,8 +125,8 @@ townname.cpp
vehicle.cpp
vehiclelist.cpp
viewport.cpp
-#if SSE
-viewport_sprite_sorter_sse4.cpp
+#if USE_SSE
+ viewport_sprite_sorter_sse4.cpp
#end
waypoint.cpp
widget.cpp
@@ -150,6 +150,7 @@ autoslope.h
base_media_base.h
base_media_func.h
base_station_base.h
+bitmap_type.h
bmp.h
bridge.h
cargo_type.h
@@ -361,6 +362,7 @@ spritecache.h
station_base.h
station_func.h
station_gui.h
+station_kdtree.h
station_type.h
statusbar_gui.h
stdafx.h
@@ -397,6 +399,7 @@ toolbar_gui.h
town.h
town_gui.h
town_type.h
+town_kdtree.h
townname_func.h
townname_type.h
track_func.h
@@ -414,6 +417,7 @@ vehicle_gui_base.h
vehicle_type.h
vehiclelist.h
viewport_func.h
+viewport_kdtree.h
viewport_sprite_sorter.h
viewport_type.h
water.h
@@ -434,20 +438,19 @@ zoom_type.h
zoning.h
#if WIN32
#else
-music/bemidi.h
-music/cocoa_m.h
-music/extmidi.h
-music/libtimidity.h
-music/fluidsynth.h
-music/os2_m.h
-music/qtmidi.h
-os/macosx/macos.h
-os/macosx/osx_stdafx.h
-os/macosx/splash.h
-os/macosx/string_osx.h
-sound/cocoa_s.h
-video/cocoa/cocoa_keys.h
-video/cocoa/cocoa_v.h
+ music/bemidi.h
+ music/cocoa_m.h
+ music/extmidi.h
+ music/fluidsynth.h
+ music/os2_m.h
+ music/qtmidi.h
+ os/macosx/macos.h
+ os/macosx/osx_stdafx.h
+ os/macosx/splash.h
+ os/macosx/string_osx.h
+ sound/cocoa_s.h
+ video/cocoa/cocoa_keys.h
+ video/cocoa/cocoa_v.h
#end
# Core Source Code
@@ -465,6 +468,7 @@ core/enum_type.hpp
core/geometry_func.cpp
core/geometry_func.hpp
core/geometry_type.hpp
+core/kdtree.hpp
core/math_func.cpp
core/math_func.hpp
core/mem_func.hpp
@@ -968,36 +972,36 @@ script/api/script_window.cpp
# Blitters
#if DEDICATED
#else
-blitter/32bpp_anim.cpp
-blitter/32bpp_anim.hpp
-#if SSE
-blitter/32bpp_anim_sse2.cpp
-blitter/32bpp_anim_sse2.hpp
-blitter/32bpp_anim_sse4.cpp
-blitter/32bpp_anim_sse4.hpp
-#end
-blitter/32bpp_base.cpp
-blitter/32bpp_base.hpp
-blitter/32bpp_optimized.cpp
-blitter/32bpp_optimized.hpp
-blitter/32bpp_simple.cpp
-blitter/32bpp_simple.hpp
-#if SSE
-blitter/32bpp_sse_func.hpp
-blitter/32bpp_sse_type.h
-blitter/32bpp_sse2.cpp
-blitter/32bpp_sse2.hpp
-blitter/32bpp_sse4.cpp
-blitter/32bpp_sse4.hpp
-blitter/32bpp_ssse3.cpp
-blitter/32bpp_ssse3.hpp
-#end
-blitter/8bpp_base.cpp
-blitter/8bpp_base.hpp
-blitter/8bpp_optimized.cpp
-blitter/8bpp_optimized.hpp
-blitter/8bpp_simple.cpp
-blitter/8bpp_simple.hpp
+ blitter/32bpp_anim.cpp
+ blitter/32bpp_anim.hpp
+ #if USE_SSE
+ blitter/32bpp_anim_sse2.cpp
+ blitter/32bpp_anim_sse2.hpp
+ blitter/32bpp_anim_sse4.cpp
+ blitter/32bpp_anim_sse4.hpp
+ #end
+ blitter/32bpp_base.cpp
+ blitter/32bpp_base.hpp
+ blitter/32bpp_optimized.cpp
+ blitter/32bpp_optimized.hpp
+ blitter/32bpp_simple.cpp
+ blitter/32bpp_simple.hpp
+ #if USE_SSE
+ blitter/32bpp_sse_func.hpp
+ blitter/32bpp_sse_type.h
+ blitter/32bpp_sse2.cpp
+ blitter/32bpp_sse2.hpp
+ blitter/32bpp_sse4.cpp
+ blitter/32bpp_sse4.hpp
+ blitter/32bpp_ssse3.cpp
+ blitter/32bpp_ssse3.hpp
+ #end
+ blitter/8bpp_base.cpp
+ blitter/8bpp_base.hpp
+ blitter/8bpp_optimized.cpp
+ blitter/8bpp_optimized.hpp
+ blitter/8bpp_simple.cpp
+ blitter/8bpp_simple.hpp
#end
blitter/base.hpp
blitter/common.hpp
@@ -1140,67 +1144,63 @@ video/dedicated_v.cpp
video/null_v.cpp
#if DEDICATED
#else
-#if ALLEGRO
- video/allegro_v.cpp
-#end
-#if SDL
- video/sdl_v.cpp
-#end
-#if WIN32
- video/win32_v.cpp
-#end
+ #if ALLEGRO
+ video/allegro_v.cpp
+ #end
+ #if SDL
+ video/sdl_v.cpp
+ #end
+ #if WIN32
+ video/win32_v.cpp
+ #end
#end
# Music
#if DEDICATED
#else
-#if ALLEGRO
- music/allegro_m.cpp
-#end
-#if DIRECTMUSIC
- music/dmusic.cpp
-#end
+ #if ALLEGRO
+ music/allegro_m.cpp
+ #end
+ #if DIRECTMUSIC
+ music/dmusic.cpp
+ #end
#end
music/null_m.cpp
music/midifile.cpp
#if DEDICATED
#else
-#if WIN32
- music/win32_m.cpp
-#else
- #if DOS
+ #if WIN32
+ music/win32_m.cpp
#else
- #if MORPHOS
+ #if DOS
#else
music/extmidi.cpp
#end
#end
-#end
-#if BEOS
- music/bemidi.cpp
-#end
-#if LIBTIMIDITY
- music/libtimidity.cpp
-#end
-#if FLUIDSYNTH
- music/fluidsynth.cpp
-#end
+ #if HAIKU
+ music/bemidi.cpp
+ #end
+ #if FLUIDSYNTH
+ music/fluidsynth.cpp
+ #end
#end
# Sound
sound/null_s.cpp
#if DEDICATED
#else
-#if ALLEGRO
- sound/allegro_s.cpp
-#end
-#if SDL
- sound/sdl_s.cpp
-#end
-#if WIN32
- sound/win32_s.cpp
- sound/xaudio2_s.cpp
-#end
+ #if ALLEGRO
+ sound/allegro_s.cpp
+ #end
+ #if SDL
+ sound/sdl_s.cpp
+ #end
+ #if WIN32
+ sound/win32_s.cpp
+ #if USE_XAUDIO2
+ sound/xaudio2_s.cpp
+ #end
+ #end
#end
#if OSX
@@ -1235,18 +1235,14 @@ sound/null_s.cpp
# Threading
thread/thread.h
-#if HAVE_THREAD
+#if USE_THREADS
#if WIN32
thread/thread_win32.cpp
#else
#if OS2
thread/thread_os2.cpp
#else
- #if MORPHOS
- thread/thread_morphos.cpp
- #else
- thread/thread_pthread.cpp
- #end
+ thread/thread_pthread.cpp
#end
#end
#else
diff --git a/src/bitmap_type.h b/src/bitmap_type.h
new file mode 100644
index 0000000000..11a4190938
--- /dev/null
+++ b/src/bitmap_type.h
@@ -0,0 +1,120 @@
+/* $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 .
+ */
+
+/** @file bitmap_type.hpp Bitmap functions. */
+
+#ifndef BITMAP_TYPE_HPP
+#define BITMAP_TYPE_HPP
+
+#include
+
+/** Represents a tile area containing containing individually set tiles.
+ * Each tile must be contained within the preallocated area.
+ * A std::vector is used to mark which tiles are contained.
+ */
+class BitmapTileArea : public TileArea {
+protected:
+ std::vector data;
+
+ inline uint Index(uint x, uint y) const { return y * this->w + x; }
+
+ inline uint Index(TileIndex tile) const { return Index(TileX(tile) - TileX(this->tile), TileY(tile) - TileY(this->tile)); }
+
+public:
+ BitmapTileArea()
+ {
+ this->tile = INVALID_TILE;
+ this->w = 0;
+ this->h = 0;
+ }
+
+ /**
+ * Reset and clear the BitmapTileArea.
+ */
+ void Reset()
+ {
+ this->tile = INVALID_TILE;
+ this->w = 0;
+ this->h = 0;
+ this->data.clear();
+ }
+
+ /**
+ * Initialize the BitmapTileArea with the specified Rect.
+ * @param rect Rect to use.
+ */
+ void Initialize(Rect r)
+ {
+ this->tile = TileXY(r.left, r.top);
+ this->w = r.right - r.left + 1;
+ this->h = r.bottom - r.top + 1;
+ this->data.clear();
+ this->data.resize(Index(w, h));
+ }
+
+ /**
+ * Add a tile as part of the tile area.
+ * @param tile Tile to add.
+ */
+ inline void SetTile(TileIndex tile)
+ {
+ assert(this->Contains(tile));
+ this->data[Index(tile)] = true;
+ }
+
+ /**
+ * Clear a tile from the tile area.
+ * @param tile Tile to clear
+ */
+ inline void ClrTile(TileIndex tile)
+ {
+ assert(this->Contains(tile));
+ this->data[Index(tile)] = false;
+ }
+
+ /**
+ * Test if a tile is part of the tile area.
+ * @param tile Tile to check
+ */
+ inline bool HasTile(TileIndex tile) const
+ {
+ return this->Contains(tile) && this->data[Index(tile)];
+ }
+};
+
+/** Iterator to iterate over all tiles belonging to a bitmaptilearea. */
+class BitmapTileIterator : public OrthogonalTileIterator {
+protected:
+ const BitmapTileArea *bitmap;
+public:
+ /**
+ * Construct the iterator.
+ * @param bitmap BitmapTileArea to iterate.
+ */
+ BitmapTileIterator(const BitmapTileArea &bitmap) : OrthogonalTileIterator(bitmap), bitmap(&bitmap)
+ {
+ if (!this->bitmap->HasTile(TileIndex(this->tile))) ++(*this);
+ }
+
+ inline TileIterator& operator ++()
+ {
+ (*this).OrthogonalTileIterator::operator++();
+ while (this->tile != INVALID_TILE && !this->bitmap->HasTile(TileIndex(this->tile))) {
+ (*this).OrthogonalTileIterator::operator++();
+ }
+ return *this;
+ }
+
+ virtual TileIterator *Clone() const
+ {
+ return new BitmapTileIterator(*this);
+ }
+};
+
+#endif /* BITMAP_TYPE_HPP */
diff --git a/src/cargomonitor.cpp b/src/cargomonitor.cpp
index f43efa6989..80773dc055 100644
--- a/src/cargomonitor.cpp
+++ b/src/cargomonitor.cpp
@@ -150,9 +150,9 @@ void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, Sour
if (iter != _cargo_deliveries.end()) iter->second += amount;
/* Industry delivery. */
- for (const Industry * const *ip = st->industries_near.Begin(); ip != st->industries_near.End(); ip++) {
- if ((*ip)->index != dest) continue;
- CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, (*ip)->index);
+ for (Industry *ind : st->industries_near) {
+ if (ind->index != dest) continue;
+ CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, ind->index);
CargoMonitorMap::iterator iter = _cargo_deliveries.find(num);
if (iter != _cargo_deliveries.end()) iter->second += amount;
}
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index c801fe650a..3a678422f3 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -523,8 +523,6 @@ class DropDownListColourItem : public DropDownListItem {
public:
DropDownListColourItem(int result, bool masked) : DropDownListItem(result, masked) {}
- virtual ~DropDownListColourItem() {}
-
StringID String() const
{
return this->result >= COLOUR_END ? STR_COLOUR_DEFAULT : _colour_dropdown[this->result];
@@ -540,7 +538,7 @@ public:
return true;
}
- void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
+ void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const
{
bool rtl = _current_text_dir == TD_RTL;
int height = bottom - top;
diff --git a/src/core/alloc_type.hpp b/src/core/alloc_type.hpp
index 9c25cc9e3f..5ea812b0e5 100644
--- a/src/core/alloc_type.hpp
+++ b/src/core/alloc_type.hpp
@@ -25,24 +25,8 @@
*/
template
struct SmallStackSafeStackAlloc {
-#if !defined(__NDS__)
/** Storing the data on the stack */
T data[length];
-#else
- /** Storing it on the heap */
- T *data;
- /** The length (in elements) of data in this allocator. */
- size_t len;
-
- /** Allocating the memory */
- SmallStackSafeStackAlloc() : data(MallocT(length)), len(length) {}
-
- /** And freeing when it goes out of scope */
- ~SmallStackSafeStackAlloc()
- {
- free(data);
- }
-#endif
/**
* Gets a pointer to the data stored in this wrapper.
@@ -69,11 +53,7 @@ struct SmallStackSafeStackAlloc {
*/
inline T *EndOf()
{
-#if !defined(__NDS__)
return endof(data);
-#else
- return &data[len];
-#endif
}
};
diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp
index 4058c5c19a..6e5defc647 100644
--- a/src/core/endian_type.hpp
+++ b/src/core/endian_type.hpp
@@ -26,7 +26,7 @@
#define TTD_BIG_ENDIAN 1
/* Windows has always LITTLE_ENDIAN */
-#if defined(_WIN32) || defined(__OS2__)
+#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) || defined(__DJGPP__)
# define TTD_ENDIAN TTD_LITTLE_ENDIAN
#elif defined(OSX)
# include
diff --git a/src/core/geometry_type.hpp b/src/core/geometry_type.hpp
index 8793cbc832..bd40ff71fb 100644
--- a/src/core/geometry_type.hpp
+++ b/src/core/geometry_type.hpp
@@ -12,11 +12,6 @@
#ifndef GEOMETRY_TYPE_HPP
#define GEOMETRY_TYPE_HPP
-#if defined(__AMIGA__)
- /* AmigaOS already has a Point declared */
- #define Point OTTD_Point
-#endif /* __AMIGA__ */
-
#if defined(__APPLE__)
/* Mac OS X already has both Rect and Point declared */
#define Rect OTTD_Rect
diff --git a/src/core/kdtree.hpp b/src/core/kdtree.hpp
new file mode 100644
index 0000000000..154f27fc5b
--- /dev/null
+++ b/src/core/kdtree.hpp
@@ -0,0 +1,473 @@
+/*
+ * 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 .
+ */
+
+/** @file kdtree.hpp K-d tree template specialised for 2-dimensional Manhattan geometry */
+
+#ifndef KDTREE_HPP
+#define KDTREE_HPP
+
+#include "../stdafx.h"
+#include
+#include
+#include
+
+/**
+ * K-dimensional tree, specialised for 2-dimensional space.
+ * This is not intended as a primary storage of data, but as an index into existing data.
+ * Usually the type stored by this tree should be an index into an existing array.
+ *
+ * This implementation assumes Manhattan distances are used.
+ *
+ * Be careful when using this in game code, depending on usage pattern, the tree shape may
+ * end up different for different clients in multiplayer, causing iteration order to differ
+ * and possibly having elements returned in different order. The using code should be designed
+ * to produce the same result regardless of iteration order.
+ *
+ * The element type T must be less-than comparable for FindNearest to work.
+ *
+ * @tparam T Type stored in the tree, should be cheap to copy.
+ * @tparam TxyFunc Functor type to extract coordinate from a T value and dimension index (0 or 1).
+ * @tparam CoordT Type of coordinate values extracted via TxyFunc.
+ * @tparam DistT Type to use for representing distance values.
+ */
+template
+class Kdtree {
+ /** Type of a node in the tree */
+ struct node {
+ T element; ///< Element stored at node
+ size_t left; ///< Index of node to the left, INVALID_NODE if none
+ size_t right; ///< Index of node to the right, INVALID_NODE if none
+
+ node(T element) : element(element), left(INVALID_NODE), right(INVALID_NODE) { }
+ };
+
+ static const size_t INVALID_NODE = SIZE_MAX; ///< Index value indicating no-such-node
+
+ std::vector nodes; ///< Pool of all nodes in the tree
+ std::vector free_list; ///< List of dead indices in the nodes vector
+ size_t root; ///< Index of root node
+ TxyFunc xyfunc; ///< Functor to extract a coordinate from an element
+ size_t unbalanced; ///< Number approximating how unbalanced the tree might be
+
+ /** Create one new node in the tree, return its index in the pool */
+ size_t AddNode(const T &element)
+ {
+ if (this->free_list.size() == 0) {
+ this->nodes.emplace_back(element);
+ return this->nodes.size() - 1;
+ } else {
+ size_t newidx = this->free_list.back();
+ this->free_list.pop_back();
+ this->nodes[newidx] = node{ element };
+ return newidx;
+ }
+ }
+
+ /** Find a coordinate value to split a range of elements at */
+ template
+ CoordT SelectSplitCoord(It begin, It end, int level)
+ {
+ It mid = begin + (end - begin) / 2;
+ std::nth_element(begin, mid, end, [&](T a, T b) { return this->xyfunc(a, level % 2) < this->xyfunc(b, level % 2); });
+ return this->xyfunc(*mid, level % 2);
+ }
+
+ /** Construct a subtree from elements between begin and end iterators, return index of root */
+ template
+ size_t BuildSubtree(It begin, It end, int level)
+ {
+ ptrdiff_t count = end - begin;
+
+ if (count == 0) {
+ return INVALID_NODE;
+ } else if (count == 1) {
+ return this->AddNode(*begin);
+ } else if (count > 1) {
+ CoordT split_coord = SelectSplitCoord(begin, end, level);
+ It split = std::partition(begin, end, [&](T v) { return this->xyfunc(v, level % 2) < split_coord; });
+ size_t newidx = this->AddNode(*split);
+ this->nodes[newidx].left = this->BuildSubtree(begin, split, level + 1);
+ this->nodes[newidx].right = this->BuildSubtree(split + 1, end, level + 1);
+ return newidx;
+ } else {
+ NOT_REACHED();
+ }
+ }
+
+ /** Rebuild the tree with all existing elements, optionally adding or removing one more */
+ bool Rebuild(const T *include_element, const T *exclude_element)
+ {
+ size_t initial_count = this->Count();
+ if (initial_count < 8) return false; // arbitrary value for "not worth rebalancing"
+
+ T root_element = this->nodes[this->root].element;
+ std::vector elements = this->FreeSubtree(this->root);
+ elements.push_back(root_element);
+
+ if (include_element != NULL) {
+ elements.push_back(*include_element);
+ initial_count++;
+ }
+ if (exclude_element != NULL) {
+ typename std::vector::iterator removed = std::remove(elements.begin(), elements.end(), *exclude_element);
+ elements.erase(removed, elements.end());
+ initial_count--;
+ }
+
+ this->Build(elements.begin(), elements.end());
+ assert(initial_count == this->Count());
+ return true;
+ }
+
+ /** Insert one element in the tree somewhere below node_idx */
+ void InsertRecursive(const T &element, size_t node_idx, int level)
+ {
+ /* Dimension index of current level */
+ int dim = level % 2;
+ /* Node reference */
+ node &n = this->nodes[node_idx];
+
+ /* Coordinate of element splitting at this node */
+ CoordT nc = this->xyfunc(n.element, dim);
+ /* Coordinate of the new element */
+ CoordT ec = this->xyfunc(element, dim);
+ /* Which side to insert on */
+ size_t &next = (ec < nc) ? n.left : n.right;
+
+ if (next == INVALID_NODE) {
+ /* New leaf */
+ size_t newidx = this->AddNode(element);
+ /* Vector may have been reallocated at this point, n and next are invalid */
+ node &nn = this->nodes[node_idx];
+ if (ec < nc) nn.left = newidx; else nn.right = newidx;
+ } else {
+ this->InsertRecursive(element, next, level + 1);
+ }
+ }
+
+ /**
+ * Free all children of the given node
+ * @return Collection of elements that were removed from tree.
+ */
+ std::vector FreeSubtree(size_t node_idx)
+ {
+ std::vector subtree_elements;
+ node &n = this->nodes[node_idx];
+
+ /* We'll be appending items to the free_list, get index of our first item */
+ size_t first_free = this->free_list.size();
+ /* Prepare the descent with our children */
+ if (n.left != INVALID_NODE) this->free_list.push_back(n.left);
+ if (n.right != INVALID_NODE) this->free_list.push_back(n.right);
+ n.left = n.right = INVALID_NODE;
+
+ /* Recursively free the nodes being collected */
+ for (size_t i = first_free; i < this->free_list.size(); i++) {
+ node &fn = this->nodes[this->free_list[i]];
+ subtree_elements.push_back(fn.element);
+ if (fn.left != INVALID_NODE) this->free_list.push_back(fn.left);
+ if (fn.right != INVALID_NODE) this->free_list.push_back(fn.right);
+ fn.left = fn.right = INVALID_NODE;
+ }
+
+ return subtree_elements;
+ }
+
+ /**
+ * Find and remove one element from the tree.
+ * @param element The element to search for
+ * @param node_idx Sub-tree to search in
+ * @param level Current depth in the tree
+ * @return New root node index of the sub-tree processed
+ */
+ size_t RemoveRecursive(const T &element, size_t node_idx, int level)
+ {
+ /* Node reference */
+ node &n = this->nodes[node_idx];
+
+ if (n.element == element) {
+ /* Remove this one */
+ this->free_list.push_back(node_idx);
+ if (n.left == INVALID_NODE && n.right == INVALID_NODE) {
+ /* Simple case, leaf, new child node for parent is "none" */
+ return INVALID_NODE;
+ } else {
+ /* Complex case, rebuild the sub-tree */
+ std::vector subtree_elements = this->FreeSubtree(node_idx);
+ return this->BuildSubtree(subtree_elements.begin(), subtree_elements.end(), level);;
+ }
+ } else {
+ /* Search in a sub-tree */
+ /* Dimension index of current level */
+ int dim = level % 2;
+ /* Coordinate of element splitting at this node */
+ CoordT nc = this->xyfunc(n.element, dim);
+ /* Coordinate of the element being removed */
+ CoordT ec = this->xyfunc(element, dim);
+ /* Which side to remove from */
+ size_t next = (ec < nc) ? n.left : n.right;
+ assert(next != INVALID_NODE); // node must exist somewhere and must be found before a leaf is reached
+ /* Descend */
+ size_t new_branch = this->RemoveRecursive(element, next, level + 1);
+ if (new_branch != next) {
+ /* Vector may have been reallocated at this point, n and next are invalid */
+ node &nn = this->nodes[node_idx];
+ if (ec < nc) nn.left = new_branch; else nn.right = new_branch;
+ }
+ return node_idx;
+ }
+ }
+
+
+ DistT ManhattanDistance(const T &element, CoordT x, CoordT y) const
+ {
+ return abs((DistT)this->xyfunc(element, 0) - (DistT)x) + abs((DistT)this->xyfunc(element, 1) - (DistT)y);
+ }
+
+ /** A data element and its distance to a searched-for point */
+ using node_distance = std::pair;
+ /** Ordering function for node_distance objects, elements with equal distance are ordered by less-than comparison */
+ static node_distance SelectNearestNodeDistance(const node_distance &a, const node_distance &b)
+ {
+ if (a.second < b.second) return a;
+ if (b.second < a.second) return b;
+ if (a.first < b.first) return a;
+ if (b.first < a.first) return b;
+ NOT_REACHED(); // a.first == b.first: same element must not be inserted twice
+ }
+ /** Search a sub-tree for the element nearest to a given point */
+ node_distance FindNearestRecursive(CoordT xy[2], size_t node_idx, int level) const
+ {
+ /* Dimension index of current level */
+ int dim = level % 2;
+ /* Node reference */
+ const node &n = this->nodes[node_idx];
+
+ /* Coordinate of element splitting at this node */
+ CoordT c = this->xyfunc(n.element, dim);
+ /* This node's distance to target */
+ DistT thisdist = ManhattanDistance(n.element, xy[0], xy[1]);
+ /* Assume this node is the best choice for now */
+ node_distance best = std::make_pair(n.element, thisdist);
+
+ /* Next node to visit */
+ size_t next = (xy[dim] < c) ? n.left : n.right;
+ if (next != INVALID_NODE) {
+ /* Check if there is a better node down the tree */
+ best = SelectNearestNodeDistance(best, this->FindNearestRecursive(xy, next, level + 1));
+ }
+
+ /* Check if the distance from current best is worse than distance from target to splitting line,
+ * if it is we also need to check the other side of the split. */
+ size_t opposite = (xy[dim] >= c) ? n.left : n.right; // reverse of above
+ if (opposite != INVALID_NODE && best.second >= abs((int)xy[dim] - (int)c)) {
+ node_distance other_candidate = this->FindNearestRecursive(xy, opposite, level + 1);
+ best = SelectNearestNodeDistance(best, other_candidate);
+ }
+
+ return best;
+ }
+
+ template
+ void FindContainedRecursive(CoordT p1[2], CoordT p2[2], size_t node_idx, int level, Outputter outputter) const
+ {
+ /* Dimension index of current level */
+ int dim = level % 2;
+ /* Node reference */
+ const node &n = this->nodes[node_idx];
+
+ /* Coordinate of element splitting at this node */
+ CoordT ec = this->xyfunc(n.element, dim);
+ /* Opposite coordinate of element */
+ CoordT oc = this->xyfunc(n.element, 1 - dim);
+
+ /* Test if this element is within rectangle */
+ if (ec >= p1[dim] && ec < p2[dim] && oc >= p1[1 - dim] && oc < p2[1 - dim]) outputter(n.element);
+
+ /* Recurse left if part of rectangle is left of split */
+ if (p1[dim] < ec && n.left != INVALID_NODE) this->FindContainedRecursive(p1, p2, n.left, level + 1, outputter);
+
+ /* Recurse right if part of rectangle is right of split */
+ if (p2[dim] > ec && n.right != INVALID_NODE) this->FindContainedRecursive(p1, p2, n.right, level + 1, outputter);
+ }
+
+ /** Debugging function, counts number of occurrences of an element regardless of its correct position in the tree */
+ size_t CountValue(const T &element, size_t node_idx) const
+ {
+ if (node_idx == INVALID_NODE) return 0;
+ const node &n = this->nodes[node_idx];
+ return CountValue(element, n.left) + CountValue(element, n.right) + ((n.element == element) ? 1 : 0);
+ }
+
+ void IncrementUnbalanced(size_t amount = 1)
+ {
+ this->unbalanced += amount;
+ }
+
+ /** Check if the entire tree is in need of rebuilding */
+ bool IsUnbalanced()
+ {
+ size_t count = this->Count();
+ if (count < 8) return false;
+ return this->unbalanced > this->Count() / 4;
+ }
+
+ /** Verify that the invariant is true for a sub-tree, assert if not */
+ void CheckInvariant(size_t node_idx, int level, CoordT min_x, CoordT max_x, CoordT min_y, CoordT max_y)
+ {
+ if (node_idx == INVALID_NODE) return;
+
+ const node &n = this->nodes[node_idx];
+ CoordT cx = this->xyfunc(n.element, 0);
+ CoordT cy = this->xyfunc(n.element, 1);
+
+ assert(cx >= min_x);
+ assert(cx < max_x);
+ assert(cy >= min_y);
+ assert(cy < max_y);
+
+ if (level % 2 == 0) {
+ // split in dimension 0 = x
+ CheckInvariant(n.left, level + 1, min_x, cx, min_y, max_y);
+ CheckInvariant(n.right, level + 1, cx, max_x, min_y, max_y);
+ } else {
+ // split in dimension 1 = y
+ CheckInvariant(n.left, level + 1, min_x, max_x, min_y, cy);
+ CheckInvariant(n.right, level + 1, min_x, max_x, cy, max_y);
+ }
+ }
+
+ /** Verify the invariant for the entire tree, does nothing unless KDTREE_DEBUG is defined */
+ void CheckInvariant()
+ {
+#ifdef KDTREE_DEBUG
+ CheckInvariant(this->root, 0, std::numeric_limits::min(), std::numeric_limits::max(), std::numeric_limits::min(), std::numeric_limits::max());
+#endif
+ }
+
+public:
+ /** Construct a new Kdtree with the given xyfunc */
+ Kdtree(TxyFunc xyfunc) : root(INVALID_NODE), xyfunc(xyfunc), unbalanced(0) { }
+
+ /**
+ * Clear and rebuild the tree from a new sequence of elements,
+ * @tparam It Iterator type for element sequence.
+ * @param begin First element in sequence.
+ * @param end One past last element in sequence.
+ */
+ template
+ void Build(It begin, It end)
+ {
+ this->nodes.clear();
+ this->free_list.clear();
+ this->unbalanced = 0;
+ if (begin == end) return;
+ this->nodes.reserve(end - begin);
+
+ this->root = this->BuildSubtree(begin, end, 0);
+ CheckInvariant();
+ }
+
+ /**
+ * Reconstruct the tree with the same elements, letting it be fully balanced.
+ */
+ void Rebuild()
+ {
+ this->Rebuild(NULL, NULL);
+ }
+
+ /**
+ * Insert a single element in the tree.
+ * Repeatedly inserting single elements may cause the tree to become unbalanced.
+ * Undefined behaviour if the element already exists in the tree.
+ */
+ void Insert(const T &element)
+ {
+ if (this->Count() == 0) {
+ this->root = this->AddNode(element);
+ } else {
+ if (!this->IsUnbalanced() || !this->Rebuild(&element, NULL)) {
+ this->InsertRecursive(element, this->root, 0);
+ this->IncrementUnbalanced();
+ }
+ CheckInvariant();
+ }
+ }
+
+ /**
+ * Remove a single element from the tree, if it exists.
+ * Since elements are stored in interior nodes as well as leaf nodes, removing one may
+ * require a larger sub-tree to be re-built. Because of this, worst case run time is
+ * as bad as a full tree rebuild.
+ */
+ void Remove(const T &element)
+ {
+ size_t count = this->Count();
+ if (count == 0) return;
+ if (!this->IsUnbalanced() || !this->Rebuild(NULL, &element)) {
+ /* If the removed element is the root node, this modifies this->root */
+ this->root = this->RemoveRecursive(element, this->root, 0);
+ this->IncrementUnbalanced();
+ }
+ CheckInvariant();
+ }
+
+ /** Get number of elements stored in tree */
+ size_t Count() const
+ {
+ assert(this->free_list.size() <= this->nodes.size());
+ return this->nodes.size() - this->free_list.size();
+ }
+
+ /**
+ * Find the element closest to given coordinate, in Manhattan distance.
+ * For multiple elements with the same distance, the one comparing smaller with
+ * a less-than comparison is chosen.
+ */
+ T FindNearest(CoordT x, CoordT y) const
+ {
+ assert(this->Count() > 0);
+
+ CoordT xy[2] = { x, y };
+ return this->FindNearestRecursive(xy, this->root, 0).first;
+ }
+
+ /**
+ * Find all items contained within the given rectangle.
+ * @note Start coordinates are inclusive, end coordinates are exclusive. x1
+ void FindContained(CoordT x1, CoordT y1, CoordT x2, CoordT y2, Outputter outputter) const
+ {
+ assert(x1 < x2);
+ assert(y1 < y2);
+
+ if (this->Count() == 0) return;
+
+ CoordT p1[2] = { x1, y1 };
+ CoordT p2[2] = { x2, y2 };
+ this->FindContainedRecursive(p1, p2, this->root, 0, outputter);
+ }
+
+ /**
+ * Find all items contained within the given rectangle.
+ * @note End coordinates are exclusive, x1 FindContained(CoordT x1, CoordT y1, CoordT x2, CoordT y2) const
+ {
+ std::vector result;
+ this->FindContained(x1, y1, x2, y2, [&result](T e) {result.push_back(e); });
+ return result;
+ }
+};
+
+#endif
diff --git a/src/crashlog.cpp b/src/crashlog.cpp
index 1d3be5b083..379c8bd9e1 100644
--- a/src/crashlog.cpp
+++ b/src/crashlog.cpp
@@ -56,10 +56,10 @@
# include
# include FT_FREETYPE_H
#endif /* WITH_FREETYPE */
-#if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT)
+#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N)
# include
-#endif /* WITH_ICU_SORT || WITH_ICU_LAYOUT */
-#ifdef WITH_LZMA
+#endif /* WITH_ICU_LX || WITH_ICU_I18N */
+#ifdef WITH_LIBLZMA
# include
#endif
#ifdef WITH_LZO
@@ -264,21 +264,21 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const
buffer += seprintf(buffer, last, " FreeType: %d.%d.%d\n", major, minor, patch);
#endif /* WITH_FREETYPE */
-#if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT)
+#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N)
/* 4 times 0-255, separated by dots (.) and a trailing '\0' */
char buf[4 * 3 + 3 + 1];
UVersionInfo ver;
u_getVersion(ver);
u_versionToString(ver, buf);
-#ifdef WITH_ICU_SORT
+#ifdef WITH_ICU_I18N
buffer += seprintf(buffer, last, " ICU i18n: %s\n", buf);
#endif
-#ifdef WITH_ICU_LAYOUT
+#ifdef WITH_ICU_LX
buffer += seprintf(buffer, last, " ICU lx: %s\n", buf);
#endif
-#endif /* WITH_ICU_SORT || WITH_ICU_LAYOUT */
+#endif /* WITH_ICU_LX || WITH_ICU_I18N */
-#ifdef WITH_LZMA
+#ifdef WITH_LIBLZMA
buffer += seprintf(buffer, last, " LZMA: %s\n", lzma_version_string());
#endif
diff --git a/src/debug.h b/src/debug.h
index b9433bfe99..3121a9bf9f 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -13,6 +13,7 @@
#define DEBUG_H
#include "cpu.h"
+#include
/* Debugging messages policy:
* These should be the severities used for direct DEBUG() calls
@@ -86,21 +87,40 @@ const char *GetDebugString();
*
* TIC() / TOC() creates its own block, so make sure not the mangle
* it with another block.
+ *
+ * The output is counted in CPU cycles, and not comparable accross
+ * machines. Mainly useful for local optimisations.
**/
#define TIC() {\
uint64 _xxx_ = ottd_rdtsc();\
- static uint64 __sum__ = 0;\
- static uint32 __i__ = 0;
+ static uint64 _sum_ = 0;\
+ static uint32 _i_ = 0;
#define TOC(str, count)\
- __sum__ += ottd_rdtsc() - _xxx_;\
- if (++__i__ == count) {\
- DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " [avg: %.1f]", str, __sum__, __sum__/(double)__i__);\
- __i__ = 0;\
- __sum__ = 0;\
+ _sum_ += ottd_rdtsc() - _xxx_;\
+ if (++_i_ == count) {\
+ DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " [avg: %.1f]", str, _sum_, _sum_/(double)_i_);\
+ _i_ = 0;\
+ _sum_ = 0;\
}\
}
+/* Chrono based version. The output is in microseconds. */
+#define TICC() {\
+ auto _start_ = std::chrono::high_resolution_clock::now();\
+ static uint64 _sum_ = 0;\
+ static uint32 _i_ = 0;
+
+#define TOCC(str, _count_)\
+ _sum_ += (std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - _start_)).count();\
+ if (++_i_ == _count_) {\
+ DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " us [avg: %.1f us]", str, _sum_, _sum_/(double)_i_);\
+ _i_ = 0;\
+ _sum_ = 0;\
+ }\
+}
+
+
void ShowInfo(const char *str);
void CDECL ShowInfoF(const char *str, ...) WARN_FORMAT(1, 2);
diff --git a/src/dedicated.cpp b/src/dedicated.cpp
index ce383ee4a5..574cbb0c34 100644
--- a/src/dedicated.cpp
+++ b/src/dedicated.cpp
@@ -16,16 +16,15 @@
char *_log_file = NULL; ///< File to reroute output of a forked OpenTTD to
FILE *_log_fd = NULL; ///< File to reroute output of a forked OpenTTD to
-#if defined(UNIX) && !defined(__MORPHOS__)
+#if defined(UNIX)
#include
#include "safeguards.h"
-#if (defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)) || defined(__HAIKU__)
+#if defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)
/* Solaris has, in certain situation, pid_t defined as long, while in other
* cases it has it defined as int... this handles all cases nicely.
- * Haiku has also defined pid_t as a long.
*/
# define PRINTF_PID_T "%ld"
#else
@@ -71,7 +70,7 @@ void DedicatedFork()
#else
-/** Empty helper function call for NOT(UNIX and not MORPHOS) systems */
+/** Empty helper function call for NOT(UNIX) systems */
void DedicatedFork() {}
#endif /* ENABLE_NETWORK */
diff --git a/src/economy.cpp b/src/economy.cpp
index e9d646cb91..d71e79296e 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -1076,8 +1076,9 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
uint accepted = 0;
- for (uint i = 0; i < st->industries_near.Length() && num_pieces != 0; i++) {
- Industry *ind = st->industries_near[i];
+ for (Industry *ind : st->industries_near) {
+ if (num_pieces == 0) break;
+
if (ind->index == source) continue;
uint cargo_index;
diff --git a/src/fileio.cpp b/src/fileio.cpp
index bedd2d2a97..6f3786190a 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -29,7 +29,7 @@
#include
#ifdef WITH_XDG_BASEDIR
-#include "basedir.h"
+#include
#endif
#include "safeguards.h"
@@ -539,16 +539,6 @@ void FioCreateDirectory(const char *name)
CreateDirectory(OTTD2FS(name), NULL);
#elif defined(OS2) && !defined(__INNOTEK_LIBC__)
mkdir(OTTD2FS(name));
-#elif defined(__MORPHOS__) || defined(__AMIGAOS__)
- char buf[MAX_PATH];
- strecpy(buf, name, lastof(buf));
-
- size_t len = strlen(name) - 1;
- if (buf[len] == '/') {
- buf[len] = '\0'; // Kill pathsep, so mkdir() will not fail
- }
-
- mkdir(OTTD2FS(buf), 0755);
#else
mkdir(OTTD2FS(name), 0755);
#endif
@@ -1066,7 +1056,7 @@ void DetermineBasePaths(const char *exe)
AppendPathSeparator(tmp, lastof(tmp));
_searchpaths[SP_PERSONAL_DIR_XDG] = stredup(tmp);
#endif
-#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) || defined(OS2) || !defined(WITH_PERSONAL_DIR)
+#if defined(DOS) || defined(OS2) || !defined(WITH_PERSONAL_DIR)
_searchpaths[SP_PERSONAL_DIR] = NULL;
#else
#ifdef __HAIKU__
@@ -1109,13 +1099,9 @@ void DetermineBasePaths(const char *exe)
_searchpaths[SP_SHARED_DIR] = NULL;
#endif
-#if defined(__MORPHOS__) || defined(__AMIGA__)
- _searchpaths[SP_WORKING_DIR] = NULL;
-#else
if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0';
AppendPathSeparator(tmp, lastof(tmp));
_searchpaths[SP_WORKING_DIR] = stredup(tmp);
-#endif
_do_scan_working_directory = DoScanWorkingDirectory();
@@ -1135,7 +1121,7 @@ void DetermineBasePaths(const char *exe)
}
}
-#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) || defined(OS2)
+#if !defined(GLOBAL_DATA_DIR)
_searchpaths[SP_INSTALLATION_DIR] = NULL;
#else
seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR);
@@ -1239,7 +1225,7 @@ void DeterminePaths(const char *exe)
}
/* Make the necessary folders */
-#if !defined(__MORPHOS__) && !defined(__AMIGA__) && defined(WITH_PERSONAL_DIR)
+#if defined(WITH_PERSONAL_DIR)
FioCreateDirectory(config_dir);
if (config_dir != _personal_dir) FioCreateDirectory(_personal_dir);
#endif
diff --git a/src/fios.cpp b/src/fios.cpp
index 73365ddc29..aef3a8407d 100644
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -162,7 +162,7 @@ const char *FiosBrowseTo(const FiosItem *item)
break;
case FIOS_TYPE_PARENT: {
- /* Check for possible NULL ptr (not required for UNIXes, but AmigaOS-alikes) */
+ /* Check for possible NULL ptr */
char *s = strrchr(_fios_path, PATHSEPCHAR);
if (s != NULL && s != _fios_path) {
s[0] = '\0'; // Remove last path separator character, so we can go up one level.
@@ -170,11 +170,6 @@ const char *FiosBrowseTo(const FiosItem *item)
s = strrchr(_fios_path, PATHSEPCHAR);
if (s != NULL) {
s[1] = '\0'; // go up a directory
-#if defined(__MORPHOS__) || defined(__AMIGAOS__)
- /* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
- } else if ((s = strrchr(_fios_path, ':')) != NULL) {
- s[1] = '\0';
-#endif
}
break;
}
@@ -215,21 +210,7 @@ static void FiosMakeFilename(char *buf, const char *path, const char *name, cons
/* Don't append the extension if it is already there */
period = strrchr(name, '.');
if (period != NULL && strcasecmp(period, ext) == 0) ext = "";
-#if defined(__MORPHOS__) || defined(__AMIGAOS__)
- if (path != NULL) {
- unsigned char sepchar = path[(strlen(path) - 1)];
-
- if (sepchar != ':' && sepchar != '/') {
- seprintf(buf, last, "%s" PATHSEP "%s%s", path, name, ext);
- } else {
- seprintf(buf, last, "%s%s%s", path, name, ext);
- }
- } else {
- seprintf(buf, last, "%s%s", name, ext);
- }
-#else
seprintf(buf, last, "%s" PATHSEP "%s%s", path, name, ext);
-#endif
}
/**
diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp
index c65ead90e1..3bf490da67 100644
--- a/src/gfx_layout.cpp
+++ b/src/gfx_layout.cpp
@@ -17,9 +17,9 @@
#include "table/control_codes.h"
-#ifdef WITH_ICU_LAYOUT
+#ifdef WITH_ICU_LX
#include
-#endif /* WITH_ICU_LAYOUT */
+#endif /* WITH_ICU_LX */
#ifdef WITH_UNISCRIBE
#include "os/windows/string_uniscribe.h"
@@ -50,7 +50,7 @@ Font::Font(FontSize size, TextColour colour) :
assert(size < FS_END);
}
-#ifdef WITH_ICU_LAYOUT
+#ifdef WITH_ICU_LX
/* Implementation details of LEFontInstance */
le_int32 Font::getUnitsPerEM() const
@@ -226,7 +226,7 @@ public:
return length;
}
};
-#endif /* WITH_ICU_LAYOUT */
+#endif /* WITH_ICU_LX */
/*** Paragraph layout ***/
/**
@@ -674,11 +674,11 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
} else {
/* Line is new, layout it */
FontState old_state = state;
-#if defined(WITH_ICU_LAYOUT) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA)
+#if defined(WITH_ICU_LX) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA)
const char *old_str = str;
#endif
-#ifdef WITH_ICU_LAYOUT
+#ifdef WITH_ICU_LX
GetLayouter(line, str, state);
if (line.layout == NULL) {
static bool warned = false;
diff --git a/src/gfx_layout.h b/src/gfx_layout.h
index 94cbac073a..6f611d6e66 100644
--- a/src/gfx_layout.h
+++ b/src/gfx_layout.h
@@ -21,12 +21,12 @@
#include
#include
-#ifdef WITH_ICU_LAYOUT
+#ifdef WITH_ICU_LX
#include "layout/ParagraphLayout.h"
#define ICU_FONTINSTANCE : public icu::LEFontInstance
-#else /* WITH_ICU_LAYOUT */
+#else /* WITH_ICU_LX */
#define ICU_FONTINSTANCE
-#endif /* WITH_ICU_LAYOUT */
+#endif /* WITH_ICU_LX */
/**
* Text drawing parameters, which can change while drawing a line, but are kept between multiple parts
@@ -89,7 +89,7 @@ public:
Font(FontSize size, TextColour colour);
-#ifdef WITH_ICU_LAYOUT
+#ifdef WITH_ICU_LX
/* Implementation details of LEFontInstance */
le_int32 getUnitsPerEM() const;
@@ -105,7 +105,7 @@ public:
LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
-#endif /* WITH_ICU_LAYOUT */
+#endif /* WITH_ICU_LX */
};
/** Mapping from index to font. */
diff --git a/src/industry.h b/src/industry.h
index af0208b3cc..4822976f24 100644
--- a/src/industry.h
+++ b/src/industry.h
@@ -18,6 +18,7 @@
#include "industry_map.h"
#include "industrytype.h"
#include "tilearea_type.h"
+#include "station_base.h"
typedef Pool IndustryPool;
@@ -41,6 +42,7 @@ enum ProductionLevels {
struct Industry : IndustryPool::PoolItem<&_industry_pool> {
TileArea location; ///< Location of the industry
Town *town; ///< Nearest town
+ Station *neutral_station; ///< Associated neutral station
CargoID produced_cargo[INDUSTRY_NUM_OUTPUTS]; ///< 16 production cargo slots
uint16 produced_cargo_waiting[INDUSTRY_NUM_OUTPUTS]; ///< amount of cargo produced per cargo
uint16 incoming_cargo_waiting[INDUSTRY_NUM_INPUTS]; ///< incoming cargo waiting to be processed
@@ -61,6 +63,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> {
byte was_cargo_delivered; ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry
PartOfSubsidyByte part_of_subsidy; ///< NOSAVE: is this industry a source/destination of a subsidy?
+ StationList stations_near; ///< NOSAVE: List of nearby stations.
OwnerByte founder; ///< Founder of the industry
Date construction_date; ///< Date of the construction of the industry
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 81ebb7c741..c622b78f34 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -183,6 +183,10 @@ Industry::~Industry()
DeleteSubsidyWith(ST_INDUSTRY, this->index);
CargoPacket::InvalidateAllFrom(ST_INDUSTRY, this->index);
+
+ for (Station *st : this->stations_near) {
+ st->industries_near.erase(this);
+ }
}
/**
@@ -192,7 +196,6 @@ Industry::~Industry()
void Industry::PostDestructor(size_t index)
{
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0);
- Station::RecomputeIndustriesNearForAll();
}
@@ -517,8 +520,6 @@ static bool TransportIndustryGoods(TileIndex tile)
const IndustrySpec *indspec = GetIndustrySpec(i->type);
bool moved_cargo = false;
- StationFinder stations(i->location);
-
for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) {
uint cw = min(i->produced_cargo_waiting[j], 255);
if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) {
@@ -529,7 +530,7 @@ static bool TransportIndustryGoods(TileIndex tile)
i->this_month_production[j] += cw;
- uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, stations.GetStations());
+ uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, &i->stations_near);
i->this_month_transported[j] += am;
moved_cargo |= (am != 0);
@@ -1652,6 +1653,37 @@ static void AdvertiseIndustryOpening(const Industry *ind)
Game::NewEvent(new ScriptEventIndustryOpen(ind->index));
}
+/**
+ * Populate an industry's list of nearby stations, and if it accepts any cargo, also
+ * add the industry to each station's nearby industry list.
+ * @param ind Industry
+ */
+static void PopulateStationsNearby(Industry *ind)
+{
+ if (ind->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) {
+ /* Industry has a neutral station. Use it and ignore any other nearby stations. */
+ ind->stations_near.insert(ind->neutral_station);
+ ind->neutral_station->industries_near.clear();
+ ind->neutral_station->industries_near.insert(ind);
+ return;
+ }
+
+ /* Get our list of nearby stations. */
+ FindStationsAroundTiles(ind->location, &ind->stations_near, false);
+
+ /* Test if industry can accept cargo */
+ uint cargo_index;
+ for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) {
+ if (ind->accepts_cargo[cargo_index] != CT_INVALID) break;
+ }
+ if (cargo_index >= lengthof(ind->accepts_cargo)) return;
+
+ /* Cargo is accepted, add industry to nearby stations nearby industry list. */
+ for (Station *st : ind->stations_near) {
+ st->industries_near.insert(ind);
+ }
+}
+
/**
* Put an industry on the map.
* @param i Just allocated poolitem, mostly empty.
@@ -1825,7 +1857,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
}
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0);
- Station::RecomputeIndustriesNearForAll();
+ if (!_generating_world) PopulateStationsNearby(i);
}
/**
@@ -2430,11 +2462,7 @@ static void CanCargoServiceIndustry(CargoID cargo, Industry *ind, bool *c_accept
*/
static int WhoCanServiceIndustry(Industry *ind)
{
- /* Find all stations within reach of the industry */
- StationList stations;
- FindStationsAroundTiles(ind->location, &stations);
-
- if (stations.Length() == 0) return 0; // No stations found at all => nobody services
+ if (ind->stations_near.size() == 0) return 0; // No stations found at all => nobody services
const Vehicle *v;
int result = 0;
@@ -2470,7 +2498,7 @@ static int WhoCanServiceIndustry(Industry *ind)
/* Same cargo produced by industry is dropped here => not serviced by vehicle v */
if ((o->GetUnloadType() & OUFB_UNLOAD) && !c_accepts) break;
- if (stations.Contains(st)) {
+ if (ind->stations_near.find(st) != ind->stations_near.end()) {
if (v->owner == _local_company) return 2; // Company services industry
result = 1; // Competitor services industry
}
@@ -2909,3 +2937,8 @@ extern const TileTypeProcs _tile_type_industry_procs = {
GetFoundation_Industry, // get_foundation_proc
TerraformTile_Industry, // terraform_tile_proc
};
+
+bool IndustryCompare::operator() (const Industry *lhs, const Industry *rhs) const
+{
+ return lhs->index < rhs->index;
+}
diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp
index 3659b033cf..a7a444cc86 100644
--- a/src/intro_gui.cpp
+++ b/src/intro_gui.cpp
@@ -293,14 +293,8 @@ void AskExitGame()
SetDParam(0, STR_OSNAME_WINDOWS);
#elif defined(__APPLE__)
SetDParam(0, STR_OSNAME_OSX);
-#elif defined(__BEOS__)
- SetDParam(0, STR_OSNAME_BEOS);
#elif defined(__HAIKU__)
SetDParam(0, STR_OSNAME_HAIKU);
-#elif defined(__MORPHOS__)
- SetDParam(0, STR_OSNAME_MORPHOS);
-#elif defined(__AMIGA__)
- SetDParam(0, STR_OSNAME_AMIGAOS);
#elif defined(__OS2__)
SetDParam(0, STR_OSNAME_OS2);
#elif defined(SUNOS)
diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt
index 6fe2f57141..d59a2a6c54 100644
--- a/src/lang/afrikaans.txt
+++ b/src/lang/afrikaans.txt
@@ -1771,10 +1771,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt
index 0f0c8787d6..66936ea19a 100644
--- a/src/lang/arabic_egypt.txt
+++ b/src/lang/arabic_egypt.txt
@@ -1443,10 +1443,7 @@ STR_OSNAME_WINDOWS :ويندوز
STR_OSNAME_DOS :دوس
STR_OSNAME_UNIX :يونكس
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :بي او اس
STR_OSNAME_HAIKU :هايكو
-STR_OSNAME_MORPHOS :مورف او اس
-STR_OSNAME_AMIGAOS :اميقا
STR_OSNAME_OS2 :او اس/2
STR_OSNAME_SUNOS :صن
diff --git a/src/lang/basque.txt b/src/lang/basque.txt
index 4d74e8456b..19a29014f2 100644
--- a/src/lang/basque.txt
+++ b/src/lang/basque.txt
@@ -1683,10 +1683,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt
index 2fa43b6c8b..34f05fa8b6 100644
--- a/src/lang/belarusian.txt
+++ b/src/lang/belarusian.txt
@@ -2096,10 +2096,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt
index 087b74da84..78385d620e 100644
--- a/src/lang/brazilian_portuguese.txt
+++ b/src/lang/brazilian_portuguese.txt
@@ -1787,10 +1787,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt
index e07a01c6b2..f9f3f81357 100644
--- a/src/lang/bulgarian.txt
+++ b/src/lang/bulgarian.txt
@@ -1719,10 +1719,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :ДОС
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt
index 5620075c34..57f4476999 100644
--- a/src/lang/catalan.txt
+++ b/src/lang/catalan.txt
@@ -1201,8 +1201,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :El pendent de l
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Pendent de les costes per als vehicles de carretera: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :El pendent de les caselles amb costes per a vehicles de carretera. Els valors alts fan que sigui més difícil pujar els turons.
-STR_CONFIG_SETTING_FORBID_90_DEG :Prohibeix fer girs de 90 graus als trens i vaixells: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Els girs de 90 graus succeeixen quan hi ha una via horitzontal seguida d'una de vertical a la cel·la annexa, provocant que el tren giri 90 graus quan travessi la vora de la cel·la en lloc dels 45 graus usuals en les altres combinacions. Això també s'aplica al gir dels vaixells.
+STR_CONFIG_SETTING_FORBID_90_DEG :Prohibeix fer girs de 90 graus als trens: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Els girs de 90 graus succeeixen quan hi ha una via horitzontal seguida d'una de vertical a la cel·la annexa, provocant que el tren giri 90 graus quan travessi la vora de la cel·la en lloc dels 45 graus usuals en les altres combinacions.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permet ajuntar estacions no annexes: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Aquesta opció permet afegir parts noves a una estació existent sense estar les parts noves en contacte directe amb les existents. Cal clicar Ctrl+Clic mentre es col·loquen les parts noves.
STR_CONFIG_SETTING_INFLATION :Inflació: {STRING}
@@ -1258,8 +1258,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Factor de veloc
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Estableix la velocitat relativa dels avions en comparació amb els altres tipus de vehicles, per reduir la quantitat de guanys de transport dels avions
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Nombre d'accidents d'avió: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Estableix la probabilitat amb què succeeixen els accidents d'avió
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Cap
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Estableix la probabilitat amb què succeeixen els accidents d'avió.{}* Els avions grans sempre tenen un risc d'estavellar-se quan aterren en aeroports petits.
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Cap*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduït
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permet situar parades en carreteres que són propietat de la població: {STRING}
@@ -1584,6 +1584,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Activant aquest
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Prohibit
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permès
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permès, disposició dels carrers personalitzada
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generació de càrrega a les poblacions: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Estableix quanta càrrega es produirà a les cases en funció dels habitants de la població.{}Creixement quadràtic: una població el doble de gran generarà el quàdruple de passatgers.{}Creixement lineal: una població el doble de gran generarà el doble de passatgers.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadràtica (original)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Disposició de nous arbres durant la partida: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla l'aparició aleatòria dels arbres durant una partida. Això podria afectar a les indústries que es basen en el creixement dels arbres, per exemple les serradores
@@ -1798,10 +1802,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt
index 3d4b2e2ef8..d12acb1a05 100644
--- a/src/lang/croatian.txt
+++ b/src/lang/croatian.txt
@@ -1280,6 +1280,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Dopusti uređiv
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Dopusti uređivanje krajolika ispod građevina i pruga bez njihovog uklanjanja
STR_CONFIG_SETTING_CATCHMENT :Dopusti realističnije veličine područja zahvaćanja: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Različiti dohvati za različite vrste stanica i zračnih luka
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stanice kompanije mogu opsluživati industrije sa priključenim neutralnim stanicama: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Kada je uključeno, industrije sa priključenim stanicama (kao naftne platforme) mogu biti opsluživane od strane kompanija koje imaju stanice izgrađene u blizini. Kada je isključeno, ove industrije mogu biti opsluživane samo putem svojih priključenih stanica. Bilo koja stanica u blizini u vlasništvu neke kompanije neće moći opsluživati ove industrije niti će stanice priključene industriji moći opsluživati bilo što osim te industrije.
STR_CONFIG_SETTING_EXTRADYNAMITE :Dopusti rušenje više cesta, mostova i tunela u vlasništvu grada: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Jednostavnije uklanjanje infrastrukture i građevina u vlasništvu grada
STR_CONFIG_SETTING_TRAIN_LENGTH :Najveća dužina vlakova: {STRING}
@@ -1296,8 +1298,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Kosina nagiba p
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Strmina nagiba za cestovna vozila: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Kosina nagiba polja za cestovna vozila. Veće vrijednosti čine nagib težim za penjanje
-STR_CONFIG_SETTING_FORBID_90_DEG :Zabrani vlakovima i brodovima skretanja pod 90 stupnjeva: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Okreti za 90 stupnjeva se događaju kada vodoravni dio pruge odmah nastavlja okomiti dio pruge na sljedećem polju, dakle čineći zaokret vlaka od 90 stupnjeva prelaskom ruba polja umjesto uobičajenih 45 stupnjeva kod drugih kombinacija pruge. Ovo se primjenjuje i na radijus okretanja brodova
+STR_CONFIG_SETTING_FORBID_90_DEG :Zabrani vlakovima skretanja pod 90 stupnjeva: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Okreti za 90 stupnjeva se događaju kada se na vodoravni dio pruge odmah nastavlja okomiti dio pruge na sljedećem polju, dakle čineći zaokret vlaka od 90 stupnjeva prelaskom ruba polja umjesto uobičajenih 45 stupnjeva kod drugih kombinacija pruge.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Dopusti spajanje postaja koje nisu izravno jedna do druge {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Dopusti dodavanje dijelova stanice bez izravnog dodira s postojećim dijelovima. Potrebno pritisnuti Ctrl+klik dok se dodaju novi dijelovi
STR_CONFIG_SETTING_INFLATION :Inflacija: {STRING}
@@ -1353,8 +1355,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Faktor brzine z
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Postavite relativnu brzinu zrakoplova u odnosu na ostale vrste vozila, kako bi se smanjio iznos prihoda od prijevoza zrakoplovom
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Broj padova zrakoplova: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Odredi šansu za događanje zrakoplovne nesreće
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ništa
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Odredi šansu za događanje avionske nesreće.{}* Veliki avioni uvijek riskiraju nesreću kad slijeću na male aerodrome
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ništa*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Smanjeno
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalno
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Dopusti prolazne postaje na cestama u vlasništvu gradova: {STRING}
@@ -1679,6 +1681,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Uklučivanje ov
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Zabranjeno
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dopušteno
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dopušteno, proizvoljan raspored grada
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Proizvodnja tereta u gradu: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Koliko tereta proizvode kuće u gradu u odnosu na ukupno stanovništvo grada.{}Kvadratni rast: Grad dvostruke veličine proizvodi četverostruku količinu putnika.{}Linearni rast: Grad dvostruke veličine proizvodi dvostruku količinu putnika.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratno (originalno)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearno
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Smještaj drveća u igri: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroliraj nasumično pojavljivanje stabala tijekom igre. Ovo može utjecati na industrije koje ovise o rastu stabala, npr. pilane
@@ -1893,10 +1899,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
@@ -3640,7 +3643,7 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}
STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vozil{P o a a}{STRING}
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
-STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanjed iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu
+STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanje iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vozila - desni klik na vozilo za informacije
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Brodovi - desni klik na brod za informacije
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zrakoplov - desni klik na zrakoplov za informacije
diff --git a/src/lang/czech.txt b/src/lang/czech.txt
index a3576b5186..65c2d6a0cf 100644
--- a/src/lang/czech.txt
+++ b/src/lang/czech.txt
@@ -1865,10 +1865,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unixu
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/danish.txt b/src/lang/danish.txt
index d5806dbfe6..39a88623f6 100644
--- a/src/lang/danish.txt
+++ b/src/lang/danish.txt
@@ -1185,6 +1185,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Tillad landskab
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillad landskabsformning under bygninger og spor uden at fjerne dem
STR_CONFIG_SETTING_CATCHMENT :Tillad mere realistisk størrelse på stationernes opland: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Har forskellige størrelser oplande til forskellige typer af stationer og lufthavne
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Selskabers stationer kan betjene industrier med tilknyttede neutrale stationer: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Når aktiveret kan industries med tilknyttede stationer (så som Boreplatforme) også betjenes af andre selskabers stationer i nærheden. Når deaktiveret, kan disse industrier kun betjenes af deres egen tilknyttede station. Andre stationer i nærheden kan ikke betjene dem, og industriens tilknyttede station vil heller ikke betjene andet end industrien.
STR_CONFIG_SETTING_EXTRADYNAMITE :Tillad nedriving af flere by-ejede veje, broer og tunneler: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Gør det nemmere at fjerne by-ejede infrastruktur og bygninger
STR_CONFIG_SETTING_TRAIN_LENGTH :Den maksimale længde af tog: {STRING}
@@ -1201,8 +1203,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Stejlhed af skr
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skrånings stejlhed for vejkøretøjer: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Stejlhed af skrå felter for vej køretøjer. Højere værdier gør det vanskeligere at bestige en bakke
-STR_CONFIG_SETTING_FORBID_90_DEG :Forbyd skibe og tog at dreje 90 grader: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 graders drejninger forekommer når et horisontalt spor er direkte efterfulgt af et lodret spor stykke på det tilstødende felt, hvorved toget drejer 90 grader ved kørsel på feltets kant stedet for de sædvanlige 45 grader for andre spor kombinationer. Dette gælder også for drejeradius af skibe
+STR_CONFIG_SETTING_FORBID_90_DEG :Forbyd tog at dreje 90 grader: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 graders drejninger forekommer når et vandret sporstykke er direkte efterfulgt af et lodret sporstykke på det tilstødende felt. Således drejer toget 90 grader når det passerer feltets kant, i stedet for de sædvanlige 45 grader for andre sporkombinationer.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillad sammenkædning af stationer der ikke ligger direkte op ad hinanden: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Tillad at tilføje dele til en station uden direkte at berøre eksisterende dele. Ctrl+Klik for at sætte nye dele
STR_CONFIG_SETTING_INFLATION :Inflation: {STRING}
@@ -1258,8 +1260,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Fly hastigheds-
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Indstil den relative hastighed af fly i forhold til andre køretøjstyper, for at reducere mængden af indkomst for transport med fly
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Antal flystyrt: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Angiv chancen for et flystyrt sker
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Angiv sandsynligheden for at fly styrter ned.{}* Store fly har altid en risiko for at styrte når de lander på små lufthavne.
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :reduceret
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillad gennemkørsels-stop på veje ejet af en by: {STRING}
@@ -1584,6 +1586,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Hvis denne inds
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbudt
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tilladt
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tilladt, tilpasset by-layout
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Godsgenerering i byer: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hvor meget gods der bliver produceret af byers bygninger, i forhold til byens samlede indbyggertal.{}Kvadratisk vækst: En by med dobbelt indbyggertal genererer fire gange så mange passagerer.{}Lineær vækst: En by med dobbelt indbyggertal genererer dobbelt så mange passagerer.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Placering af træer i spillet: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroller den tilfældige fremkomst af træer i løbet af spillet. Dette vil påvirke industrier der afhænger træers vækst, f.eks. savværker
@@ -1798,10 +1804,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt
index 509417e03e..cd11b70685 100644
--- a/src/lang/dutch.txt
+++ b/src/lang/dutch.txt
@@ -326,10 +326,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Lijst me
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_GOALS_LIST :{BLACK}Doellijst weergeven
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_FUND_CONSTRUCTION_OF_NEW :{BLACK}Bouw van nieuwe industrie financieren of lijst van alle industrieën weergeven
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.
@@ -343,7 +343,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Vliegvel
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Hiermee open je de landschapsbalk om land te verhogen/verlagen, bomen te planten, enz.
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_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, foutopsporing in scripts, schermfoto's, over OpenTTD
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Knoppenbalken wisselen
# Extra tooltips for the scenario editor toolbar
@@ -474,10 +474,10 @@ STR_ABOUT_MENU_LAND_BLOCK_INFO :Landinformatie
STR_ABOUT_MENU_SEPARATOR :
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_SCREENSHOT :Schermfoto
+STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermfoto
+STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermfoto met standaardzoom
+STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermfoto 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
@@ -1163,7 +1163,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Het niveau van
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Bouwsnelheid: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Beperk de hoeveelheid bouwactiviteiten voor computerspeler
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Voertuigstoringen: {STRING}
-STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controle hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan
+STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Bepaal hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidiefactor: {STRING}
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING}
@@ -1201,7 +1201,7 @@ STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsteilheid 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 :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_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.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Samenvoegen van indirect aansluitende stations toestaan: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Staat 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}
@@ -1231,7 +1231,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Indien ingescha
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nieuwe orders zijn standaard 'non-stop': {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaal gesproken zal een voertuig stoppen op elk station dit wordt gepasseerd. Door het inschakelen van deze instelling, zal het rijden door alle station op weg naar de eindbestemming zonder te stoppen. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Individuele opdrachten kan expliciet worden ingesteld op het gedrag
STR_CONFIG_SETTING_STOP_LOCATION :Nieuwe treinorders stoppen de trein standaard {STRING} van het perron
-STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plaats waar een trein standaard stopt bij het platform . De 'bij einde' betekent in de buurt van de ingang, 'midden' betekent in het midden van het platform, en 'einde' betekent ver weg van de ingang. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Individuele opdrachten kunnen expliciet worden ingesteld op het gedrag
+STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plaats waar een trein standaard stopt aan het perron. 'Aan het begin' betekent in de buurt van de ingang, 'In het midden' betekent in het midden van het perron, en 'Aan het einde' betekent ver weg van de ingang. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Je kunt opdrachten expliciet instellen op elk gewenst gedrag.
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :aan het begin
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :in het midden
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :aan het einde
@@ -1258,7 +1258,7 @@ STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel de relatie
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Aantal neerstortende vliegtuigen: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bepaalt de kans op neerstorten van een vliegtuig
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen
+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 :Haltes plaatsen op door stad beheerde wegen toestaan: {STRING}
@@ -1419,7 +1419,7 @@ STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laa
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_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling weer
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
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standaard spoorsoort (bij nieuw of opgeslagen spel): {STRING}
@@ -1445,11 +1445,11 @@ STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidsef
STR_CONFIG_SETTING_SOUND_CLICK :Klikgeluid knoppen: {STRING}
STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piep bij het klikken op knoppen
STR_CONFIG_SETTING_SOUND_DISASTER :Rampen/ongelukken: {STRING}
-STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Speel geluidseffecten van ongelukken en rampen
+STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Speel geluidseffecten af bij ongelukken en rampen
STR_CONFIG_SETTING_SOUND_VEHICLE :Voertuigen: {STRING}
-STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Speel geluidseffecten van voertuigen
+STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Speel geluidseffecten van voertuigen af
STR_CONFIG_SETTING_SOUND_AMBIENT :Omgeving: {STRING}
-STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Speel omgevingsgeluidseffecten van landschap, industrieën en steden
+STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Speel omgevingsgeluidseffecten van landschap, industrieën en steden af
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
@@ -1579,10 +1579,14 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Door deze optie
STR_CONFIG_SETTING_NOISE_LEVEL :Geluidsniveaucontrole door steden voor vliegvelden toestaan: {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Met deze instelling uitgeschakeld kunnen er twee luchthavens in elke stad zijn. Als deze instelling is ingeschakeld, wordt het aantal luchthavens in een stad beperkt door het lawaai tollerantie van de stad, die afhankelijk is van de bevolking en de luchthaven grootte en afstand
STR_CONFIG_SETTING_TOWN_FOUNDING :Steden stichten in spel: {STRING}
-STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Het inschakelen van deze instelling laat spelers toe om nieuwe steden op te richten tijdens het spel.
+STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Wanneer deze instelling is ingeschakeld, kunnen spelers nieuwe steden stichten tijdens het spel.
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verboden
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Toestaan
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Toestaan, eigen wegpatroon
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Genereren van vracht in steden: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hoeveel vracht wordt geproduceerd door huizen in steden, in relatie tot de totale bevolking van de stad.{}Kwadratische groei: een stad die twee keer zo groot is, genereert vier keer zo veel passagiers.{}Lineaire groei: een stad die twee keer zo groot is, genereert twee keer zo veel passagiers.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kwadratisch (origineel)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineair
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen.
@@ -1599,7 +1603,7 @@ STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen
STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s}
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Uitgeschakeld
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_HELPTEXT :Aantal niet-blijvende open vensters voordat 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
STR_CONFIG_SETTING_ZOOM_MIN :Maximaal inzoomniveau: {STRING}
@@ -1797,10 +1801,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
@@ -2895,7 +2896,7 @@ STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Opwaarde
STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Opwaarderen van NewGRF-bestanden waar je een nieuwere versie van hebt geïnstalleerd
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Een lijst van de NewGRF-bestanden die zijn geïnstalleerd.
-STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Stel parameters in
+STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Parameters instellen
STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Parameters weergeven
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Palet omzetten
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Verander het palet van het geselecteerde NewGRF-bestand.{}Gebruik deze mogelijkheid als de afbeeldingen van dit NewGRF-bestand er paars uit zien in het spel
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 496c360241..ea7ece9337 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -1192,6 +1192,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Allow landscapi
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Allow landscaping under buildings and tracks without removing them
STR_CONFIG_SETTING_CATCHMENT :Allow more realistically sized catchment areas: {STRING2}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Have differently sized catchment areas for different types of stations and airports
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Company stations can serve industries with attached neutral stations: {STRING2}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :When enabled, industries with attached stations (such as Oil Rigs) may also be served by company owned stations built nearby. When disabled, these industries may only be served by their attached stations. Any nearby company stations won't be able to serve them, nor will the attached station serve anything else other than the industry
STR_CONFIG_SETTING_CATCHMENT_INCREASE :Increase station catchment radius: {STRING2}
STR_CONFIG_SETTING_CATCHMENT_INCREASE_HELPTEXT :Increase radius of station catchment areas by this many tiles
STR_CONFIG_SETTING_STATION_RATING_CARGO_CLASS_WAIT_TIME :Station rating tolerance to waiting time depends on cargo class: {STRING2}
@@ -1730,6 +1732,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Enabling this s
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbidden
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING2}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear
STR_CONFIG_SETTING_TOWN_CARGO_FACTOR :Town cargo generation factor (less < 0 < more): {STRING2}
STR_CONFIG_SETTING_TOWN_CARGO_FACTOR_HELPTEXT :Passenger, mail, and other town cargo production is scaled by approximately 2^factor (exponential)
@@ -2016,10 +2022,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt
index 0b9108b92f..0b465e2755 100644
--- a/src/lang/english_AU.txt
+++ b/src/lang/english_AU.txt
@@ -1747,10 +1747,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt
index f205f88f65..e8c514f582 100644
--- a/src/lang/english_US.txt
+++ b/src/lang/english_US.txt
@@ -995,7 +995,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Double size
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size
+STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Font size
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface font size to use
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Double size
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad size
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use
@@ -1195,8 +1200,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steepness of a
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Slope steepness for road vehicles: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steepness of a sloped tile for a road vehicle. Higher values make it more difficult to climb a hill
-STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains and ships from making 90° turns: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations. This also applies to the turning radius of ships
+STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains from making 90° turns: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degrees when traversing the tile edge instead of the usual 45 degrees for other track combinations.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Allow joining stations not directly adjacent: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Allow adding parts to a station without directly touching the existing parts. Needs Ctrl+Click while placing the new parts
STR_CONFIG_SETTING_INFLATION :Inflation: {STRING}
@@ -1252,8 +1257,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Plane speed fac
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Set the relative speed of planes compared to other vehicle types, to reduce the amount of income of transport by aircraft
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Number of plane crashes: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Set the chance of an aircraft crash happening
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :None
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Set the chance of a random aircraft crash happening.{}* Large airplanes always have a risk of crashing when landing on small airports
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :None*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduced
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Allow drive-through road stops on town owned roads: {STRING}
@@ -1578,6 +1583,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Enabling this s
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbidden
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In-game placement of trees: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills
@@ -1792,10 +1801,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
@@ -2739,6 +2745,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Graphics
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} World viewports:
STR_FRAMERATE_VIDEO :{BLACK}Video output:
STR_FRAMERATE_SOUND :{BLACK}Sound mixing:
+STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total:
+STR_FRAMERATE_GAMESCRIPT :{BLACK} Game script:
+STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Game loop
@@ -2753,6 +2762,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Graphics render
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :World viewport rendering
STR_FRAMETIME_CAPTION_VIDEO :Video output
STR_FRAMETIME_CAPTION_SOUND :Sound mixing
+STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI scripts total
+STR_FRAMETIME_CAPTION_GAMESCRIPT :Game script
+STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
############ End of leave-in-this-order
diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt
index 2e25af4643..ab9b21c3fa 100644
--- a/src/lang/esperanto.txt
+++ b/src/lang/esperanto.txt
@@ -1430,10 +1430,7 @@ STR_OSNAME_WINDOWS :Vindozo
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unikso
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt
index 94055411c8..fb49599909 100644
--- a/src/lang/estonian.txt
+++ b/src/lang/estonian.txt
@@ -1831,10 +1831,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt
index 821bfc3dcb..0231129321 100644
--- a/src/lang/faroese.txt
+++ b/src/lang/faroese.txt
@@ -1594,10 +1594,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt
index d50fbb78e0..d8f9f713dd 100644
--- a/src/lang/finnish.txt
+++ b/src/lang/finnish.txt
@@ -190,6 +190,7 @@ STR_COLOUR_BROWN :Ruskea
STR_COLOUR_GREY :Harmaa
STR_COLOUR_WHITE :Valkoinen
STR_COLOUR_RANDOM :Satunnainen
+STR_COLOUR_DEFAULT :Oletus
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -238,15 +239,15 @@ STR_BUTTON_LOCATION :{BLACK}Sijainti
STR_BUTTON_RENAME :{BLACK}Nimeä uudelleen
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sulje ikkuna
-STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Ikkunan otsake - siirrä ikkunaa vetämällä tästä
-STR_TOOLTIP_SHADE :{BLACK}Pienennä ikkuna - näytä vain otsikko
+STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Ikkunan otsake – siirrä ikkunaa vetämällä tästä
+STR_TOOLTIP_SHADE :{BLACK}Pienennä ikkuna – näytä vain otsikko
STR_TOOLTIP_DEBUG :{BLACK}Näytä NewGRF-vianmääritystiedot
STR_TOOLTIP_DEFSIZE :{BLACK}Palauta ikkunan oletuskoko. Ctrl+Klik tallentaa nykyisen koon oletukseksi
-STR_TOOLTIP_STICKY :{BLACK}'Sulje kaikki ikkunat' -nappi ei vaikuta tähän ikkunaan. Ctrl+Klik tallentaa tilan oletukseksi
-STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa.
+STR_TOOLTIP_STICKY :{BLACK}Aseta ikkuna säilymään "Sulje kaikki ikkunat" -napista huolimatta. Ctrl+Klik tallentaa tilan oletukseksi
+STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna
-STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys ylös/alas
-STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys vasemmalle/oikealle.
+STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys ylös/alas
+STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys vasemmalle/oikealle
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl valitsee alueen vinottain. Shift vaihtaa tuhoamistilan ja kustannusarvion välillä
# Show engines button
@@ -319,7 +320,7 @@ STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Nopeuta
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Asetukset
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Tallenna peli, hylkää peli, sulje
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Näytä kartta, lisänäkymä ja kylttilista
-STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Näytä kaupunkihakemisto
+STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Näytä kuntahakemisto
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Näytä tukitarjoukset
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Näytä luettelo yhtiön asemista
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Näytä yhtiön taloustiedot
@@ -352,9 +353,9 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Skenaar
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Siirrä aloituspäivää vuodella taaksepäin
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Siirrä aloituspäivää vuodella eteenpäin
STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Aseta aloitusvuosi napsauttamalla
-STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Näytä kartta, kaupunkihakemisto
+STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Näytä kartta, kuntahakemisto
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Maaston luonti
-STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kaupunkien luonti
+STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kuntien luonti
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Teollisuuden luonti
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Tienrakennus
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Shift vaihtaa istutustilan ja kustannusarvion välillä
@@ -374,10 +375,10 @@ STR_SCENEDIT_FILE_MENU_QUIT :Lopeta
############ range for settings menu starts
STR_SETTINGS_MENU_GAME_OPTIONS :Pelin valinnat
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset
-STR_SETTINGS_MENU_SCRIPT_SETTINGS :Tekoälyn/Peliskriptin asetukset
+STR_SETTINGS_MENU_SCRIPT_SETTINGS :Tekoälyn/peliskriptin asetukset
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset
-STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kaupunkien nimet näkyvissä
+STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Asemien nimet näkyvissä
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Reittipisteitten nimet näkyvissä
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Kyltit näkyvissä
@@ -403,8 +404,8 @@ STR_MAP_MENU_LINGRAPH_LEGEND :Rahtivirran sel
STR_MAP_MENU_SIGN_LIST :Kylttilista
############ range for town menu starts
-STR_TOWN_MENU_TOWN_DIRECTORY :Kaupunkihakemisto
-STR_TOWN_MENU_FOUND_TOWN :Perusta kaupunki
+STR_TOWN_MENU_TOWN_DIRECTORY :Kuntahakemisto
+STR_TOWN_MENU_FOUND_TOWN :Perusta kunta
############ range ends here
############ range for subsidies menu starts
@@ -465,13 +466,14 @@ STR_TOOLBAR_SOUND_MUSIC :Ääni/musiikki
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Viimeisin viesti/uutisraportti
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Viestihistoria
+STR_NEWS_MENU_DELETE_ALL_MESSAGES :Poista kaikki viestit
############ range ends here
############ range for about menu starts
STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-alueen tiedot
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsoli
-STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/Peliskriptin virheenjäljitys
+STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/peliskriptin virheenjäljitys
STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Täysin lähennetty kuvakaappaus
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Kuvakaappaus oletuslähennystasolla
@@ -591,11 +593,11 @@ STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näytä
# Graph key window
STR_GRAPH_KEY_CAPTION :{WHITE}Selite yhtiön kuvaajiin
-STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Napsauta tätä vaihtaaksesi yhtiön merkinnän kuvaajassa päälle/pois.
+STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Napsauta tätä vaihtaaksesi yhtiön merkinnän kuvaajassa päälle/pois
# Company league window
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Yhtiökilpataulukko
-STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}'
+STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} ”{STRING}”
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Veturinkuljettaja
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Liikennepäällikkö
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Kuljetusjohtaja
@@ -626,15 +628,15 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Laina:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Yhteensä:
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Liikennevälineiden määrä. Tähän kuuluvat ajoneuvot, junat, laivat ja lentokoneet
-STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Asemien osien määrä. Kaikki osat asemista (esim. rautatieasema, bussipysäkki, lentokenttä) lasketaan, vaikka ne olisivat yhdistettynä yhdeksi asemaksi.
-STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Vähätuottoisimman ajoneuvon tulo (kaikkien yli 2 vuotta vanhojen ajoneuvojen)
+STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Asemien osien määrä. Kaikki osat asemista (esim. rautatieasema, bussipysäkki, lentokenttä) lasketaan, vaikka ne olisivat yhdistettynä yhdeksi asemaksi
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Vähätuottoisimman kulkuneuvon tulo (kaikkien yli 2 vuotta vanhojen kulkuneuvojen)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Viimeisen 12 neljänneksen vähätuottoisimman kuun käteistuoton määrä
STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Viimeisen 12 neljänneksen korkeatuottoisimman kuun käteistuoton määrä
STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Viimeisen neljän neljänneksen kuljetetun rahdin määrä
STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Viimeisen neljänneksen kuljetetun rahdin tyyppi
STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Käteisvarat
STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Tämän yhtiön ottaman lainan määrä
-STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Summa kaikista mahdollisista pisteistä.
+STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Summa kaikista mahdollisista pisteistä
# Music window
STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jazz-jukeboksi
@@ -658,27 +660,29 @@ STR_MUSIC_TRACK :{TINY_FONT}{BLA
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Nimi
STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Sekoita
STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Soittolista
-STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Hyppää edelliseen raitaan.
-STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Hyppää seuraavaan raitaan.
-STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Pysäytä musiikki.
-STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Aloita musiikki.
-STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Aseta liukusäätimillä sopiva äänenvoimakkuus musiikille ja tehosteille.
-STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Valitse 'kaikki raidat'
-STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Valitse 'vanhan tyylin musiikki'
-STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Valitse 'uuden tyylin musiikki'
-STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Valitse 'Ezy Street'.
-STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Valitse 'oma 1' (käyttäjän määritettävissä)
-STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Valitse 'oma 2' (käyttäjän määritettävissä)
+STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Hyppää edelliseen raitaan
+STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Hyppää seuraavaan raitaan
+STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Pysäytä musiikki
+STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Aloita musiikki
+STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Aseta liukusäätimillä sopiva äänenvoimakkuus musiikille ja tehosteille
+STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Valitse ”kaikki raidat”
+STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Valitse ”vanhan tyylin musiikki”
+STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Valitse ”uuden tyylin musiikki”
+STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Valitse ”Ezy Street” -tyylin musiikki
+STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Valitse ”oma 1” (käyttäjän määritettävissä)
+STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Valitse ”oma 2” (käyttäjän määritettävissä)
STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Sekoittaminen päälle/pois
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näytä musiikkiraitojen valintaikkuna
# Playlist window
-STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista - '{STRING}'
+STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista – ”{STRING}”
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Raita
-STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista - '{STRING}'
+STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista – ”{STRING}”
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä
+STR_PLAYLIST_CHANGE_SET :{BLACK}Vaihda kokoelma
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain Oma1 tai Oma2)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Valitse toinen asennettu kokoelma musiikkivalikoimaksesi
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse musiikkiraita lisätäksesi sen nykyiseen soittolistaan (vain Oma1 tai Oma2).
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyseiltä soittolistalta napsauttamalla (ainoastaan Custom1 tai Custom2)
@@ -694,12 +698,12 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnaatti
STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Moguli
STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Vuosisadan pohatta
STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY}
-STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA})
-STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} saavuttaa arvon '{STRING}'!
-STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} yhtiöstä {COMPANY} saavuttaa arvon '{STRING}'!
+STR_HIGHSCORE_STATS :{BIG_FONT}”{STRING}” ({COMMA})
+STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} saavuttaa arvon ”{STRING}”!
+STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} yhtiöstä {COMPANY} saavuttaa arvon ”{STRING}”!
# Smallmap window
-STR_SMALLMAP_CAPTION :{WHITE}Kartta - {STRING}
+STR_SMALLMAP_CAPTION :{WHITE}Kartta – {STRING}
STR_SMALLMAP_TYPE_CONTOURS :Korkeuserot
STR_SMALLMAP_TYPE_VEHICLES :Liikennevälineet
@@ -708,13 +712,13 @@ STR_SMALLMAP_TYPE_ROUTEMAP :Rahtivirta
STR_SMALLMAP_TYPE_ROUTES :Reitit
STR_SMALLMAP_TYPE_VEGETATION :Kasvillisuus
STR_SMALLMAP_TYPE_OWNERS :Omistajat
-STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Näytä korkeuserot kartalla.
-STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Näytä liikennevälineet kartalla.
-STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Näytä teollisuuus kartalla.
+STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Näytä korkeuserot kartalla
+STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Näytä liikennevälineet kartalla
+STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Näytä teollisuuslaitokset kartalla
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Näytä rahtivirta kartalla
-STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näytä kuljetusreitit kartalla.
-STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näytä kasvillisuus kartalla.
-STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näytä maanomistajat kartalla.
+STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näytä kuljetusreitit kartalla
+STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näytä kasvillisuus kartalla
+STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näytä maanomistajat kartalla
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Napsauta teollisuustyyppiä näyttääksesi sen. Ctrl+Klik näyttää valitun tyypin. Ctrl+Klik uudestaan näyttää kaikki teollisuustyypit
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Napsauta yhtiötä näyttääksesi sen omaisuuden. Ctrl+Klik näyttää ainoastaan valitun yhtiön. Ctrl+Klik uudestaan näyttää kaikki yhtiöt
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Napsauta rahtia näyttääksesi tai piilottaaksesi sen. Ctrl+Klik piilottaa kaikki paitsi valitun rahdin. Ctrl+Klik uudelleen palauttaa kaikki rahdit näkyviin
@@ -743,12 +747,12 @@ STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLA
STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Kiviä
STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Vettä
STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Ei omistajaa
-STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Kaupunkeja
+STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Taajamia
STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Teollisuutta
STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Autiomaata
STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Lunta
-STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Kaupunkien nimet kartalla.
+STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Näytä kuntien nimet kartalla
STR_SMALLMAP_CENTER :{BLACK}Keskitä pieni kartta tähän paikkaan
STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM})
STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING}
@@ -766,7 +770,7 @@ STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Älä n
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Näytä kaikki rahdit kartalla
# Status bar messages
-STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näytä viimeisin viesti tai uutisraportti.
+STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näytä viimeisin viesti tai uutisraportti
STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - -
STR_STATUSBAR_PAUSED :{YELLOW}* * TAUKO * *
STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTITALLENNUS
@@ -774,13 +778,13 @@ STR_STATUSBAR_SAVING_GAME :{RED}* * TALL
# News message history
STR_MESSAGE_HISTORY :{WHITE}Viestihistoria
-STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista viimeisimmistä uutisviesteistä.
-STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING}
+STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista viimeisimmistä uutisviesteistä
+STR_MESSAGE_NEWS_FORMAT :{STRING} – {STRING}
STR_NEWS_MESSAGE_CAPTION :{WHITE}Viesti
STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING}
-STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}Ensimmäinen juna saapuu asemalle {STATION}!
+STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}Ensimmäinen juna saapuu asemalle {STATION}!
STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen linja-auton!
STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen kuorma-auton!
STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen raitiovaunun!
@@ -798,7 +802,7 @@ STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLAC
STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Ajoneuvo tuhoutui törmäyksessä UFO:n kanssa!
STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}{TOWN}: Öljynjalostamon räjähdys!
STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}{TOWN}: Tehdas tuhoutunut epäilyttävissä olosuhteissa!
-STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}{TOWN}: 'UFO' laskeutuu!
+STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}{TOWN}: ”UFO” laskeutuu!
STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}{TOWN}: Hiilikaivoksen sortuma aiheuttaa tuhoa!
STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Tulvia!{}Ainakin {COMMA} kadoksissa tai oletettavasti menehtynyt tappavassa tulvassa!
@@ -809,15 +813,15 @@ STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLAC
STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Konkurssi!
STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} on suljettu velkojien toimesta ja kaikki omaisuus on myyty pois!
STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Uusi kuljetusyhtiö perustettu!
-STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} aloittaa rakentamisen kaupungin {TOWN} lähistölle!
+STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} aloittaa rakentamisen kunnassa {TOWN}!
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{1:STRING} on ottanut haltuunsa yhtiön {0:STRING}!
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(pääjohtaja)
-STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahoitti uuden kaupungin, {TOWN}, rakentamista!
-STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uusi kaupunki {TOWN} rakennettu!
+STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahoitti uuden kunnan, {TOWN}, rakentamista!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uusi kunta {TOWN} perustettu!
-STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uusi {STRING} rakennetaan kaupungin {TOWN} lähistölle!
-STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uusi {STRING} istutetaan kaupungin {TOWN} lähistölle!
+STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uusi {STRING} rakennetaan paikkakunnalle {TOWN}!
+STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uusi {STRING} istutetaan paikkakunnalle {TOWN}!
STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING}: alasajo aloitetaan välittömästi!
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}{STRING}: toimitusongelmista johtuen sulkeminen uhkaavan lähellä!
@@ -844,7 +848,7 @@ STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE
# Order review system / warnings
STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Kulkuneuvolla {VEHICLE} on liian vähän käskyjä
STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}Kulkuneuvolla {VEHICLE} on virheellinen käsky
-STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Ajoneuvolla {VEHICLE} on toistuvia käskyjä
+STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Kulkuneuvolla {VEHICLE} on toistuvia käskyjä
STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}Kulkuneuvon {VEHICLE} käskyissä on virheellinen asema
STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}Kulkuneuvon {VEHICLE} käskyissä on lentokenttä, jonka kiitorata on liian lyhyt
@@ -856,19 +860,19 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE
STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}Kulkuneuvon {VEHICLE} tulos viime vuonna oli {CURRENCY_LONG}
STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} ei pääse seuraavaan määränpäähän koska se on toimintasäteen ulkopuolella
-STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Korvauksen epäonnistuminen pysäytti ajoneuvon {VEHICLE}
-STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automaattinen korvaus epäonnistui ajoneuvolle {VEHICLE}{}{STRING}
+STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Korvauksen epäonnistuminen pysäytti kulkuneuvon {VEHICLE}
+STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automaattinen korvaus epäonnistui kulkuneuvolle {VEHICLE}{}{STRING}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Uusi {STRING} on nyt saatavilla!
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
-STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! - {ENGINE}
+STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! – {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING}.
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING} tai {STRING}.
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ottaa nyt vastaan {STRING}.
STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} ottaa nyt vastaan {STRING} ja {STRING}.
-STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Tuki päättynyt:{}{}{STRING} väli {STRING} - {STRING} ei ole enää tuettu
+STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Tukitarjous päättynyt:{}{}{STRING} välillä {STRING} - {STRING} ei voi enää saada tukea
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Tuki vedetty pois:{}{}{STRING} kuljetuspalvelu välille {STRING}-{STRING} ei ole enää tuettu
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Tuki tarjottu:{}{}Ensimmäinen {STRING}kuljetus välillä {STRING} – {STRING} saa vuoden mittaisen tuen paikallisviranomaisilta!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Tuki myönnetty yhtiölle {STRING}!{}{}{STRING}kuljetus välillä {STRING}-{STRING} tuottaa 50{NBSP}% enemmän seuraavan vuoden ajan!
@@ -882,15 +886,15 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Näkymä {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopioi näkymään
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Päänäkymästä tähän
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopioi päänäkymän sijainti tähän näkymään
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Liitä näkymästä
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Liitä sijainti tästä näkymästä päänäkymään
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Vaihda päänäkymää
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Siirrä päänäkymää tämän näkymän sijaintiin
# Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Pelin valinnat
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Rahayksikkö
-STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta.
+STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta
############ start of currency region
STR_GAME_OPTIONS_CURRENCY_GBP :Englannin punta (GBP)
@@ -932,12 +936,12 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikon peso (
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot
-STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Valitse kummalla puolella tietä ajetaan.
+STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Valitse kummalla puolella tietä ajetaan
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vasemmanpuolinen liikenne
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Oikeanpuolinen liikenne
-STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Kaupunkien nimet
-STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Valitse kaupunkien nimien tyyli.
+STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Kuntien nimet
+STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Valitse kuntien nimien tyyli
############ start of townname region
STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Englantilainen
@@ -964,7 +968,7 @@ STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Katalonialainen
############ end of townname region
STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automaattitallennus
-STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Valitse aikaväli automaattisille pelitallennuksille.
+STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Valitse aikaväli automaattisille pelitallennuksille
############ start of autosave dropdown
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Pois
@@ -975,10 +979,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Kerran vuodessa
############ end of autosave dropdown
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Kieli
-STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Valitse käyttöliittymän kieli.
+STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Valitse käyttöliittymän kieli
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Koko näyttö
-STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Valitse tämä pelataksesi kokoruututilassa.
+STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Valitse tämä pelataksesi kokoruututilassa
STR_GAME_OPTIONS_RESOLUTION :{BLACK}Näytön tarkkuus
STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Valitse käytettävä näytön tarkkuus
@@ -991,7 +995,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Tavallinen
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen
+STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Kirjasinkoko
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Valitse käyttöliittymän kirjasinkoko
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaali
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen koko
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen koko
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Perusgrafiikat
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valitse käytettävät perusgrafiikat
@@ -1092,7 +1101,7 @@ STR_CITY_APPROVAL_PERMISSIVE :Salliva
STR_CITY_APPROVAL_TOLERANT :Suvaitseva
STR_CITY_APPROVAL_HOSTILE :Vihamielinen
-STR_WARNING_NO_SUITABLE_AI :{WHITE}Ei soveltuvia tekoälyjä saatavilla...{}Voit ladata tekoälyjä 'Online-Sisältö'-palvelulla
+STR_WARNING_NO_SUITABLE_AI :{WHITE}Ei soveltuvia tekoälyjä saatavilla...{}Voit ladata tekoälyjä ”online-sisältö” -palvelulla
# Settings tree window
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Asetukset
@@ -1153,7 +1162,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Käyttökustann
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Määritä kulkuneuvojen sekä infrastruktuurin ylläpito- ja käyttökustannusten taso
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Rakennusnopeus: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Rajoita tekoälyn rakennustoimien määrää
-STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Ajoneuvojen hajoaminen: {STRING}
+STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Kulkuneuvojen hajoaminen: {STRING}
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Määritä, kuinka usein puutteellisesti huolletut ajoneuvot voivat hajota
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Tukikerroin: {STRING}
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Määritä kuinka paljon tuetuista yhteyksistä maksetaan
@@ -1165,7 +1174,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Estä junien k
STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Mikäli käytössä, junat eivät käänny läpiajettavilla asemilla vaikka kääntymisen jälkeen saatavilla olisi lyhempi reitti
STR_CONFIG_SETTING_DISASTERS :Onnettomuudet: {STRING}
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ottaa käyttöön onnettomuudet jotka saattavat ajoittain estää tai tuhota liikennettä tai infrastruktuuria
-STR_CONFIG_SETTING_CITY_APPROVAL :Kaupunginvaltuuston asenne alueiden uudelleenjärjestelyyn: {STRING}
+STR_CONFIG_SETTING_CITY_APPROVAL :Valtuuston asenne alueiden uudelleenjärjestelyyn: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Valitse, kuinka paljon yhtiöiden aiheuttama melu ja ympäristövahingot vaikuttavat niiden arvioihin sekä tuleviin rakennustoimiin alueella
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Kartan suurin sallittu korkeus: {STRING}
@@ -1175,13 +1184,15 @@ STR_CONFIG_SETTING_AUTOSLOPE :Salli maaston m
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Sallii maaston muokkaamisen rakennusten ja ratojen alta tuhoamatta niitä
STR_CONFIG_SETTING_CATCHMENT :Realistisemman kokoiset vaikutusalueet: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Erityyppisillä asemilla ja lentokentillä on eri kokoiset vaikutusalueet
-STR_CONFIG_SETTING_EXTRADYNAMITE :Kaupungin omistamien teiden, siltojen ja tunneleiden raivaaminen sallittu: {STRING}
-STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Tekee kaupunkien omistaman infrastruktuurin ja rakennusten tuhoamisesta helpompaa
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Yhtiöiden asemat voivat palvella laitoksia, joilla on omat asemat: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Mikäli käytössä, asemilla valmiiksi varustettuja teollisuuslaitoksia (kuten öljylauttoja) voivat palvella myös yhtiöiden lähistölle rakentamat asemat. Mikäli pois käytöstä, tällaisia laitoksia voivat palvella vain niiden omat asemat. Lähistöllä olevat yhtiöiden asemat eivät tällöin voi palvella näitä laitoksia, eivätkä laitosten asemat palvele muita kuin näitä laitoksia
+STR_CONFIG_SETTING_EXTRADYNAMITE :Kunnan omistamien teiden, siltojen ja tunneleiden raivaaminen sallittu: {STRING}
+STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Tekee kuntien omistaman infrastruktuurin ja rakennusten tuhoamisesta helpompaa
STR_CONFIG_SETTING_TRAIN_LENGTH :Junien maksimipituus: {STRING}
STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Määrittää junien suurimman sallitun pituuden
STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} ruutu{P 0 "" a}
STR_CONFIG_SETTING_SMOKE_AMOUNT :Kulkuneuvon savun/kipinöiden määrä: {STRING}
-STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määrittää kuinka paljon savua tai kipinöitä ajoneuvot saavat aikaan
+STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määrittää kuinka paljon savua tai kipinöitä kulkuneuvot saavat aikaan
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Junien kiihdytysmalli: {STRING}
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Valitsee junien käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa junia mäissä tasapuolisesti. "Realistinen" malli hidastaa junia mäissä ja mutkissa junan ominaisuuksista riippuen
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Ajoneuvojen kiihdytysmalli: {STRING}
@@ -1191,8 +1202,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyy
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Mäkien jyrkkyys ajoneuvoille: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys ajoneuvoille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa
-STR_CONFIG_SETTING_FORBID_90_DEG :90 asteen käännökset kielletty junilta ja laivoilta: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 asteen käännöksiä esiintyy kun vaakasuuntaista rataa seuraa pystysuuntainen rata viereisellä ruudulla, tämä vaatii junan kääntymään 90 astetta ruutujen reunalla normaalin 45 asteen sijasta. Tämä asetus vaikuttaa myös laivojen kääntymissäteeseen
+STR_CONFIG_SETTING_FORBID_90_DEG :90 asteen käännökset kielletty junilta: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 asteen käännöksiä esiintyy kun vaakasuuntaista rataa seuraa pystysuuntainen rata viereisellä ruudulla, tämä vaatii junan kääntymään 90 astetta ruutujen reunalla normaalin 45 asteen sijasta.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Salli ei-vierekkäisten asemien yhdistäminen: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Mahdollistaa aseman osien rakentamisen vaikka ne eivät olisi kosketuksissa olemassaoleviin aseman osiin. Vaatii Ctrl-näppäimen painamisen rakennettaessa
STR_CONFIG_SETTING_INFLATION :Inflaatio: {STRING}
@@ -1204,14 +1215,14 @@ STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Suurin sallittu
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Suurin sallittu tunnelin pituus: {STRING}
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Suurin sallittu pituus tunneleita rakennettaessa
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Manuaalinen raakateollisuuden rakentamistapa: {STRING}
-STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Ensisijaisten teollisuuslaitosten rahoitustapa. 'ei mitään' tarkoittaa, että rahoitus ei ole mahdollista, 'koekaivaus' tarkoittaa, että rahoitus on mahdollista mutta teollisuuslaitos rakennetaan sattumanvaraiselle paikalle kartalla tai rakennus epäonnistuu, 'kuten muut tehtaat' tarkoittaa, että rakentaminen onnistuu kuten kaikkien muidenkin teollisuuslaitosten kohdalla
+STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Ensisijaisten teollisuuslaitosten rahoitustapa. ”Ei mitään” tarkoittaa, että rahoitus ei ole mahdollista; ”koekaivaus” tarkoittaa, että rahoitus on mahdollista, mutta teollisuuslaitos rakennetaan sattumanvaraiselle paikalle kartalla tai rakennus epäonnistuu; ”kuten muut tehtaat” tarkoittaa, että rakentaminen onnistuu kuten kaikkien muidenkin teollisuuslaitosten kohdalla
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Ei mikään
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Kuten muut tehtaat
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Koekaivaus
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Teollisuutta ympäröivä tasainen maasto: {STRING}
STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Teollisuuslaitosten ympärillä oleva tasainen maasto. Tämä varmistaa että teollisuuslaitosten ympärillä on tyhjää tilaa esimerkiksi ratojen ja asemien rakantamiseen
-STR_CONFIG_SETTING_MULTIPINDTOWN :Kaupungissa voi olla useita samanlaisia teollisuustyyppejä: {STRING}
-STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaalisti kaupunki ei halua enempää kuin yhden kutakin teollisuuslaitostyyppiä. Tämän asetuksen ollessa käytössä kaupungit sallivat useampien samaa tyyppiä olevien teollisuuslaitosten rakentamisen
+STR_CONFIG_SETTING_MULTIPINDTOWN :Kunnassa voi olla useita samanlaisia teollisuustyyppejä: {STRING}
+STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaalisti kunta ei halua enempää kuin yhden kutakin teollisuuslaitostyyppiä. Tämän asetuksen ollessa käytössä kunnat sallivat useampien samaa tyyppiä olevien teollisuuslaitosten rakentamisen
STR_CONFIG_SETTING_SIGNALSIDE :Näytä opastimet: {STRING}
STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Valitse kummalle puolelle rataa opastimet rakennetaan
STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Vasemmalla puolella
@@ -1219,10 +1230,10 @@ STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Ajokaistan puol
STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Oikealla puolella
STR_CONFIG_SETTING_SHOWFINANCES :Näytä rahoitusikkuna vuoden lopussa: {STRING}
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Mikäli käytössä, rahoitusikkuna näytetään jokaisen vuoden lopussa yhtiön taloudellisen tilanteen seurannan helpottamiseksi
-STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt ovat oletusarvoisesti nonstop-tyyppisiä: {STRING}
-STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin ajoneuvon kohdalla
+STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt ovat oletusarvoisesti ilman välipysähdyksiä: {STRING}
+STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin kulkuneuvon kohdalla
STR_CONFIG_SETTING_STOP_LOCATION :Uudet junien käskyt pysäyttävät junan aseman {STRING}
-STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. 'Alkuun' tarkoittaa että junan viimeinen vaunu pysähtyy laiturin alkuun, 'keskelle' tarkoittaa junan pysähtyvän keskelle laituria, ja 'loppuun' tarkoittaa että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta
+STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. ”Alkuun” tarkoittaa, että junan viimeinen vaunu pysähtyy laiturin alkuun; ”keskelle” tarkoittaa junan pysähtymistä keskelle laituria; ja ”loppuun” tarkoittaa, että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää vain oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alkuun
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskelle
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :loppuun
@@ -1233,13 +1244,13 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Päänäkymäss
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Päänäkymässä
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Kaikissa näkymissä
STR_CONFIG_SETTING_BRIBE :Salli viranomaisten lahjominen: {STRING}
-STR_CONFIG_SETTING_BRIBE_HELPTEXT :Salli yhtiöiden yrittää paikallisviranomaisten lahjontaa. Jos lahjontayritys paljastuu, yhtiö ei voi toimia kaupungissa kuuteen kuukauteen
+STR_CONFIG_SETTING_BRIBE_HELPTEXT :Salli yhtiöiden yrittää paikallisviranomaisten lahjontaa. Jos lahjontayritys paljastuu, yhtiö ei voi toimia kunnassa kuuteen kuukauteen
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Salli kuljetusyksinoikeuksien ostaminen: {STRING}
-STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Jos yhtiö ostaa kuljetusyksinoikeudet kaupunkiin, vastustajien asemat (matkustaja ja rahti) eivät vastaanota rahtia vuoden ajan
+STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Jos yhtiö ostaa kuljetusyksinoikeudet kuntaan, vastustajien matkustaja- ja rahtiasemat eivät vastaanota rahtia vuoden ajan
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Salli rakennusten rahoittaminen: {STRING}
-STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Sallii yhtiöiden rahoittaa uusien talojen rakentamista kaupungeissa
+STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Sallii yhtiöiden rahoittaa uusien talojen rakentamista kunnissa
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Salli paikallisen tieverkon uudelleenrakentamisen rahoitus: {STRING}
-STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Sallii yhtiöiden rahoittaa tieverkon uudelleenrakentamista kaupungeissa tieliikenteen häiritsemiseksi
+STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Sallii yhtiöiden rahoittaa kuntien tieverkon uudelleenrakentamista tieliikenteen häiritsemiseksi
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Salli rahan lähettäminen muille yhtiöille: {STRING}
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Sallii rahan siirtämisen yhtiöiden välillä moninpelitilassa
STR_CONFIG_SETTING_FREIGHT_TRAINS :Rahdin painokerroin raskaiden junien simulointia varten: {STRING}
@@ -1248,40 +1259,42 @@ STR_CONFIG_SETTING_PLANE_SPEED :Lentokoneiden n
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Määritä lentokoneiden suhteellinen nopeus verrattuna toisiin kulkuneuvotyyppeihin
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Lento-onnettomuuksien määrä: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden.{}¹ Isot lentokoneet voivat kuitenkin aina tuhoutua pienille lentokentille laskeutuessaan.
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään¹
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Vähennetty
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Tavallinen
-STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läpiajettavat pysäkit kaupungin teille: {STRING}
-STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Sallii pysäkkien rakentamisen kaupunkien omistamille teille
+STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läpiajettavat pysäkit kuntien omistamille teille: {STRING}
+STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Sallii pysäkkien rakentamisen kuntien omistamille teille
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Salli läpiajettavat pysäkit kilpailijoiden omistamilla teillä: {STRING}
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Salli pysäkkien rakentaminen toisten yhtiöiden omistamille teille
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tätä asetusta ei voi muuttaa, kun kulkuneuvoja on olemassa
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktuurin huoltokustannukset: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Mikäli käytössä, infrastruktuurista aiheutuu huoltokuluja. Kulut kasvavat suhteettomasti verkon kokoon nähden, täten ne vaikuttavat suurempiin yhtiöihin enemmän kuin pieniin
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Yhtiön väri alussa: {STRING}
+STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Valitse yhtiön aloitusväri
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lentokentät eivät vanhene: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mikäli käytössä, kaikki lentokenttätyypit ovat saatavilla ikuisesti niiden julkistamisen jälkeen
STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Varoita, jos kulkuneuvo on eksynyt: {STRING}
STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Lähetä viesti, jos kulkuneuvo ei löydä reittiä määränpäähänsä
-STR_CONFIG_SETTING_ORDER_REVIEW :Tarkista ajoneuvojen pysähdykset: {STRING}
+STR_CONFIG_SETTING_ORDER_REVIEW :Tarkista kulkuneuvojen pysähdykset: {STRING}
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Mikäli käytössä, kulkuneuvojen määräykset tarkistetaan väliajoin ja havaituista ongelmista ilmoitetaan uutisviestillä
STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Ei
STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Kyllä, mutta ei pysäytetyille
-STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kaikille ajoneuvoille
+STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kaikille kulkuneuvoille
STR_CONFIG_SETTING_WARN_INCOME_LESS :Varoita, jos kulkuneuvon tulos on negatiivinen: {STRING}
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Mikäli käytössä, uutisviesti lähetetään, jos kulkuneuvo ei ole tuottanut rahaa viimeisen kalenterivuoden aikana
-STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Ajoneuvot eivät vanhene: {STRING}
+STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kulkuneuvot eivät vanhene: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen
-STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista ajoneuvo automaattisesti, kun se vanhenee: {STRING}
+STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkuneuvo automaattisesti, kun se vanhenee: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti
-STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING} ajoneuvon suurinta sallittua ikää
+STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING}
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Suhteellinen ikä, jonka jälkeen kulkuneuvo voidaan uudistaa automaattisesti
-STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 si tta} ennen
-STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen
-STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä ajoneuvon automaattiseen uudistukseen: {STRING}
+STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 tta tta} ennen kulkuneuvon käyttöiän loppua
+STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen kulkuneuvon käyttöiän lopun
+STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä kulkuneuvon automaattiseen uudistukseen: {STRING}
STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pienin rahamäärä, joka on oltava pankissa ennen kulkuneuvojen automaattista uudistamista
STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoitusten näyttöaika: {STRING}
STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkut (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin
@@ -1290,13 +1303,13 @@ STR_CONFIG_SETTING_HOVER_DELAY :Näytä työkal
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren kursoria pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkymiin painamalla hiiren oikeata painiketta, kun arvoksi on määritetty 0.
STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Pidä hiirtä päällä {COMMA} millisekunti{P 0 "" a}
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Hiiren oikea painike
-STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kaupungin asukasluku kaupungin nimessä: {STRING}
-STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kaupunkien asukasluku kartalla
+STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kunnan asukasluku kunnan nimen yhteydessä: {STRING}
+STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kuntien asukasluvut kartalla
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Viivojen paksuus kuvaajissa: {STRING}
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys kuvaajissa. Ohut viiva on tarkasti luettavissa kun taas paksumpi viiva on helpompi nähdä ja sen värit ovat helpommin havaittavissa
STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING}
-STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kaupunkien kasvuvaatimuksiin. NewGRF:t ja Peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun
+STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun
STR_CONFIG_SETTING_LAND_GENERATOR :Maastogeneraattori: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Alkuperäinen maastonluoja riippuu perusgrafiikkapaketista ja luo ennalta määritettyjä maastonmuotoja. TerraGenesis luo maastoa Perlin-kohinan perusteella ja mahdollistaa asetusten tarkemman määrittelyn
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Alkuperäinen
@@ -1308,7 +1321,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Määritä, kui
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Suurin sallittu etäisyys kartan reunoilta öljynjalostamoille: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Öljynjalostamoja rakennetaan ainoastaan kartan reunoille eli rannikoille saarikartoilla
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumirajan korkeus: {STRING}
-STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuksien luontiin sekä kaupunkien kasvuvaatimuksiin
+STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuslaitosten luontiin sekä kuntien kasvuedellytyksiin
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maaston epätasaisuus: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Vain TerraGenesis) Määritä mäkien tiheys: Tasaisessa maastossa mäet ovat laajempia ja niitä on vähemmän. Epätasaisessa maastossa on enemmän mäkiä, mikä voi saada maaston näyttämään itseään toistavalta
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erittäin tasainen
@@ -1320,7 +1333,7 @@ STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Vain TerraGene
STR_CONFIG_SETTING_RIVER_AMOUNT :Jokien määrä: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Valitse, kuinka paljon jokia luodaan
STR_CONFIG_SETTING_TREE_PLACER :Puiden sijoittelualgoritmi: {STRING}
-STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Määritä puiden jakautuminen kartalla: 'Alkuperäinen' istuttaa puita tasaisesti ympäri karttaa, 'Parannettu' istuttaa niitä ryhmiin
+STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Määritä puiden jakautuminen kartalla: ”Alkuperäinen” istuttaa puita tasaisesti ympäri karttaa, ”parannettu” istuttaa niitä ryhmiin
STR_CONFIG_SETTING_TREE_PLACER_NONE :Ei mitään
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Alkuperäinen
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Parannettu
@@ -1389,9 +1402,9 @@ STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Valitse aikavä
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Käytä {STRING} päivämäärämuotoa tallennettujen pelien niminä
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Pelitallenteiden tiedostonimissä käytettävä päivämäärän muoto
-STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :pitkä (31. joulu 2008)
-STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :lyhyt (31.12.2008)
-STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31)
+STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :pitkää (31. joulu 2008)
+STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :lyhyttä (31.12.2008)
+STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO- (2008-12-31)
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Uusi peli alkaa pysäytettynä: {STRING}
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Mikäli käytössä, peli pysäytetään automaattisesti uuden pelin alussa, mahdollistaen esimerkiksi kartan tarkemman tutkimisen
@@ -1410,9 +1423,9 @@ STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Näytä aikatau
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Näytä saapuminen ja lähtö aikatauluissa: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Näytä odotetut saapumis- ja lähtemisajat aikatauluissa
STR_CONFIG_SETTING_QUICKGOTO :Nopea kulkuneuvon käskyjen luominen: {STRING}
-STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Valitse 'mene'-kursori kun määräysikkuna avataan
+STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Valitse ”mene”-kursori kun määräysikkuna avataan
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Oletusraidetyyppi: {STRING}
-STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Ratatyyppi, joka valitaan pelin aloittamisen jälkeen. 'ensimmäinen saatavilla oleva' valitsee vanhimman ratatyypin, 'viimeisin saatavilla oleva' valitsee uusimman ratatyypin ja 'eniten käytetty' valitsee eniten käytetyn ratatyypin
+STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Ratatyyppi, joka valitaan pelin aloittamisen jälkeen: ”ensimmäinen saatavilla oleva” valitsee vanhimman ratatyypin, ”viimeisin saatavilla oleva” valitsee uusimman ratatyypin, ja ”eniten käytetty” valitsee eniten käytetyn ratatyypin
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Ensimmäinen
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Viimeinen
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Yleisin
@@ -1435,10 +1448,10 @@ STR_CONFIG_SETTING_SOUND_CLICK :Painikkeiden na
STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piippaa painikkeita napsauttaessa
STR_CONFIG_SETTING_SOUND_DISASTER :Vahingot/onnettomuudet: {STRING}
STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Toista vahinkojen ja onnettomuuksien äänet
-STR_CONFIG_SETTING_SOUND_VEHICLE :Ajoneuvot: {STRING}
-STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Toista ajoneuvojen äänet
+STR_CONFIG_SETTING_SOUND_VEHICLE :Kulkuneuvot: {STRING}
+STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Toista kulkuneuvojen äänet
STR_CONFIG_SETTING_SOUND_AMBIENT :Ympäristö: {STRING}
-STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Toista ympäristön, kuten maaston, teollisuuden ja kaupunkien äänet
+STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Toista ympäristön, kuten maaston, teollisuuden ja taajamien äänet
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Poista käytöstä infrastruktuurin rakennus kun sopivia kulkuneuvoja ei ole saatavilla: {STRING}
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Mikäli käytössä, infrastruktuuri on saatavilla vain jos sille on saatavilla kulkuneuvoja, välttäen ajan ja rahan tuhlaamisen infrastruktuuriin, jota ei voida käyttää
@@ -1483,17 +1496,17 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lentokoneiden o
STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määritä oletushuoltoväli uusille lentokoneille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä
STR_CONFIG_SETTING_SERVINT_SHIPS :Laivojen oletushuoltoväli: {STRING}
STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määritä oletushuoltoväli uusille laivoille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä
-STR_CONFIG_SETTING_NOSERVICE :Poista huollot käytöstä kun ajoneuvojen rikkoutuminen on poistettu käytöstä: {STRING}
+STR_CONFIG_SETTING_NOSERVICE :Poista huollot käytöstä kun kulkuneuvojen rikkoutuminen on poistettu käytöstä: {STRING}
STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Mikäli käytössä, kulkuneuvoja ei huolleta, jos ne eivät voi rikkoutua
STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ota käyttöön vaunujen nopeusrajoitukset: {STRING}
STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Mikäli käytössä, vaunujen nopeusrajoitusta käytetään junan maksiminopeuden määrittämisessä
STR_CONFIG_SETTING_DISABLE_ELRAILS :Poista sähköradat käytöstä: {STRING}
STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Mikäli käytössä, sähköveturit toimivat ei-sähköistetyillä radoilla
-STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ensimmäinen ajoneuvo saapuu pelaajan asemalle.: {STRING}
-STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Näytä sanomalehti ensimmäisen ajoneuvon saapuessa pelaajan uudelle asemalle
-STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ensimmäinen ajoneuvo saapuu kilpailijan asemalle.: {STRING}
-STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Näytä sanomalehti ensimmäisen ajoneuvon saapuessa kilpailijan uudelle asemalle
+STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ensimmäinen kulkuneuvo saapuu pelaajan asemalle: {STRING}
+STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Näytä sanomalehti ensimmäisen kulkuneuvon saapuessa pelaajan uudelle asemalle
+STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ensimmäinen kulkuneuvo saapuu kilpailijan asemalle.: {STRING}
+STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Näytä sanomalehti ensimmäisen kulkuneuvon saapuessa kilpailijan uudelle asemalle
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Vahingot/onnettomuudet: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Näytä sanomalehti vahingon tai onnettomuuden sattuessa
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Yhtiön tiedot: {STRING}
@@ -1511,9 +1524,9 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Näytä sanomal
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Muita muutoksia tuotannossa: {STRING}
STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Näytä sanomalehti tuotannon muuttuessa teollisuudessa, jota oma tai kilpaileva yhtiö ei palvele
STR_CONFIG_SETTING_NEWS_ADVICE :Neuvoja / tietoa yhtiön kulkuneuvoista: {STRING}
-STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Näytä viesti ajoneuvon vaatiessa huomiota
-STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Uudet ajoneuvot: {STRING}
-STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Näytä sanomalehti kun saatavilla on uusi ajoneuvotyyppi
+STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Näytä viesti kulkuneuvon vaatiessa huomiota
+STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Uudet kulkuneuvot: {STRING}
+STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Näytä sanomalehti kun saatavilla on uusi kulkuneuvotyyppi
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Rahdin vastaanottamisen muutokset: {STRING}
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Näytä viesti kun asemat muuttavat hyväksymäänsä rahtia
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Tuet: {STRING}
@@ -1537,9 +1550,9 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Osuus tuotosta,
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Opastimien väli vedettäessä: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Määrittää etäisyyden opastimien välillä seuraavaan esteeseen saakka (opastin, risteys) opastimia vedettäessä
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} ruutu{P 0 "" a}
-STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Vedettäessä, pidä opastimien välinen matka vakiona: {STRING}
+STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Pidä opastimien etäisyys vakiona vedettäessä: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Valitse käyttäytyminen vedettäessä opastimia Ctrl-näppäin pohjassa. Mikäli pois käytöstä, opastimia rakennetaan siltojen ja tunnelien ympärille pitkien opastimista vapaiden alueiden välttämiseksi. Mikäli käytössä, opastimia rakennetaan n ruudun välein, tehden vierekkäisten ratojen opastimien kohdistamisesta helpompaa
-STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Rakenna oletuksena siipiopastimia ennen vuotta: {STRING}
+STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Rakenna ensisijaisesti siipiopastimia ennen vuotta: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Valitse vuosi jonka jälkeen käytetään valo-opastimia. Ennen tätä vuotta käytetään siipiopastimia (joilla on sama toiminnallisuus mutta eri ulkonäkö)
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Käytä graafista opastinkäyttöliittymää: {STRING}
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Näytä ikkuna opastintyypin valitsemiseksi ikkunattoman Ctrl-näppäimen avulla tapahtuvan rakentamisen sijaan
@@ -1554,24 +1567,28 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Vain suojastuso
STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Vain reittiopastimet
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kaikki
-STR_CONFIG_SETTING_TOWN_LAYOUT :Uusissa kaupungeissa käytettävä tiekaava: {STRING}
-STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Kaupunkien käyttämä tieverkon kaava
+STR_CONFIG_SETTING_TOWN_LAYOUT :Uusissa kunnissa käytettävä tiekaava: {STRING}
+STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Kuntien käyttämä tieverkon kaava
STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Alkuperäinen
STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Parempia teitä
STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2×2-ruudukko
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3×3-ruudukko
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Satunnainen
-STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Kaupungit saavat rakentaa teitä: {STRING}
-STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Salli kaupunkien rakentaa teitä kasvaessaan. Mikäli pois käytöstä, kaupungit eivät voi rakentaa teitä itse
-STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Kaupungit saavat rakentaa tasoristeyksiä: {STRING}
-STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Mikäli käytössä, kaupungit voivat rakentaa tasoristeyksiä
-STR_CONFIG_SETTING_NOISE_LEVEL :Käytä kaupunkien hallitsemaa melutasoa lentokentille: {STRING}
-STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Mikäli pois käytöstä, kaupungissa voi olla kaksi lentokentää. Mikäli käytössä, lentokenttien määrä kaupungissa rajoittuu kaupungin melurajan mukaan. Meluraja riippuu asukasluvusta ja lentokentän koosta sekä etäisyydestä
-STR_CONFIG_SETTING_TOWN_FOUNDING :Kaupunkien perustaminen pelissä: {STRING}
-STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mikäli käytössä, pelaajat voivat perustaa uusia kaupunkeja
+STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Kunnat saavat rakentaa teitä: {STRING}
+STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Salli kuntien rakentaa teitä kasvaessaan. Mikäli pois käytöstä, kunnat eivät voi rakentaa teitä itse
+STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Kunnat saavat rakentaa tasoristeyksiä: {STRING}
+STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Mikäli käytössä, kunnat voivat rakentaa tasoristeyksiä
+STR_CONFIG_SETTING_NOISE_LEVEL :Käytä kuntien hallitsemaa melutasoa lentokentille: {STRING}
+STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Mikäli pois käytöstä, kunnassa voi olla kaksi lentokentää. Mikäli käytössä, lentokenttien määrä kunnassa rajoittuu kunnan melurajan mukaan. Meluraja riippuu asukasluvusta ja lentokentän koosta sekä etäisyydestä
+STR_CONFIG_SETTING_TOWN_FOUNDING :Kuntien perustaminen pelissä: {STRING}
+STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mikäli käytössä, pelaajat voivat perustaa uusia kuntia
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Kielletty
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Sallittu
-STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Sallittu, oma kaupungin kaava
+STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Sallittu, oma tiekaava
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Taajamarahdin luonti: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Talojen tuottaman rahdin määrä suhteessa kunnan asukaslukuun.{}Neliöllinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia nelinkertaisesti.{}Lineaarinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia kaksinkertaisesti.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Neliöllinen (alkuperäinen)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Puiden istutus pelissä: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat
@@ -1587,8 +1604,8 @@ STR_CONFIG_SETTING_SNAP_RADIUS :Ikkunoiden kiin
STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Ikkunoiden välinen etäisyys ennen niiden kohdistamista toistensa kanssa
STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pikseli{P 0 "" ä}
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Pois käytöstä
-STR_CONFIG_SETTING_SOFT_LIMIT :Suurin sallittu ei-kiinnitettyjen ikkunoiden lukumäärä: {STRING}
-STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Suurin sallittu ei-kiinnitettyjen ikkunoiden määrä ennen vanhojen ikkunoiden sulkemista uusien ikkunoiden tieltä
+STR_CONFIG_SETTING_SOFT_LIMIT :Suurin sallittu ei-säilyvien ikkunoiden lukumäärä: {STRING}
+STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Suurin sallittu ei-säilyvien ikkunoiden määrä ennen vanhojen ikkunoiden sulkemista uusien ikkunoiden tieltä
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :pois käytöstä
STR_CONFIG_SETTING_ZOOM_MIN :Suurin sallittu suurennustaso: {STRING}
@@ -1601,19 +1618,19 @@ STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Tavallinen
STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x
STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x
STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x
-STR_CONFIG_SETTING_TOWN_GROWTH :Kaupunkien kasvunopeus: {STRING}
-STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kaupungin kasvunopeus
+STR_CONFIG_SETTING_TOWN_GROWTH :Kuntien kasvunopeus: {STRING}
+STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kunnan kasvunopeus
STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ei kasvua
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Hidas
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Tavallinen
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea
-STR_CONFIG_SETTING_LARGER_TOWNS :Suurkaupunkien osuus: {STRING}
+STR_CONFIG_SETTING_LARGER_TOWNS :Kaupunkien osuus: {STRING}
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Suurkaupungiksi muuttuvien kaupunkien määrä, eli suurempana aloittavat ja nopeammin kasvavat kaupungit
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING}
-STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Suurkaupunkien keskimääräinen koko suhteessa normaaleihin kaupunkeihin pelin alussa
+STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kaupunkien keskimääräinen koko suhteessa muihin kuntiin pelin alussa
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Päivitä rahdin jakautuminen {STRING}{NBSP}päivän välein
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Yhteyskuvaajan uudelleenlaskujen välinen aika. Kukin uudelleenlasku laskee yhden kuvaajan komponentin. Tämä tarkoittaa sitä, että koko kuvaajaa ei lasketa uudelleen määrittämäsi ajan välein, vaan ainoastaan yksi komponentti. Mitä lyhyemmäksi määrität asetuksen, sitä enemmän prosessoriaikaa komponentin laskemiseen vaaditaan. Mitä pidemmäksi määrität sen, sitä pidempi aika kuluu, kunnes rahdin jakaminen alkaa uusilla reiteillä.
@@ -1675,7 +1692,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Brittiläinen (
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrinen (m)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
-STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Lokalisointi
+STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Mittayksiköt ja päivämäärät
STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafiikka
STR_CONFIG_SETTING_SOUND :{ORANGE}Ääni
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Käyttöliittymä
@@ -1685,7 +1702,7 @@ STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Rakenta
STR_CONFIG_SETTING_ADVISORS :{ORANGE}Uutiset / Neuvonantajat
STR_CONFIG_SETTING_COMPANY :{ORANGE}Yhtiö
STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Talous
-STR_CONFIG_SETTING_VEHICLES :{ORANGE}Ajoneuvot
+STR_CONFIG_SETTING_VEHICLES :{ORANGE}Kulkuneuvot
STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Fysiikka
STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Reititys
STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Rajoitukset
@@ -1693,7 +1710,7 @@ STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Onnetto
STR_CONFIG_SETTING_GENWORLD :{ORANGE}Maailman luominen
STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Ympäristö
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Viranomaiset
-STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Kaupungit
+STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Kunnat
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Laitokset
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Rahdin jakautuminen
STR_CONFIG_SETTING_AI :{ORANGE}Kilpailijat
@@ -1716,21 +1733,21 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Muuta as
# Config errors
STR_CONFIG_ERROR :{WHITE}Virhe asetustiedostossa...
-STR_CONFIG_ERROR_ARRAY :{WHITE}... virhe taulukossa '{STRING}'
-STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... epäkelpo arvo '{STRING}' asetuksella '{STRING}'
-STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... merkkejä asetuksen '{STRING}' perässä
-STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... jätetään huomiotta NewGRF '{STRING}': sama GRF ID kuin '{STRING}'
-STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... jätetään huomiotta epäkelpo NewGRF '{STRING}': {STRING}
+STR_CONFIG_ERROR_ARRAY :{WHITE}... virhe taulukossa ”{STRING}”
+STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... epäkelpo arvo ”{STRING}” asetuksella ”{STRING}”
+STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... ylimääräisiä merkkejä asetuksen ”{STRING}” perässä
+STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... jätetään huomiotta NewGRF ”{STRING}”: sama GRF ID kuin NewGRF:ssä ”{STRING}”
+STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... jätetään huomiotta epäkelpo NewGRF ”{STRING}”: {STRING}
STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :ei löydetty
STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :ei turvallinen staattiseen käyttöön
STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :järjestelmä-NewGRF
STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :epäyhteensopiva tämän OpenTTD-version kanssa
STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :tuntematon
-STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... pakkaustaso '{STRING}' on kelvoton
-STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... pelitallennemuoto '{STRING}' ei ole saatavilla. Palataan muotoon '{STRING}'
-STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ohitetaan perusgrafiikkapaketti '{STRING}': ei löydetty
-STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ohitetaan äänipaketti '{STRING}': ei löydetty
-STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohitetaan musiikkipaketti '{STRING}': ei löydetty
+STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... pakkaustaso ”{STRING}” on kelvoton
+STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... pelitallennemuoto ”{STRING}” ei ole saatavilla. Palataan muotoon ”{STRING}”
+STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ohitetaan perusgrafiikkapaketti ”{STRING}”: ei löydetty
+STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ohitetaan äänipaketti ”{STRING}”: ei löydetty
+STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohitetaan musiikkipaketti ”{STRING}”: ei löydetty
STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Muisti lopussa
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32bpp-grafiikat ja/tai lähennystasoja
@@ -1748,32 +1765,32 @@ STR_INTRO_GAME_OPTIONS :{BLACK}Pelin va
STR_INTRO_HIGHSCORE :{BLACK}Pistetaulukko
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Asetukset
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset
-STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista Online-sisältö
-STR_INTRO_SCRIPT_SETTINGS :{BLACK}Tekoälyn/Peliskriptin asetukset
+STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista online-sisältö
+STR_INTRO_SCRIPT_SETTINGS :{BLACK}Tekoälyn/peliskriptin asetukset
STR_INTRO_QUIT :{BLACK}Sulje
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+Klik ohittaa kartan asetukset
-STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Lataa tallennettu peli.
+STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Lataa tallennettu peli
STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Aloita uusi peli, käyttäen korkeuskarttaa maastona
-STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Aloita uusi peli käyttäen omaa skenaariota.
-STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Luo oma pelimaailma/skenaario.
+STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Aloita uusi peli käyttäen omaa skenaariota
+STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Luo oma pelimaailma/skenaario
STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Aloita moninpeli
-STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Valitse lauhkea maastotyyppi.
-STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Valitse pohjoinen maastotyyppi.
-STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Valitse subtrooppinen maastotyyppi.
-STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Valitse lelumaan maastotyyppi.
+STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Valitse lauhkea maastotyyppi
+STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Valitse pohjoinen maastotyyppi
+STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Valitse subtrooppinen maastotyyppi
+STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Valitse lelumaan maastotyyppi
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Näytä pelin valinnat
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Näytä pistetaulukko
-STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Näyttöasetukset
+STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Näytä asetukset
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Näytä NewGRF-asetukset
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tarkista uutta ja päivitettyä sisältöä ladattavaksi
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Näytä tekoäly/peliskriptiasetukset
-STR_INTRO_TOOLTIP_QUIT :{BLACK}Sulje OpenTTD.
+STR_INTRO_TOOLTIP_QUIT :{BLACK}Lopeta OpenTTD
STR_INTRO_BASESET :{BLACK}Valitusta perusgrafiikkapaketista puuttuu {NUM} sprite{P "" ä}. Tarkista, onko sille päivityksiä.
-STR_INTRO_TRANSLATION :{BLACK}Tästä käännöksestä puuttuu {NUM} merkkijono{P "" a}. Auta tekemään OpenTTD:stä parempi rekisteröitymällä kääntäjäksi. Lisätietoja tiedostossa readme.txt.
+STR_INTRO_TRANSLATION :{BLACK}Tästä käännöksestä puuttuu {NUM} merkkijono{P "" a}. Auta tekemään OpenTTD:stä parempi ryhtymällä kääntäjäksi. Lisätietoja readme.txt:ssä.
# Quit window
STR_QUIT_CAPTION :{WHITE}Sulje
@@ -1786,10 +1803,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
@@ -1800,7 +1814,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Lopetet
# Cheat window
STR_CHEATS :{WHITE}Huijaukset
-STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin.
+STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin
STR_CHEATS_WARNING :{BLACK}Varoitus! Olet juuri pettämässä kanssakilpailijoitasi. Pidä mielessä, että tällainen häväistys pidetään mielessä ikuisuuden ajan
STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hallinnassa oleva yhtiö: {ORANGE}{COMMA}
@@ -1821,7 +1835,7 @@ STR_CHEAT_SETUP_PROD :{LTBLUE}Salli t
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
+STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junien väriteemat
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näytä tieajoneuvojen väriteemat
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näytä laivojen väriteemat
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näytä lentokoneiden väriteemat
@@ -1855,16 +1869,16 @@ STR_LIVERY_FREIGHT_TRAM :Raitiotavaravau
# Face selection window
STR_FACE_CAPTION :{WHITE}Kasvojen valinta
-STR_FACE_CANCEL_TOOLTIP :{BLACK}Peruuta uusien kasvojen valinta.
-STR_FACE_OK_TOOLTIP :{BLACK}Hyväksy uusien kasvojen valinta.
+STR_FACE_CANCEL_TOOLTIP :{BLACK}Peruuta uusien kasvojen valinta
+STR_FACE_OK_TOOLTIP :{BLACK}Hyväksy uusien kasvojen valinta
STR_FACE_RANDOM :{BLACK}Satunnainen
STR_FACE_MALE_BUTTON :{BLACK}Mies
-STR_FACE_MALE_TOOLTIP :{BLACK}Valitse miehen kasvot.
+STR_FACE_MALE_TOOLTIP :{BLACK}Valitse miehen kasvot
STR_FACE_FEMALE_BUTTON :{BLACK}Nainen
-STR_FACE_FEMALE_TOOLTIP :{BLACK}Valitse naisen kasvot.
+STR_FACE_FEMALE_TOOLTIP :{BLACK}Valitse naisen kasvot
STR_FACE_NEW_FACE_BUTTON :{BLACK}Uudet kasvot
-STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Luo satunnaiset kasvot.
+STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Luo satunnaiset kasvot
STR_FACE_ADVANCED :{BLACK}Monipuolinen
STR_FACE_ADVANCED_TOOLTIP :{BLACK}Monipuolisempi kasvojenvalitsin
STR_FACE_SIMPLE :{BLACK}Yksinkertainen
@@ -1876,7 +1890,7 @@ STR_FACE_FACECODE :{BLACK}Pelaajan
STR_FACE_FACECODE_TOOLTIP :{BLACK}Tarkastele ja/tai aseta johtajan kasvojen numero
STR_FACE_FACECODE_CAPTION :{WHITE}Tarkastele ja/tai aseta johtajan kasvojen numero
STR_FACE_FACECODE_SET :{WHITE}Uusi kasvojen numerokoodi on asetettu
-STR_FACE_FACECODE_ERR :{WHITE}Johtajan kasvojen numeroa ei voitu asettaa - arvon on oltaa numeerinen arvo väliltä 0-4,294,967,295!
+STR_FACE_FACECODE_ERR :{WHITE}Johtajan kasvojen numeroa ei voitu asettaa – arvon on oltava numeerinen arvo väliltä 0–4 294 967 295!
STR_FACE_SAVE :{BLACK}Tallenna
STR_FACE_SAVE_TOOLTIP :{BLACK}Tallenna suosikkikasvot
STR_FACE_SAVE_DONE :{WHITE}Nämä kasvot tallennetaan suosikkikasvoiksesi OpenTTD:n kokoonpanotiedostoon.
@@ -1918,11 +1932,11 @@ STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Valitse
STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei
STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Kyllä
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi
-STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla.
+STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla
STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nimi
-STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Pelin nimi.
-STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
+STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Pelin nimi
+STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} – {COMMA}/{COMMA}
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Pelaajia
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Pelaajia online / pelaajia maks.{}Yhtiöitä online / yhtiöitä maks.
STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA}
@@ -1939,7 +1953,7 @@ STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Edelline
STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Valitse edellinen palvelin, jolla pelasit
STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}PELITIEDOT
-STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Pelaajat: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Pelaajat: {WHITE}{COMMA} / {COMMA} – {COMMA} / {COMMA}
STR_NETWORK_SERVER_LIST_LANGUAGE :{SILVER}Kieli: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Maasto: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Kartan koko: {WHITE}{COMMA}x{COMMA}
@@ -1955,14 +1969,14 @@ STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF-
STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liity peliin
STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Päivitä
-STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot.
+STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot
STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Etsi palvelin
-STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Etsi palvelin verkosta.
+STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Etsi palvelin verkosta
STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Lisää palvelin
STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lisää palvelin listaan, joka käydään läpi aina uusia pelejä haettaessa
STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Käynnistä palvelin
-STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Käynnistä oma palvelin.
+STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Käynnistä oma palvelin
STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Kirjoita nimesi
STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Syötä palvelimen IP-osoite
@@ -1971,15 +1985,15 @@ STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Syötä
STR_NETWORK_START_SERVER_CAPTION :{WHITE}Aloita uusi peli
STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Pelin nimi:
-STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi näytetään muille pelaajille moninpelivalikossa.
+STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi näytetään muille pelaajille moninpelivalikossa
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana
-STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla.
+STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla
STR_NETWORK_START_SERVER_UNADVERTISED :Ei
STR_NETWORK_START_SERVER_ADVERTISED :Kyllä
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä:
-STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia.
+STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia
STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} yhtiö{P "" tä}
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Yhtiöiden enimmäismäärä:
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Rajoita yhtiöiden määrää palvelimella
@@ -1987,7 +2001,7 @@ STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} ka
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Katsojien enimmäismäärä:
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Rajoita katsojien määrää palvelimella
STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Puhuttu kieli:
-STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset pelaajat tietävät tästä, mitä kieltä palvelimella puhutaan.
+STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset pelaajat tietävät tästä, mitä kieltä palvelimella puhutaan
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Syötä nimi verkkopelille
@@ -2035,7 +2049,7 @@ STR_NETWORK_LANG_LATVIAN :latvia
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Moninpeliaula
STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Valmistautuu yhdistämään: {ORANGE}{STRING}
-STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista pelissä olevista yhtiöistä. Voit joko liittyä yhteen tai perustaa omasi.
+STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista pelissä olevista yhtiöistä. Voit joko liittyä yhteen tai perustaa omasi
STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}YHTIÖN TIEDOT
STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Yhtiön nimi: {WHITE}{STRING}
@@ -2050,11 +2064,11 @@ STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Asemat:
STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Pelaajat: {WHITE}{STRING}
STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Uusi yhtiö
-STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö.
+STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Seuraa peliä
-STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Seuraa pelin kulkua.
+STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Seuraa pelin kulkua
STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Liity yhtiöön
-STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auta tämän yhtiön hallinnassa.
+STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auta tämän yhtiön hallinnassa
# Network connecting window
STR_NETWORK_CONNECTING_CAPTION :{WHITE}Yhdistetään...
@@ -2078,6 +2092,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Pura yht
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin on suojattu. Anna salasana
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana
+STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Asiakaslista
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Asiakaslista
@@ -2301,8 +2316,8 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Vaikutusalueen korostus
STR_STATION_BUILD_COVERAGE_OFF :{BLACK}pois
STR_STATION_BUILD_COVERAGE_ON :{BLACK}päällä
-STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä korosta ehdotetun tontin vaikutusaluetta.
-STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue.
+STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä korosta ehdotetun tontin vaikutusaluetta
+STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tuottaa: {GOLD}{CARGO_LIST}
@@ -2327,7 +2342,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastimia. Ctrl vaihtaa joko siipiopastimet tai valo-opastimet{}Vetäminen rakentaa opastimia suoralle rautatielle. Ctrl rakentaa opastimia seuraavaan risteykseen saakka{}Ctrl+Click avaa opastimenvalintaikkunan. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä
-STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet.
+STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muunna/päivitä raidetyyppi. Shift vaihtaa muuntotilan ja kustannusarvion välillä
STR_RAIL_NAME_RAILROAD :Rautatie
@@ -2337,7 +2352,7 @@ STR_RAIL_NAME_MAGLEV :Maglev-rata
# Rail depot construction window
STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Veturitallin suunta
-STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Valitse veturitallin suunta.
+STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Valitse veturitallin suunta
# Rail waypoint construction window
STR_WAYPOINT_CAPTION :{WHITE}Reittipiste
@@ -2346,13 +2361,13 @@ STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Valitse
# Rail station construction window
STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Rautatieaseman valinta
STR_STATION_BUILD_ORIENTATION :{BLACK}Suunta
-STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Valitse rautatieaseman suunta.
+STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Valitse rautatieaseman suunta
STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Raiteiden lukumäärä
-STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Valitse asemalaiturien määrä rautatieasemalle.
+STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Valitse asemalaiturien määrä rautatieasemalle
STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Asemalaiturin pituus
-STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Valitse rautatieaseman pituus.
+STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Valitse rautatieaseman pituus
STR_STATION_BUILD_DRAG_DROP :{BLACK}Vedä ja pudota
-STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Rakenna asema vetämällä ja pudottamalla.
+STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Rakenna asema vetämällä ja pudottamalla
STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Valitse asemaluokka
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Valitse asematyyppi
@@ -2382,7 +2397,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenna
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Valitse rautatiesilta
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Valitse maantiesilta
-STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sillan valinta - napsauta valittua siltaa rakentaaksesi sen.
+STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sillan valinta – napsauta valittua siltaa rakentaaksesi sen
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Riippusilta, terästä
@@ -2418,15 +2433,15 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Vaihda r
# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Autovarikon suunta
-STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse autovarikon suunta.
+STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse autovarikon suunta
STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Raitiotievarikon suunta
STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse raitiotievarikon suunta
# Road vehicle station construction window
STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Linja-autoaseman suunta
-STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Valitse linja-autoaseman suunta.
+STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Valitse linja-autoaseman suunta
STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Lastauslaiturin suunta
-STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Valitse lastauslaiturin suunta.
+STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Valitse lastauslaiturin suunta
STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Aseman suunta
STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Valitse aseman suunta
STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Rahtiaseman suunta
@@ -2441,7 +2456,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Rakenna
STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Rakenna satama. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Sijoita poiju, jota voi käyttää reittipisteenä. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Rakenna akvedukti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
-STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos Ctrl on painettuna merenpinnalla. Tällöin meri laajenee ympäristöön.
+STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos Ctrl on painettuna merenpinnalla. Tällöin meri laajenee ympäristöön
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Sijoita jokia
# Ship depot construction window
@@ -2457,7 +2472,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Rakenna
# Airport construction window
STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Lentokentän valinta
-STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Valitse lentokentän koko ja tyyppi.
+STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Valitse lentokentän koko ja tyyppi
STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lentokentän luokka
STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Kaava {NUM}
@@ -2505,10 +2520,10 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta p
# Land generation window (SE)
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Maanrakennus
-STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sijoita kallioisia alueita maastoon.
+STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sijoita kallioisia alueita maastoon
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Määrittele aavikon alue.{}Pidä Ctrl-nappia pohjassa poistaaksesi sitä
-STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Suurenna madallettavan/korotettavan maa-alueen kokoa.
-STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Pienennä madallettavan/korotettavan maa-alueen kokoa.
+STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Suurenna madallettavan/korotettavan maa-alueen kokoa
+STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Pienennä madallettavan/korotettavan maa-alueen kokoa
STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Luo satunnainen maasto
STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Luo uusi skenaario
STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Nollaa maasto
@@ -2518,31 +2533,31 @@ STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Nollaa m
STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Haluatko varmasti poistaa kaikki yhtiön omistamat tontit?
# Town generation window (SE)
-STR_FOUND_TOWN_CAPTION :{WHITE}Luo kaupunkeja
-STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kaupunki
+STR_FOUND_TOWN_CAPTION :{WHITE}Luo kuntia
+STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kunta
STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kaupunki. Shift+Klik näyttää vain kustannusarvion
-STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kaupunki
-STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kaupunki satunnaiseen paikkaan
-STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kaupunkia
-STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Peitä kartta satunnaisesti sijoitetuilla kaupungeilla.
+STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kunta
+STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kunta satunnaiseen paikkaan
+STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kuntaa
+STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Täytä kartta satunnaisesti sijoitetuilla kunnilla
-STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kaupungin nimi:
-STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kaupungin nimi
+STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kunnan nimi:
+STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kunnan nimi
STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Syötä kaupungin nimi napsauttamalla
STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Satunnainen nimi
STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Arvo uusi satunnainen nimi
-STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Kaupungin koko:
+STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Kunnan koko:
STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pieni
STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Keskisuuri
STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Suuri
STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Sattumanvarainen
-STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Valitse kaupungin koko.
+STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Valitse kunnan koko
STR_FOUND_TOWN_CITY :{BLACK}Kaupunki
-STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Suurkaupungit kasvavat nopeammin kuin tavalliset kaupungit{}Asetuksista riippuen, ne ovat suurempia perustettaessa
+STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Kaupungit kasvavat nopeammin kuin tavalliset kunnat{}Asetuksista riippuen, ne ovat suurempia perustettaessa
-STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Kaupungin tiekaava:
-STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Valitse tiekaava tälle kaupungille
+STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Kunnan tiekaava:
+STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Valitse tiekaava tälle kunnalle
STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Alkuperäinen
STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Parempia teitä
STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2×2-ruudukko
@@ -2633,7 +2648,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Rautatie poistu
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Rautatie yhdistelmä- ja reittiopastimilla
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Rautatie yhdistelmä- ja yksisuuntaisilla opastimilla
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Rautatie reitti- ja yksisuuntaisilla opastimilla
-STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Rautatie veturitalli
+STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Veturitalli
STR_LAI_ROAD_DESCRIPTION_ROAD :Tie
STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Tie katuvaloilla
@@ -2702,30 +2717,56 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}×)
-STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulaationopeus: {STRING}
-STR_FRAMERATE_RATE_BLITTER :{WHITE}Grafiikan kuvataajuus: {STRING}
-STR_FRAMERATE_SPEED_FACTOR :{WHITE}Pelin nykyinen nopeuskerroin: {DECIMAL}×
+STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulaationopeus: {STRING}
+STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Simuloitujen peliaskelten määrä sekunnissa
+STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafiikan kuvataajuus: {STRING}
+STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Piirrettyjen kuvien määrä sekunnissa
+STR_FRAMERATE_SPEED_FACTOR :{BLACK}Pelin nykyinen nopeuskerroin: {DECIMAL}×
+STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pelin tämänhetkinen nopeus verrattuna normaalilla simulaationopeudella odotettavissa olevaan
STR_FRAMERATE_CURRENT :{WHITE}Nykyinen
+STR_FRAMERATE_AVERAGE :{WHITE}Keskiarvo
STR_FRAMERATE_DATA_POINTS :{BLACK}Data perustuu {COMMA} mittaukseen
-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} kuvaa/s
-STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} kuvaa/s
-STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} kuvaa/s
+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} kuvaa/s
+STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kuvaa/s
+STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kuvaa/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}Pelisilmukka yhteensä:
+STR_FRAMERATE_GL_ECONOMY :{BLACK} Rahdin käsittely:
+STR_FRAMERATE_GL_TRAINS :{BLACK} Juna-askeleet:
STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ajoneuvoaskeleet:
STR_FRAMERATE_GL_SHIPS :{BLACK} Laiva-askeleet:
+STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ilma-alusaskeleet:
STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Maailma-askeleet:
+STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Yhteyskuvaajan viive:
+STR_FRAMERATE_DRAWING :{BLACK}Grafiikan hahmonnus:
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Maailmanäkymät:
-STR_FRAMERATE_VIDEO :{WHITE}Videolähtö:
+STR_FRAMERATE_VIDEO :{BLACK}Videolähtö:
+STR_FRAMERATE_SOUND :{BLACK}Äänen miksaus:
+STR_FRAMERATE_ALLSCRIPTS :{BLACK} Peliskriptit/tekoälyt yht.:
+STR_FRAMERATE_GAMESCRIPT :{BLACK} Peliskripti:
+STR_FRAMERATE_AI :{BLACK} Tekoäly {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
+STR_FRAMETIME_CAPTION_GAMELOOP :Pelisilmukka
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Rahdin käsittely
+STR_FRAMETIME_CAPTION_GL_TRAINS :Juna-askeleet
+STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ajoneuvoaskeleet
STR_FRAMETIME_CAPTION_GL_SHIPS :Laiva-askeleet
STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ilma-alusaskeleet
+STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Maailma-askeleet
+STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Yhteyskuvaajan viive
+STR_FRAMETIME_CAPTION_DRAWING :Grafiikan hahmonnus
+STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Maailmanäkymän hahmonnus
STR_FRAMETIME_CAPTION_VIDEO :Videolähtö
+STR_FRAMETIME_CAPTION_SOUND :Äänen miksaus
+STR_FRAMETIME_CAPTION_ALLSCRIPTS :Peliskriptit ja tekoälyt yht.
+STR_FRAMETIME_CAPTION_GAMESCRIPT :Peliskripti
+STR_FRAMETIME_CAPTION_AI :Tekoäly {NUM} {STRING}
############ End of leave-in-this-order
@@ -2738,12 +2779,12 @@ STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Lataa ko
STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Tallenna korkeuskartta
STR_SAVELOAD_HOME_BUTTON :{BLACK}Siirry tallennusten oletuskansioon napsauttamalla tätä
STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} vapaana
-STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä.
-STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Valittu nimi pelitallenteelle.
+STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä
+STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Valittu nimi pelitallenteelle
STR_SAVELOAD_DELETE_BUTTON :{BLACK}Poista
-STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Poista valittu pelitallenne.
+STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Poista valittu pelitallenne
STR_SAVELOAD_SAVE_BUTTON :{BLACK}Tallenna
-STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Tallenna nykyinen peli käyttäen valittua nimeä.
+STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Tallenna nykyinen peli käyttäen valittua nimeä
STR_SAVELOAD_LOAD_BUTTON :{BLACK}Lataa
STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Lataa valittu peli
STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Lataa valittu korkeuskartta
@@ -2752,6 +2793,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tietoja
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti:
+STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Tiedosto on jo olemassa
+STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Haluatko varmasti korvata olemassaolevan tiedoston?
STR_SAVELOAD_OSKTITLE :{BLACK}Syötä nimi tallennustiedostolle
@@ -2857,7 +2900,7 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Lista as
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Aseta parametrit
STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Näytä parametrit
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Käytä eri palettia
-STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Käytä valitun NewGRF:n kanssa eri palettia.{}Tee näin, jos tämän NewGRF:n grafiikat näkyvät pelissä vaaleanpunaisina.
+STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Käytä valitun NewGRF:n kanssa eri palettia.{}Tee näin, jos tämän NewGRF:n grafiikat näkyvät pelissä vaaleanpunaisina
STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Ota käyttöön
STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Etsi puuttuvaa sisältöä online-palvelusta
@@ -2869,7 +2912,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versio:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Pienin yhteensopiva versio: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-summa: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paletti: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Oletus (D)
+STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Oletus (D) / 32 bpp
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Perinteinen (W)
+STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Perinteinen (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametrit: {SILVER}{STRING}
+STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ei mitään
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ei tietoa
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Sopivaa tiedostoa ei löydy
@@ -2896,7 +2944,7 @@ STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORAN
STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Parametrien määrä: {ORANGE}{NUM}
# NewGRF inspect window
-STR_NEWGRF_INSPECT_CAPTION :{WHITE}Tutki - {STRING}
+STR_NEWGRF_INSPECT_CAPTION :{WHITE}Tutki – {STRING}
STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Vanhempi
STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Tutki vanhemman kohdetta
@@ -2950,6 +2998,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Luku pseudo-spr
STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-resurssit eivät ole saatavilla (sprite {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Virheellinen/tuntematon spriten asettelumuoto (sprite {3:NUM})
+STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Liian monta elementtiä ominaisuusarvolistassa (sprite {3:NUM}, ominaisuus {4:HEX})
+STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virhe teollisuuden tuotannon takaisinkutsussa (sprite {3:NUM}, "{1:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varoitus!
@@ -2971,15 +3021,15 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Löydet
STR_NEWGRF_LIST_MISSING :{RED}Puuttuvia tiedostoja
# NewGRF 'it's broken' warnings
-STR_NEWGRF_BROKEN :{WHITE}NewGRF:n '{0:STRING}' käytös aiheuttaa todennäköisesti nykimistä ja/tai kaatumisia.
-STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Se muutti vetävän vaunun '{1:ENGINE}' tilaa tallin ulkopuolella
-STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Se muutti kulkuneuvon '{1:ENGINE}' pituutta varikon ulkopuolella
-STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Se muutti kulkuneuvon '{1:ENGINE}' kapasiteettia, vaikka kulkuneuvo ei ollut varikolla tai uudelleensovitettavana
-STR_BROKEN_VEHICLE_LENGTH :{WHITE}Yhtiölle '{1:COMPANY}' kuuluvan junan '{0:VEHICLE}' pituus on virheellinen. Tämä johtuu luultavasti NewGRF:ien ongelmista. Peli saattaa nykiä tai kaatua
-
-STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' antaa väärää tietoa
-STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Rahti/uudelleensovitustiedot kulkuneuvolle '{1:ENGINE}' ovat eri kuin ostolistassa rakentamisen jälkeen. Tämä voi aiheuttaa, että kulkuneuvon korvaus ei uudelleensovita oikein
-STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' aiheutti ikuisen silmukan tuotannon callback-funktiossa
+STR_NEWGRF_BROKEN :{WHITE}NewGRF:n ”{0:STRING}” käytös aiheuttaa todennäköisesti nykimistä ja/tai kaatumisia
+STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Se muutti yksikön ”{1:ENGINE}” vetävän vaunun tilaa tallin ulkopuolella
+STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Se muutti kulkuneuvon ”{1:ENGINE}” pituutta varikon ulkopuolella
+STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Se muutti kulkuneuvon ”{1:ENGINE}” kapasiteettia, vaikka kulkuneuvo ei ollut varikolla tai uudelleensovitettavana
+STR_BROKEN_VEHICLE_LENGTH :{WHITE}Yhtiölle ”{1:COMPANY}” kuuluvan junan ”{0:VEHICLE}” pituus on virheellinen. Tämä johtuu luultavasti NewGRF:ien ongelmista. Peli saattaa nykiä tai kaatua
+
+STR_NEWGRF_BUGGY :{WHITE}NewGRF ”{0:STRING}” antaa väärää tietoa
+STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Kulkuneuvon ”{1:ENGINE}” rahti-/uudelleensovitustiedot ovat toiset kuin ostolistassa rakentamisen jälkeen. Tämä voi johtaa uudelleensovituksen epäonnistumiseen, kun kulkuneuvo uudistetaan tai korvataan automaattisesti
+STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}”{1:STRING}” aiheutti ikuisen silmukan tuotannon takaisinkutsussa
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback-funktio {1:HEX} palautti tuntemattoman/kelvottoman tuloksen {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
@@ -2999,7 +3049,7 @@ STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} Ne
STR_NEWGRF_SCAN_ARCHIVES :Skannataan arkistoja
# Sign list window
-STR_SIGN_LIST_CAPTION :{WHITE}Kylttilista - {COMMA} kylttiä
+STR_SIGN_LIST_CAPTION :{WHITE}Kylttilista – {COMMA} kyltti{P "" ä}
STR_SIGN_LIST_MATCH_CASE :{BLACK}Kirjainkoon täsmäys
STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Kytke kirjainkoon täsmäys kun verrataan kylttien nimiä suodatintekstiin
@@ -3011,45 +3061,46 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Siirry e
STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Syötä kyltin nimi
# Town directory window
-STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kaupungit
+STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kunnat
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ei mitään -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
-STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (suurkaup.){BLACK} ({COMMA})
-STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet - keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (kaupunki){BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet – keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin
STR_TOWN_POPULATION :{BLACK}Maailman asukasluku: {COMMA}
# Town view window
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
-STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (City)
+STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (kaupunki)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Asukasluku: {ORANGE}{COMMA}{BLACK} Taloja: {ORANGE}{COMMA}
-STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kaupungin kasvuun tarvittava rahti:
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} viime kuussa: {ORANGE}{COMMA}{BLACK} enimmillään: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kunnan kasvuun tarvittava rahti:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vaadittu
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} vaaditaan talvella
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} kuljetettu
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (tarvitaan lisää)
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (kuljetettu)
-STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Kaupunki kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein
-STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Kaupunki kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein (rahoitettu)
-STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Kaupunki {RED}ei{BLACK} kasva
-STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Meluraja kaupungissa: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA}
-STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä kaupungin sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin
+STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Kunta kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein
+STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Kunta kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein (rahoitettu)
+STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Kunta {RED}ei{BLACK} kasva
+STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Meluraja kunnassa: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä kunnan sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan kunnan sijaintiin
STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Viranomaiset
-STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Näytä tietoja paikallisviranomaisista.
-STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Vaihda kaupungin nimeä.
+STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Näytä tietoja paikallisviranomaisista
+STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Vaihda kunnan nimeä.
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Laajenna
-STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Suurenna kaupunkia
+STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Laajenna kuntaa
STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Poista
-STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Poista tämä kaupunki kokonaan.
+STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Poista tämä kunta kokonaan.
-STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Nimeä kaupunki
+STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Nimeä kunta
# Town local authority window
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}: viranomaiset
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Kuljetusyhtiön arvioinnit:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Toiminnot:
-STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Luettelo kaupungissa tehtävistä asioista - napsauta kohdetta saadaksesi lisätietoja.
+STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Luettelo kunnassa tehtävistä asioista – napsauta kohdetta saadaksesi lisätietoja
STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Sijoita
STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Suorita valittu toiminto.
@@ -3065,15 +3116,16 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Lahjo viranomai
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Käynnistä pieni mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Kustannus: {CURRENCY_LONG}
-STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Rahoita kaupungin tieverkon rakentamista. Aiheuttaa huomattavaa häiriötä tieliikenteessä kuuden kuukauden ajan.{}Kustannus: {CURRENCY_LONG}
+STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Rahoita tieverkon uudelleenrakentamista. Aiheuttaa huomattavaa häiriötä tieliikenteessä jopa kuuden kuukauden ajan.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Rakenna patsas yhtiösi kunniaksi.{}Kustannus: {CURRENCY_LONG}
-STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Rahoita uusien kaupparakennusten rakentamista kaupungissa.{}Kustannus: {CURRENCY_LONG}
-STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Osta vuoden yksinoikeudet kaupungin liikennöintiin. Paikallisviranomaiset eivät salli muiden yhtiöiden kuljettaa matkustajia ja rahtia.{}Kustannus: {CURRENCY_LONG}
+STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Rahoita uusien liikerakennusten rakentamista kunnassa.{}Kustannus: {CURRENCY_LONG}
+STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Osta vuoden yksinoikeudet kunnan liikennöintiin. Paikallisviranomaiset eivät salli muiden yhtiöiden kuljettaa matkustajia ja rahtia.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Lahjo viranomaisia lisätäksesi arviotasi; rangaistus voi olla kuitenkin suuri, jos jäät kiinni.{}Kustannus: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Tavoitteet
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Maailmanlaajuiset tavoitteet
+STR_GOALS_SPECTATOR :Maailmanlaajuiset tavoitteet
STR_GOALS_GLOBAL_TITLE :{BLACK}Maailmanlaajuiset tavoitteet:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Ei mitään -
@@ -3117,11 +3169,12 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING
STR_SUBSIDIES_NONE :{ORANGE}- Ei mitään -
STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Käytetyt tuet:
STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} välille {STRING}-{STRING}{YELLOW} ({COMPANY}{YELLOW}, {DATE_SHORT} asti)
-STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta palvelua keskittääksesi päänäkymän teollisuuteen/kaupunkiin. Ctrl+Klik avaa uuden näkymäikkunan teollisuuden/kaupungin sijaintiin
+STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta palvelua keskittääksesi päänäkymän teollisuuteen/kuntaan. Ctrl+Klik avaa uuden näkymäikkunan teollisuuden/kunnan sijaintiin
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}: historia
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Yleinen yhtiöhistoria
+STR_STORY_BOOK_SPECTATOR :Yleinen yhtiöhistoria
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Sivu {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Siirry tietylle sivulle valitsemalla se tästä valikosta
@@ -3132,9 +3185,9 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Siirry s
STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Virheellinen viittaus tavoitteeseen
# Station list window
-STR_STATION_LIST_TOOLTIP :{BLACK}Asemien nimet - napsauta nimeä keskittääksesi päänäkymän asemaan. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin
+STR_STATION_LIST_TOOLTIP :{BLACK}Asemien nimet – napsauta nimeä keskittääksesi päänäkymän asemaan. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin
STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Pidä Ctrl-näppäin painettuna valitaksesi useamman kuin yhden vaihtoehdon
-STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} asema{P "" a}
+STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} – {COMMA} asema{P "" a}
STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES}
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
STR_STATION_LIST_NONE :{YELLOW}- Ei mitään -
@@ -3149,14 +3202,14 @@ STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO
STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} varattu ladattavaksi)
STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Ottaa vastaan
-STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Näytä luettelo vastaanotettavasta rahdista.
+STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Näytä luettelo vastaanotettavasta rahdista
STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {WHITE}{CARGO_LIST}
-STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Tällä asemalla on kuljetusyksinoikeus tässä kaupungissa.
-STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} osti tämän kaupungin kuljetusyksinoikeuden.
+STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Tällä asemalla on kuljetusyksinoikeus tässä kunnassa.
+STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} osti tämän kunnan kuljetusyksinoikeuden.
STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Arviot
-STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä aseman arviot.
+STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä aseman arviot
STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Kuukausittainen tarjonta ja paikallinen arvio:
STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%)
@@ -3195,12 +3248,12 @@ STR_CARGO_RATING_OUTSTANDING :Loistava
############ range for rating ends
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä aseman sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin
-STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Muuta aseman nimi.
+STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Muuta aseman nimi
-STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Näytä kaikki junat, joilla on tämä asema käskyissään.
+STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Näytä kaikki junat, joilla on tämä asema käskyissään
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Näytä kaikki ajoneuvot, joilla on tämä asema käskyissään.
-STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näytä kaikki lentokoneet, joilla on tämä asema käskyissään.
-STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Näytä kaikki laivat, joilla on tämä asema käskyissään.
+STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näytä kaikki lentokoneet, joilla on tämä asema käskyissään
+STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Näytä kaikki laivat, joilla on tämä asema käskyissään
STR_STATION_VIEW_RENAME_STATION_CAPTION :Nimeä asema/lastausalue
@@ -3221,7 +3274,7 @@ STR_FINANCES_CAPTION :{WHITE}Talous,
STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}Menot/tulot
STR_FINANCES_YEAR :{WHITE}{NUM}
STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Rakentaminen
-STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Uudet ajoneuvot
+STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Uudet kulkuneuvot
STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Junien käyttökustannukset
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Ajoneuvojen käyttökustannukset
STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Lentokoneiden käyttökustannukset
@@ -3279,13 +3332,13 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Näytä
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Anna rahaa
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Uudet kasvot
-STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Valitse uudet kasvot pääjohtajalle.
+STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Valitse uudet kasvot pääjohtajalle
STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Väriteema
-STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Muuta yhtiön ajoneuvojen väritystä
+STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Muuta yhtiön kulkuneuvojen väritystä
STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Yhtiön nimi
-STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Muuta yhtiön nimeä.
+STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Muuta yhtiön nimeä
STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Pääjohtajan nimi
-STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Muuta pääjohtajan nimeä.
+STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Muuta pääjohtajan nimeä
STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Osta 25{NBSP}%:n osuus yhtiöstä
STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Myy 25{NBSP}%:n osuus yhtiöstä
@@ -3328,6 +3381,9 @@ 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!
+STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING}
+STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
@@ -3342,10 +3398,10 @@ STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING}
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laiva{P "" a}
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} lentokone{P "" tta}
-STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat - napsauta junaa saadaksesi tietoja.
-STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa saadaksesi tietoja.
-STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Laivat - napsauta laivaa saadaksesi tietoja.
-STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta saadaksesi tietoja.
+STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat – napsauta junaa saadaksesi tietoja
+STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot – napsauta ajoneuvoa saadaksesi tietoja
+STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Laivat – napsauta laivaa saadaksesi tietoja
+STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lentokoneet – napsauta lentokonetta saadaksesi tietoja
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Tuotto tänä vuonna: {CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
@@ -3353,10 +3409,10 @@ STR_VEHICLE_LIST_AVAILABLE_TRAINS :Käytettäviss
STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Käytettävissä olevat ajoneuvot
STR_VEHICLE_LIST_AVAILABLE_SHIPS :Käytettävissä olevat laivat
STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Käytettävissä olevat ilma-alukset
-STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Näytä lista saatavilla olevista moottorityypeistä tälle ajoneuvotyypille
+STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Näytä lista saatavilla olevista moottorityypeistä tälle kulkuneuvotyypille
STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Muokkaa listaa
-STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa kaikkia listan ajoneuvoja
+STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa kaikkia listan kulkuneuvoja
STR_VEHICLE_LIST_REPLACE_VEHICLES :Korvaa liikennevälineitä
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Lähetä huoltoon
@@ -3368,7 +3424,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Lähetä variko
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Pysäytä kaikki listalla olevat kulkuneuvot napsauttamalla
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Käynnistä kaikki listalla olevat ajoneuvot napsauttamalla
-STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}{COMMA} ajoneuvon jaetut käskyt
+STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}{COMMA} kulkuneuvon jaetut käskyt
# Group window
STR_GROUP_ALL_TRAINS :Kaikki junat
@@ -3381,17 +3437,18 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Muut ajoneuvot
STR_GROUP_DEFAULT_SHIPS :Muut laivat
STR_GROUP_DEFAULT_AIRCRAFTS :Muut lentokoneet
-STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät - napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla.
+STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät – napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla.
STR_GROUP_CREATE_TOOLTIP :{BLACK}Luo ryhmä
STR_GROUP_DELETE_TOOLTIP :{BLACK}Poista valittu ryhmä
STR_GROUP_RENAME_TOOLTIP :{BLACK}Nimeä valittu ryhmä
+STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuta valitun ryhmän väritystä
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Poista ryhmä automaattisesti korvattavien joukosta
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Poista ryhmä
STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Haluatko varmasti poistaa tämän ryhmän ja sen alaryhmät?
-STR_GROUP_ADD_SHARED_VEHICLE :Lisää jaettuja ajoneuvoja
-STR_GROUP_REMOVE_ALL_VEHICLES :Poista kaikki ajoneuvot
+STR_GROUP_ADD_SHARED_VEHICLE :Lisää jaettuja kulkuneuvoja
+STR_GROUP_REMOVE_ALL_VEHICLES :Poista kaikki kulkuneuvot
STR_GROUP_RENAME_CAPTION :{BLACK}Nimeä ryhmä
@@ -3428,6 +3485,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasite
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moottoroidut vaunut: {GOLD}+{POWER}{BLACK} Paino: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Sovitettavissa: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Kaikki rahtityypit
+STR_PURCHASE_INFO_NONE :Ei mitään
STR_PURCHASE_INFO_ALL_BUT :Kaikki paitsi {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurin vetovoima: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Toimintasäde: {GOLD}{COMMA} ruutua
@@ -3453,10 +3511,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimeä
STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Nimeä
STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Nimeä
-STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Nimeä yksikön tyyppi uudelleen.
+STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Nimeä yksikön tyyppi uudelleen
STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Nimeä ajoneuvon tyyppi uudelleen
-STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Nimeä laivatyyppi uudelleen.
-STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Nimeä lentokonetyyppi uudelleen.
+STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Nimeä laivatyyppi uudelleen
+STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Nimeä lentokonetyyppi uudelleen
STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Piilota
STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Piilota
@@ -3490,16 +3548,16 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ku
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat - vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun
-STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja.
-STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat - napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja.
-STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja.
+STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot – napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja
+STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat – napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja.
+STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet – napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja
-STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Vedä yksikkö tähän myydäksesi sen.
-STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vedä ajoneuvo tähän myydäksesi sen.
-STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Vedä laiva tähän myydäksesi sen.
-STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Vedä lentokone tähän myydäksesi sen.
+STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Vedä yksikkö tähän myydäksesi sen
+STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vedä ajoneuvo tähän myydäksesi sen
+STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Vedä laiva tähän myydäksesi sen
+STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Vedä lentokone tähän myydäksesi sen
-STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Vedä junan veturi tähän myydäksesi koko junan.
+STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Vedä junan veturi tähän myydäksesi koko junan
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Myy kaikki veturitallilla olevat junat
STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Myy kaikki varikolla olevat ajoneuvot
@@ -3516,8 +3574,8 @@ STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Uusia aj
STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Uusia laivoja
STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Uusia lentokoneita
-STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi yksikkö.
-STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi ajoneuvo.
+STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi yksikkö
+STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi ajoneuvo
STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi laiva
STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi lentokone
@@ -3551,11 +3609,11 @@ STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Käynnis
STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Käynnistä kaikki telakalla olevat laivat napsauttamalla
STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Käynnistä kaikki hallissa olevat ilma-alukset napsauttamalla
-STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet myymässä kaikki varikon ajoneuvot. Oletko varma?
+STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet myymässä kaikki varikon kulkuneuvot. Oletko varma?
# Engine preview window
-STR_ENGINE_PREVIEW_CAPTION :{WHITE}Viesti ajoneuvovalmistajalta
-STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Olemme juuri suunnitelleet uuden {STRING} - oletteko kiinnostunut vuoden yksinoikeutetusta kokeilusta, jotta näemme miten tuote suoriutuu ennen kuin julkistamme sen yleiseen käyttöön?
+STR_ENGINE_PREVIEW_CAPTION :{WHITE}Viesti kulkuneuvovalmistajalta
+STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Olemme juuri suunnitelleet uuden {STRING} – oletteko kiinnostunut vuoden yksinoikeutetusta kokeilusta, jotta näemme miten tuote suoriutuu ennen kuin julkistamme sen yleiseen käyttöön?
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :veturin
STR_ENGINE_PREVIEW_ROAD_VEHICLE :ajoneuvon
STR_ENGINE_PREVIEW_AIRCRAFT :lentokoneen
@@ -3572,11 +3630,11 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hinta: {
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Lentokonetyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
# Autoreplace window
-STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} - {STRING}
-STR_REPLACE_VEHICLE_TRAIN :Juna
-STR_REPLACE_VEHICLE_ROAD_VEHICLE :Ajoneuvo
-STR_REPLACE_VEHICLE_SHIP :Laiva
-STR_REPLACE_VEHICLE_AIRCRAFT :Lentokone
+STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} – {STRING}
+STR_REPLACE_VEHICLE_TRAIN :junia
+STR_REPLACE_VEHICLE_ROAD_VEHICLE :ajoneuvoja
+STR_REPLACE_VEHICLE_SHIP :laivoja
+STR_REPLACE_VEHICLE_AIRCRAFT :lentokoneita
STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}Käytössä olevat kulkuneuvot
STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}Sarake kulkuneuvoille, jotka omistat
@@ -3586,14 +3644,14 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Sarake k
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Valitse korvattava veturityyppi.
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Valitse vasemmalla näkyvän veturityypinn korvaava uusi veturityyppi.
-STR_REPLACE_VEHICLES_START :{BLACK}Aloita ajoneuvojen korvaaminen
+STR_REPLACE_VEHICLES_START :{BLACK}Aloita kulkuneuvojen korvaaminen
STR_REPLACE_VEHICLES_NOW :Korvaa kaikki liikennevälineet nyt
STR_REPLACE_VEHICLES_WHEN_OLD :Korvaa vain vanhat liikennevälineet
STR_REPLACE_HELP_START_BUTTON :{BLACK}Napsauta aloittaaksesi vasemmalta valitun veturityypin korvauksen oikealta valitulla veturityypillä.
STR_REPLACE_NOT_REPLACING :{BLACK}Ei korvata
STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Ei liikennevälinettä valittuna
STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kun vanha
-STR_REPLACE_VEHICLES_STOP :{BLACK}Lopeta ajoneuvojen korv.
+STR_REPLACE_VEHICLES_STOP :{BLACK}Lopeta kulkuneuvojen korvaaminen
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Napsauta pysäyttääksesi vasemmalta valitun veturityypin korvauksen.
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Vaihda toiseen korvausikkunaan
@@ -3629,30 +3687,30 @@ STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Tämä o
STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Tämä ostaa kopion laivasta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota
STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Tämä ostaa kopion lentokoneesta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota
-STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Anna junalle lupa ohittaa punainen opastin.
+STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Anna junalle lupa ohittaa punainen opastin
-STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan erityyppistä rahtia.
-STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo rahtaamaan muuta rahtityyppiä.
-STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Sovita rahtilaiva eri rahtityypille.
+STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan muuta rahtityyppiä
+STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo kuljettamaan muuta rahtityyppiä
+STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva eri rahtityypille
STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone eri rahtityypille.
-STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Käännä junan suunta.
-STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Pakota ajoneuvo kääntymään ympäri.
+STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Käännä junan suunta
+STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Pakota ajoneuvo kääntymään ympäri
STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Näytä junan käskyt. Ctrl+Klik näyttää junan aikataulun
STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Näytä ajoneuvon käskyt. Ctrl+Klik näyttää ajoneuvon aikataulun
STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Näytä laivan käskyt. Ctrl+Click näyttää laivan aikataulun
STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Näytä lentokoneen käskyt. Ctrl+Klik näyttää lentokoneen aikataulun
-STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä junan tiedot.
-STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä ajoneuvon tiedot.
-STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä laivan tiedot.
+STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä junan tiedot
+STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä ajoneuvon tiedot
+STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä laivan tiedot
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä lentokoneen tiedot.
-STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Valitun junan toiminnot - napsauta pysäyttääksesi/käynnistääksesi junan. Ctrl+Klik vierittääksesi kohteeseen
-STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen ajoneuvon toiminnot - napsauta pysäyttääksesi/käynnistääksesi ajoneuvon. Ctrl+Klik vierittääksesi kohteeseen
-STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen laivat toiminnot - napsauta pysäyttääksesi/käynnistääksesi laivan. Ctrl+Klik vierittääksesi kohteeseen
-STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen lentokoneen toiminnot - napsauta pysäyttääksesi/käynnistääksesi lentokoneen. Ctrl+Klik vierittääksesi kohteeseen
+STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Valitun junan toiminnot – napsauta pysäyttääksesi/käynnistääksesi junan. Ctrl+Klik vierittääksesi kohteeseen
+STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen ajoneuvon toiminnot – napsauta pysäyttääksesi/käynnistääksesi ajoneuvon. Ctrl+Klik vierittääksesi kohteeseen
+STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen laivat toiminnot – napsauta pysäyttääksesi/käynnistääksesi laivan. Ctrl+Klik vierittääksesi kohteeseen
+STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen lentokoneen toiminnot – napsauta pysäyttääksesi/käynnistääksesi lentokoneen. Ctrl+Klik vierittääksesi kohteeseen
# Messages in the start stop button in the vehicle view
STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Lastataan/puretaan
@@ -3695,7 +3753,7 @@ STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Huippuno
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Lentokonetyyppi: {LTBLUE}{STRING}
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Lentokonetyyppi: {LTBLUE}{STRING} {BLACK}Toimintamatka: {LTBLUE}{COMMA} ruutua
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. T.E.: {LTBLUE}{FORCE}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. vetovoima: {LTBLUE}{FORCE}
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA}
@@ -3736,13 +3794,13 @@ STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_
STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} asemalta {STATION} (x{NUM})
STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Rahti
-STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Näytä kuljetettavan rahdin tiedot.
+STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Näytä kuljetettavan rahdin tiedot
STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Tietoa
-STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Näytä yksikön tiedot.
+STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Näytä yksikön tiedot
STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapasiteetit
-STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Näytä kunkin ajoneuvon kapasiteetti.
+STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Näytä kunkin kulkuneuvon kapasiteetti
STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Rahtia yhteensä
-STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan.
+STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan
STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}
@@ -3757,25 +3815,25 @@ STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Valitse
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Valitse junan rahtityyppi
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Valitse ajoneuvolla ajettava rahti
-STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Valitse laivan kuljettama rahtityyppi.
-STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Valitse kuljetettavan rahdin tyyppi.
+STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Valitse laivan kuljettama rahtityyppi
+STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Valitse kuljetettavan rahdin tyyppi
STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Sovita juna
STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Korjaa ajoneuvo.
STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Sovita laiva
STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Sovita lentokone
-STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan valittua rahtityyppiä.
+STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan valittua rahtityyppiä
STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo rahtaamaan korostettua rahtityyppiä.
-STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva korostetulle rahtityypille.
-STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone kuljettamaan valittua rahtityyppiä.
+STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva valitulle rahtityypille
+STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone kuljettamaan valittua rahtityyppiä
# Order view
STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Käskyt)
STR_ORDERS_TIMETABLE_VIEW :{BLACK}Aikataulu
STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näytä aikataulu
-STR_ORDERS_LIST_TOOLTIP :{BLACK}Käskyt - napsauta käskyä korostaaksesi sen. Ctrl+Klik siirtää näkymän kohteeseen
+STR_ORDERS_LIST_TOOLTIP :{BLACK}Käskyt – napsauta käskyä korostaaksesi sen. Ctrl+Klik siirtää näkymän kohteeseen
STR_ORDER_INDEX :{COMMA}:{NBSP}
STR_ORDER_TEXT :{STRING} {STRING} {STRING}
@@ -3807,7 +3865,7 @@ STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Muuta ko
STR_ORDER_REFIT :{BLACK}Sovita
STR_ORDER_REFIT_TOOLTIP :{BLACK}Valitse mihin rahtityyppiin tämä käsky sovittaa. Ctrl+Klik poistaa sovituskäskyn
STR_ORDER_REFIT_AUTO :{BLACK}Uudelleensovitus asemalla
-STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Valitse tällä määräyksellä sovitettava rahtityyppi. Ctrl+Klik poistaaksesi sovitusmääräyksen. Sovitus suoritetaan vain, jos kulkuneuvo sallii sen.
+STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Valitse tällä määräyksellä sovitettava rahtityyppi. Ctrl+Klik poistaaksesi sovitusmääräyksen. Sovitus suoritetaan vain, jos kulkuneuvo sallii sen
STR_ORDER_DROP_REFIT_AUTO :Määrätty rahti
STR_ORDER_DROP_REFIT_AUTO_ANY :Saatavilla oleva rahti
@@ -3815,7 +3873,7 @@ STR_ORDER_SERVICE :{BLACK}Huolto
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mene aina
STR_ORDER_DROP_SERVICE_DEPOT :Huolto, jos tarpeen
STR_ORDER_DROP_HALT_DEPOT :Pysähdy
-STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ohita tämä käsky, ellei palvelua tarvita.
+STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ohita tämä käsky, ellei huoltoa tarvita
STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Kulkuneuvon tiedot, joiden perusteella hypätään
@@ -3827,6 +3885,7 @@ STR_ORDER_CONDITIONAL_AGE :Ikä (vuotta)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Vaatii huoltoa
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Aina
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Jäljelläoleva elinikä (vuotta)
+STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Enimmäisluotettavuus
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Miten kulkuneuvon tietoja verrataan annettuihin arvoihin
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :on yhtä kuin
@@ -3855,9 +3914,9 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Mene lähimmäl
STR_ORDER_GO_TO_NEAREST_HANGAR :Mene lähimmälle varikolle
STR_ORDER_CONDITIONAL :Ehdollinen hyppykäsky
STR_ORDER_SHARE :Jaa käskyt
-STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uusi käsky ennen valittua, tai lisää listan viimeiseksi. Ctrl tekee asemakäskyistä 'lastaa täyteen kaikki rahti', reittipistekäskyistä 'non-stop' ja veturitallikäskyistä 'huolto'. 'Jaa käskyt' jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon napsauttaminen kopioi käskyt kyseisestä kulkuneuvosta. Varikkokäsky poistaa käytöstä automaattisen huollon
+STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uuden käskyn ennen valittua, tai lisää listan viimeiseksi. Ctrl:n painalluksella asemakäskyistä tulee ”lastaa täyteen mikä tahansa rahti”, reittipistekäskyistä ”pysähtymättä” ja veturitallikäskyistä ”huolto”. ”Jaa käskyt” tai Ctrl jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon napsauttaminen kopioi käskyt kyseisestä kulkuneuvosta. Varikkokäsky estää kulkuneuvon automaattiset huollot
-STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki ajoneuvot, jotka jakavat nämä käskyt
+STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki kulkuneuvot, jotka jakavat nämä käskyt
# String parts to build the order string
STR_ORDER_GO_TO_WAYPOINT :Kierrä reittipisteen {WAYPOINT} kautta
@@ -3950,14 +4009,14 @@ STR_TIMETABLE_TICKS :{COMMA}{NBSP}as
STR_TIMETABLE_TOTAL_TIME :{BLACK}Aikataulun kesto on {STRING}
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Aikataulun kesto on vähintään {STRING}
-STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ajoneuvo on aikataulussa
-STR_TIMETABLE_STATUS_LATE :{BLACK}Ajoneuvo on {STRING} myöhässä
-STR_TIMETABLE_STATUS_EARLY :{BLACK}Ajoneuvo on {STRING} etuajassa
+STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Kulkuneuvo on aikataulussa
+STR_TIMETABLE_STATUS_LATE :{BLACK}Kulkuneuvo on {STRING} myöhässä
+STR_TIMETABLE_STATUS_EARLY :{BLACK}Kulkuneuvo on {STRING} etuajassa
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tämä aikataulu ei ole vielä alkanut
STR_TIMETABLE_STATUS_START_AT :{BLACK}Tämä aikataulu alkaa {STRING}
STR_TIMETABLE_STARTING_DATE :{BLACK}Aloituspäivä
-STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloituspäiväksi. Ctrl+Klik määrittää aikataulun aloituspäivän ja jakaa aikataulun tasaisesti kaikkien sitä käyttävien ajoneuvojen kesken niiden järjestyksen mukaan.
+STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloituspäiväksi. Ctrl+Klik määrittää aikataulun aloituspäivän ja jakaa aikataulun tasaisesti kaikkien sitä käyttävien kulkuneuvojen kesken niiden järjestyksen mukaan.
STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Aseta kuinka kauan käskyn tulisi kestää
@@ -3995,7 +4054,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Valitse
# AI debug window
-STR_AI_DEBUG :{WHITE}Tekoälyn/Peliskriptin virheenjäljitys
+STR_AI_DEBUG :{WHITE}Tekoälyn/peliskriptin virheenjäljitys
STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM})
STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Skriptin nimi
STR_AI_DEBUG_SETTINGS :{BLACK}Asetukset
@@ -4014,12 +4073,12 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Näytä
STR_AI_GAME_SCRIPT :{BLACK}Peliskripti
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tarkista peliskriptin loki
-STR_ERROR_AI_NO_AI_FOUND :Sopivaa tekoälyä ei löydetty.{}Tämä tekoäly ei tee mitään.{}Voit ladata tekoälyjä 'Online-sisältö'-järjestelmän kautta
-STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi käynnissä olevista skripteistä kaatui. Ilmoita tästä skriptin kehittäjälle littäen mukaan kuvankaappaus Tekoälyn/Peliskriptin virheenjäljitys -ikkunasta
-STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoälyn/Peliskriptin virheenjäljitysikkuna on vain palvelimen käytettävissä
+STR_ERROR_AI_NO_AI_FOUND :Sopivaa tekoälyä ei löydetty.{}Tämä tekoäly ei tee mitään.{}Voit ladata useita tekoälyjä ”online-sisältö” -järjestelmän kautta
+STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi käynnissä olevista skripteistä kaatui. Ilmoita tästä skriptin kehittäjälle liittäen mukaan kuvankaappaus Tekoälyn/peliskriptin virheenjäljitys -ikkunasta
+STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoälyn/peliskriptin virheenjäljitysikkuna on vain palvelimen käytettävissä
# AI configuration window
-STR_AI_CONFIG_CAPTION :{WHITE}Tekoälyn/Peliskriptin määritteet
+STR_AI_CONFIG_CAPTION :{WHITE}Tekoälyn/peliskriptin määritteet
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattava peliskripti
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattavat tekoälyt
STR_AI_CONFIG_HUMAN_PLAYER :Ihmispelaaja
@@ -4110,7 +4169,7 @@ STR_ERROR_GAME_SAVE_FAILED :{WHITE}Tallennu
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tiedostoa ei voi poistaa.
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.{}{STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Sisäinen virhe: {STRING}
-STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus - {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus – {STRING}
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemalla versiolla
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Tiedostoa ei voi lukea
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Tiedostoa ei voi kirjoittaa
@@ -4119,8 +4178,8 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu
# Map generation messages
-STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan generointi peruutettu...{}... ei kelvollisia kaupunkien sijainteja
-STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole kaupunkeja.
+STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan generointi peruutettu...{}... ei kelvollisia kuntien sijainteja
+STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole yhtään kuntaa
STR_ERROR_PNGMAP :{WHITE}Maastoa ei voida ladata PNG-tiedostosta...
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... tiedostoa ei löydy
@@ -4136,13 +4195,13 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Mittakaa
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Lähdekartan koon liiallinen muuttaminen ei ole suositeltavaa. Haluatko jatkaa?
# Soundset messages
-STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Vain tilapäinen äänipaketti löydetty. Jos haluat ääniä, asenna äänipaketti Online-sisältö -palvelulla
+STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Vain tilapäinen äänipaketti löydetty. Jos haluat ääniä, asenna äänipaketti online-sisältö -palvelulla
# Screenshot related messages
STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Suuri kuvankaappaus
STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Kuvankaappauksen tarkkuus tulee olemaan {COMMA} x {COMMA} pikseliä. Kuvankaappauksen ottaminen voi kestää jonkin aikaa. Haluatko jatkaa?
-STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvakaappaus tallennettu nimellä '{STRING}'.
+STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvakaappaus tallennettu nimellä ”{STRING}”.
STR_ERROR_SCREENSHOT_FAILED :{WHITE}Kuvakaappaus epäonnistui!
# Error message titles
@@ -4152,7 +4211,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Viesti:
# Generic construction errors
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Kartan reunan ulkopuolella.
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Liian lähellä kartan reunaa.
-STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Käteinen ei riitä - tarvitaan {CURRENCY_LONG}.
+STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Käteinen ei riitä – tarvitaan {CURRENCY_LONG}
STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Tarvitaan tasaista maata.
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Maa viettää väärään suuntaan.
STR_ERROR_CAN_T_DO_THIS :{WHITE}Ei onnistu...
@@ -4171,7 +4230,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Ei salli
# Local authority errors
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}: paikallisviranomaiset kieltäytyvät.
-STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} paikallisviranomaiset eivät salli toisen lentokentän rakentamista tähän kaupunkiin.
+STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} paikallisviranomaiset eivät salli toisen lentokentän rakentamista tähän kuntaan
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} paikallisviranomaiset kieltävät lentokentän rakennuksen äänekkyyden takia
STR_ERROR_BRIBE_FAILED :{WHITE}Paikallisviranomaiset ovat huomanneet lahjontayrityksesi
@@ -4202,18 +4261,18 @@ STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}Tästä
STR_ERROR_PROTECTED :{WHITE}Tällä yhtiöllä ei ole vielä osakkeita...
# Town related errors
-STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kaupunkeja ei voi rakentaa
-STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kaupungin nimeä ei voi vaihtaa.
-STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kaupunkia ei voi rakentaa tähän...
-STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kaupunkia ei voi laajentaa...
+STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kuntia ei voi luoda
+STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kunnan nimeä ei voi vaihtaa...
+STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kuntaa ei voi perustaa tähän...
+STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kuntaa ei voi laajentaa...
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... liian lähellä kartan reunaa.
-STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liian lähellä toista kaupunkia.
-STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liian monta kaupunkia.
+STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liian lähellä toista kuntaa
+STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liian monta kuntaa
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... kartalla ei ole enää tilaa
-STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kaupunki ei rakenna teitä. Voit sallia teiden rakentamisen valikosta Asetukset->Ympäristö->Kaupungit
+STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kunta ei rakenna teitä. Voit sallia teiden rakentamisen valikosta Asetukset->Ympäristö->Kunnat
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tietyöt ovat käynnissä.
-STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kaupunkia ei voida poistaa...{}Asema tai varikko viittaa kaupunkiin tai kaupungin omistamaa ruutua ei voida poistaa
-STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... kaupungin keskustassa ei ole sopivaa paikkaa patsaalle
+STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kuntaa ei voida poistaa...{}Asema tai varikko viittaa kuntaan tai kunnan omistamaa ruutua ei voida poistaa
+STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... tämän kunnan keskustassa ei ole sopivaa paikkaa patsaalle
# Industry related errors
STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liian paljon teollisuutta
@@ -4221,20 +4280,20 @@ STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Teollisu
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING}: tähän ei voi rakentaa...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Teollisuustyyppiä ei voi rakentaa tähän...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... liian lähellä toista teollisuutta.
-STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... kaupunki pitää rakentaa ensin.
-STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... vain yksi on sallittu kaupunkia kohden.
-STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... voidaan rakentaa vain kaupunkeihin, joissa on yli 1200 asukasta.
+STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... kunta pitää perustaa ensin
+STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... vain yksi on sallittu kuntaa kohden
+STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... voidaan rakentaa vain kuntiin, joissa on vähintään 1200 asukasta
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... voidaan rakentaa vain sademetsäalueisiin
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... voidaan rakentaa vain aavikkoalueisiin
-STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... voidaan rakentaa vain kaupunkeihin (korvaamaan taloja)
-STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... voidaan rakentaa vain lähelle kaupungin keskustaa
+STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... voidaan rakentaa vain taajamiin (korvaamaan taloja)
+STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... voidaan rakentaa vain lähelle kunnan keskustaa
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... voidaan rakentaa vain matalille alueille
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... voidaan asettaa vain kartan reunoille
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... metsää voi istuttaa vain lumirajan yläpuolelle
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan yläpuolelle
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan alapuolelle
-STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Teollisuudelle '{STRING}' ei löytynyt sopivaa paikkaa
+STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Teollisuudelle ”{STRING}” ei löytynyt sopivaa paikkaa
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Muuta kartan parametreja saadaksesi paremman kartan
# Station construction related errors
@@ -4255,7 +4314,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Liian mo
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Liian lähellä toista satamaa.
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Liian lähellä toista lentokenttää.
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Asemaa ei voi nimetä uudelleen.
-STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... kaupunki omistaa tien
+STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... kunta omistaa tien
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tie on väärin päin
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... läpiajettavissa pysäkeissä ei voi olla mutkia
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... läpiajettavissa pysäkeissä ei voi olla risteyksiä
@@ -4401,9 +4460,9 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei voi l
STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Ryhmää ei voi poistaa.
STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Ryhmää ei voi nimetä.
STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Pääryhmää ei voi määrittää...
-STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ryhmän kaikkia ajoneuvoja ei voi poistaa.
-STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Ei voi lisätä ajoneuvoa ryhmään.
-STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ei voi lisätä jaettuja ajoneuvoja ryhmään.
+STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ryhmän kaikkia kulkuneuvoja ei voi poistaa.
+STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Ei voi lisätä kulkuneuvoa ryhmään.
+STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ei voi lisätä jaettuja kulkuneuvoja ryhmään.
# Generic vehicle errors
STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Juna on tiellä.
@@ -4451,12 +4510,12 @@ STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Ajoneuvo
STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Laiva ei ole saatavilla
STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Lentokone ei ole saatavilla
-STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Liian monta ajoneuvoa pelissä.
+STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Liian monta kulkuneuvoa pelissä.
STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Huoltoväliä ei voi muuttaa.
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kulkuneuvo on tuhoutunut
-STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään ajoneuvoa ei ole saatavilla
+STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään kulkuneuvoa ei ole saatavilla
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta NewGRF-asetuksiasi
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Kulkuneuvoja ei ole vielä saatavilla
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Aloita peli {DATE_SHORT} jälkeen tai käytä NewGRF:ää joka tarjoaa aikaisempia kulkuneuvoja
@@ -4492,7 +4551,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lent
# Timetable related errors
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Ei voi asettaa aikataulua.
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kulkuneuvo voi odottaa vain asemalla
-STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä ajoneuvo ei pysähdy tällä asemalla
+STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä kulkuneuvo ei pysähdy tällä asemalla
# Sign related errors
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... liian monta kylttiä.
@@ -4512,6 +4571,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Alkuperäiset T
STR_BASESOUNDS_NONE_DESCRIPTION :Äänipaketti, jossa ei ole ääniä.
STR_BASEMUSIC_WIN_DESCRIPTION :Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki.
STR_BASEMUSIC_DOS_DESCRIPTION :Alkuperäinen Transport Tycoon Deluxen DOS-version musiikki.
+STR_BASEMUSIC_TTO_DESCRIPTION :Alkuperäinen Transport Tycoonin (alkuperäinen / World Editor) DOS-version musiikki.
STR_BASEMUSIC_NONE_DESCRIPTION :Musiikkipaketti, jossa ei ole musiikkia.
##id 0x2000
@@ -4521,7 +4581,7 @@ STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1 :Tomistorakennus
STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Pieni kerrostalo
STR_TOWN_BUILDING_NAME_CHURCH_1 :Kirkko
STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1 :Suuri toimistorakennus
-STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Kaupunkitalot
+STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Asuintaloja
STR_TOWN_BUILDING_NAME_HOTEL_1 :Hotelli
STR_TOWN_BUILDING_NAME_STATUE_1 :Patsas
STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Suihkulähde
@@ -4640,25 +4700,25 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Cho
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut Diesel
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut Diesel
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (höyry)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (höyry)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (höyry)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (höyry)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney ”Jubilee” (höyry)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu ”A4” (höyry)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH ”8P” (höyry)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (diesel)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (diesel)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (diesel)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (diesel)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (diesel)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :”Dash” (diesel)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry ”25” (diesel)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU ”37” (diesel)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss ”47” (diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (diesel)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (diesel)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH ”125” (diesel)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH ”30” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH ”40” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :”T.I.M.” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :”AsiaStar” (sähkö)
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Matkustajavaunu
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Postivaunu
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Hiilivaunu
@@ -4686,8 +4746,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Leluvaunu
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Paristovaunu
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Sihijuomavaunu
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Muovivaunu
-STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :”X2001” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :”Millennium Z1” (sähkö)
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Matkustajavaunu
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Postivaunu
@@ -4716,10 +4776,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Leluvaunu
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Paristovaunu
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Sihijuomavaunu
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Muovivaunu
-STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (sähkö)
-STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 ”Leviathan” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 ”Cyclops” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 ”Pegasus” (sähkö)
+STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 ”Chimaera” (sähkö)
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Matkustajavaunu
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Postivaunu
diff --git a/src/lang/french.txt b/src/lang/french.txt
index ee7fa47d3e..207ab0e214 100644
--- a/src/lang/french.txt
+++ b/src/lang/french.txt
@@ -1201,8 +1201,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinaison d'u
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinaison des pentes pour les véhicules routiers{NBSP}: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinaison d'une case en pente pour un véhicule routier. Les valeurs les plus hautes rendent l’ascension plus difficile
-STR_CONFIG_SETTING_FORBID_90_DEG :Interdire aux trains et aux navires les virages à 90°{NBSP}: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Les virages à 90° se produisent lorsqu'une voie horizontale est directement suivie par une voie verticale, impliquant que le train tourne de 90° en traversant la bordure de la case au lieu des 45° habituels pour les autres combinaisons de voies.{}S'applique également à la rotation des navires.
+STR_CONFIG_SETTING_FORBID_90_DEG :Interdire aux trains les virages à 90°{NBSP}: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Les virages à 90° se produisent lorsqu'une voie horizontale est directement suivie par une voie verticale, impliquant que le train tourne de 90° en traversant la bordure de la case au lieu des 45° habituels pour les autres combinaisons de voies.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permettre de joindre des stations non adjacentes{NBSP}: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Autoriser l'ajout à une station de morceaux ne touchant pas directement les morceaux existants. Un Ctrl-clic est requis pour placer les nouveaux morceaux.
STR_CONFIG_SETTING_INFLATION :Inflation{NBSP}: {STRING}
@@ -1258,8 +1258,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Facteur de vite
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Définir la vitesse relative des aéronefs par rapport aux autres types de véhicule, pour réduire les revenus du transport aérien
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Nombre d'accidents d'avion{NBSP}: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Définir la probabilité qu'un accident d'avion se produise
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Aucun
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Définir la probabilité qu'un accident d'avion se produise.{}* Les jets auront toujours un risque de s'écraser en atterrissant sur les petits aéroports
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Aucun*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Réduit
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Autoriser les arrêts de bus sur les routes des municipalités{NBSP}: {STRING}
@@ -1798,10 +1798,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt
index 7c970a19a1..4e2f503740 100644
--- a/src/lang/gaelic.txt
+++ b/src/lang/gaelic.txt
@@ -1981,10 +1981,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/galician.txt b/src/lang/galician.txt
index d95ba2326c..595ee54075 100644
--- a/src/lang/galician.txt
+++ b/src/lang/galician.txt
@@ -1774,10 +1774,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/german.txt b/src/lang/german.txt
index eac0054337..b83d16a0a8 100644
--- a/src/lang/german.txt
+++ b/src/lang/german.txt
@@ -1954,10 +1954,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/greek.txt b/src/lang/greek.txt
index 5ca3ab8434..787832d826 100644
--- a/src/lang/greek.txt
+++ b/src/lang/greek.txt
@@ -1894,10 +1894,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt
index bc62056633..0d61413cbc 100644
--- a/src/lang/hebrew.txt
+++ b/src/lang/hebrew.txt
@@ -1796,10 +1796,7 @@ STR_OSNAME_WINDOWS :חלונות
STR_OSNAME_DOS :דוס
STR_OSNAME_UNIX :יוניקס
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :מערכת הפעלה בי
STR_OSNAME_HAIKU :הייקו
-STR_OSNAME_MORPHOS :מערכת הפעלה מורפ
-STR_OSNAME_AMIGAOS :מערכת הפעלה אניגמה
STR_OSNAME_OS2 :מערכת הפעלה או.אס שתיים
STR_OSNAME_SUNOS :סולריס
diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt
index 9c20b15ac9..5a893b2af1 100644
--- a/src/lang/hungarian.txt
+++ b/src/lang/hungarian.txt
@@ -1248,6 +1248,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Épületek, vá
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tájrendezés engedélyezése épületek és utak alatt azok eltávolítása nélkül
STR_CONFIG_SETTING_CATCHMENT :Élethűbben méretezett állomási vonzáskörzetek bekapcsolása: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :A különböző állomások és repterek más vonzáskörzettel rendelkeznek
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :A vállalatok állomásai elláthatnak beépített semleges állomással rendelkező gazdasági épületeket: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ha be van kapcsolva, akkor az olyan gazdasági épületeket, amelyekhez beépített állomás tartozik (pl. olajfúró tornyok), el lehet látni a vállalatok által épített közeli állomásokkal is. Ha ki van kapcsolva, akkor csak a beépített állomásukkal lehet ellátni ezeket a gazdasági épületeket. A vállalatok közeli állomásai nem tudják őket ellátni, és a beépített állomások sem látnak el mást, csak az adott gazdasági épületet.
STR_CONFIG_SETTING_EXTRADYNAMITE :Települési tulajdonú utak/hidak/alagutak rombolásának engedélyezése: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Városi tulajdonú infrastruktúra és épületek könnyebb eltávolíthatósága
STR_CONFIG_SETTING_TRAIN_LENGTH :Vonatok maximális hossza: {STRING}
@@ -1264,8 +1266,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Egy emelkedő m
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Emelkedő meredeksége közúti járműveknek: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Egy emelkedő mező meredeksége közúti járműveknek. Nagyobb érték esetén a jármű nehezebben mássza meg az emelkedőt
-STR_CONFIG_SETTING_FORBID_90_DEG :Vonatok és hajók nem tehetnek 90 fokos kanyart: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 fokos kanyarok akkor fordulnak elő, ha egy vízszintes pályaelemet egy függőleges elem követ közvetlenül a következő mezőn, ami által a vonat egy 90 fokos kanyart tesz a szokásos 45 fokos helyett. Ez ugyanígy előfordulhat hajók esetében is
+STR_CONFIG_SETTING_FORBID_90_DEG :Vonatok nem tehetnek 90 fokos kanyart: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 fokos kanyarok akkor fordulnak elő, ha egy vízszintes pályaelemet egy függőleges elem követ közvetlenül a következő mezőn, ami által a vonat egy 90 fokos kanyart tesz a szokásos 45 fokos helyett.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Nem közvetlen szomszédos állomások egyesítése: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Állomásrészek hozzáadásának engedélyezése úgy, hogy az nem érinti közvetlenül a meglévő részeket. Ctrl+kattintás szükséges hozzá az új részek elhelyezése közben
STR_CONFIG_SETTING_INFLATION :Infláció: {STRING}
@@ -1321,8 +1323,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Repülőgép se
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Repülőgépek relatív sebességének beállítása más járműtípusokhoz viszonyítva, a légi szállítás bevételének csökkentéséhez
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Repülőgép-szerencsétlenségek száma: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Repülőgép-szerencsétlenség esélyének beállítása
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nincs
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Repülőgép-szerencsétlenség esélyének beállítása.{}* Nagy repülőgépek esetén mindig fennáll a baleset veszélye, ha kis reptéren próbálnak leszállni!
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nincs*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :csökkentett
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normál
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Áthaladó megállóhelyek engedélyezése települési tulajdonú utakon: {STRING}
@@ -1647,6 +1649,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Bekapcsolva a j
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :tiltott
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :megengedett
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :megengedett, egyéni városelrendezés
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Termelés a településeken: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Azt adja meg, hogy mennyi rakományt termelnek a városi épületek a település lakosságának függvényében.{}Négyzetes növekedés: Egy kétszer nagyobb település négyszer több utast termel.{}Lineáris növekedés: Egy kétszer nagyobb település kétszer több utast termel.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Négyzetes (eredeti)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineáris
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Játékbeli faelhelyezkedés: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Fák véletlenszerű megjelenésének szabályozása a játék során. Ez befolyásolhatja a gazdasági épületeket, melyek a fák növekedésétől függnek, mint a favágók
@@ -1861,10 +1867,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt
index 01288217db..992208bf89 100644
--- a/src/lang/icelandic.txt
+++ b/src/lang/icelandic.txt
@@ -1635,10 +1635,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt
index b305d7641c..105338f4b1 100644
--- a/src/lang/indonesian.txt
+++ b/src/lang/indonesian.txt
@@ -1780,10 +1780,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/irish.txt b/src/lang/irish.txt
index ceded78a1c..686c742792 100644
--- a/src/lang/irish.txt
+++ b/src/lang/irish.txt
@@ -1770,10 +1770,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/italian.txt b/src/lang/italian.txt
index 21b6ba3ec6..23ae0d6794 100644
--- a/src/lang/italian.txt
+++ b/src/lang/italian.txt
@@ -1821,10 +1821,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt
index e67c2598f6..7f00d7e9e4 100644
--- a/src/lang/japanese.txt
+++ b/src/lang/japanese.txt
@@ -1774,10 +1774,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/korean.txt b/src/lang/korean.txt
index 92507f15eb..cc568c2d3c 100644
--- a/src/lang/korean.txt
+++ b/src/lang/korean.txt
@@ -472,6 +472,7 @@ STR_TOOLBAR_SOUND_MUSIC :효과음/배
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :최근 메시지/뉴스 기록
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :과거 메시지 목록
+STR_NEWS_MENU_DELETE_ALL_MESSAGES :모든 뉴스 메시지 삭제
############ range ends here
############ range for about menu starts
@@ -996,13 +997,18 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}사용
STR_GAME_OPTIONS_RESOLUTION_OTHER :기타
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}인터페이스 크기
-STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스의 크기를 선택하십시오.
+STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스의 크기를 선택합니다.
-STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :보통
+STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :기본 크기
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2배 크기
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4배 크기
+STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}글씨 크기
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스에서 사용할 글씨 크기를 선택합니다.
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :기본 크기
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :2배 크기
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4배 크기
STR_GAME_OPTIONS_BASE_GRF :{BLACK}기본 그래픽 세트
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}사용하실 기본 그래픽을 선택하세요.
@@ -1206,7 +1212,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :열차에 적
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :경사도 설정 (자동차/전차용): {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :자동차/전차에 적용시킬 경사도를 설정합니다. 값이 높을수록 차량이 언덕을 오를 때 더 힘이 듭니다.
-STR_CONFIG_SETTING_FORBID_90_DEG :열차/선박의 90도 회전을 금지함: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG :열차의 90도 회전을 금지함: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :─ 모양의 수평 선로와 │ 모양의 수직 선로가 바로 이어져 만날 때 90도 회전이 발생합니다. 이 설정을 켜면, 열차가 칸 가장자리를 통과할 때 90도로 회전할 수 있도록 허용합니다. 이 설정은 선박의 회전 반경에도 적용됩니다.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :역이 같은 방향으로 붙어있지 않아도 같은 이름의 역 짓기 허용: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :이미 존재하는 역을 직접 건드리지 않고도 역의 일부분을 새로 추가/확장하는 것을 허용합니다. 인접한 칸에 기존과 다른 새로운 역을 놓을 때에는 CTRL+클릭해야 합니다.
@@ -1264,8 +1270,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :항공기 속
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :항공 수송에 대한 수익을 제한하기 위해, 다른 운송 수단의 속력을 1로 보았을 때의 항공기의 속력 비율을 설정합니다.
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :(실제 속력) x {COMMA}분의 1
STR_CONFIG_SETTING_PLANE_CRASHES :항공기 추락 빈도수: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :항공기 충돌 사고가 일어날 수 있는지 여부를 설정합니다.
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :없음
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :항공기 충돌 사고가 일어날 수 있는지 여부를 설정합니다.{}* 대형 항공기는 소형 공항에 착륙할 때 항상 충돌 사고를 일으킬 가능성이 있습니다.
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :없음*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :적음
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :보통
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :도시 소유의 도로 위에 버스 정류장 건설 허용: {STRING}
@@ -1996,10 +2002,7 @@ STR_OSNAME_WINDOWS :{G=f}Windows
STR_OSNAME_DOS :{G=f}DOS
STR_OSNAME_UNIX :{G=f}Unix
STR_OSNAME_OSX :{G=f}OS{NBSP}X
-STR_OSNAME_BEOS :{G=f}BeOS
STR_OSNAME_HAIKU :{G=f}Haiku
-STR_OSNAME_MORPHOS :{G=f}MorphOS
-STR_OSNAME_AMIGAOS :{G=f}AmigaOS
STR_OSNAME_OS2 :{G=f}OS/2
STR_OSNAME_SUNOS :{G=f}SunOS
@@ -2288,6 +2291,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}접속
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}서버 암호가 걸려있습니다. 암호를 입력하세요.
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}회사 암호가 걸려있습니다. 암호를 입력하세요.
+STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}접속자 목록
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :접속자 목록
@@ -3256,6 +3260,9 @@ STR_FRAMERATE_DRAWING :{BLACK}그래
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} 세계 화면:
STR_FRAMERATE_VIDEO :{BLACK}비디오 출력:
STR_FRAMERATE_SOUND :{BLACK}사운드 합성:
+STR_FRAMERATE_ALLSCRIPTS :{BLACK} 총 게임 스크립트/AI:
+STR_FRAMERATE_GAMESCRIPT :{BLACK} 게임 스크립트:
+STR_FRAMERATE_AI :{BLACK} 인공지능 {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :게임 루프
@@ -3270,6 +3277,9 @@ STR_FRAMETIME_CAPTION_DRAWING :그래픽 렌
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :세계 화면 렌더링
STR_FRAMETIME_CAPTION_VIDEO :비디오 출력
STR_FRAMETIME_CAPTION_SOUND :사운드 합성
+STR_FRAMETIME_CAPTION_ALLSCRIPTS :게임 스크립트/인공지능의 전체 스크립트 양입니다.
+STR_FRAMETIME_CAPTION_GAMESCRIPT :게임 스크립트
+STR_FRAMETIME_CAPTION_AI :인공지능 {NUM} {STRING}
############ End of leave-in-this-order
@@ -3634,6 +3644,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}성취
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} 목표
STR_GOALS_SPECTATOR_CAPTION :{WHITE}전체 목표
+STR_GOALS_SPECTATOR :전체 목표
STR_GOALS_GLOBAL_TITLE :{BLACK}전체 목표:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- 없음 -
@@ -3682,6 +3693,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}산업
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}의 스토리 북
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}전체 스토리 북
+STR_STORY_BOOK_SPECTATOR :전체 스토리 북
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM}쪽
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}드롭 다운 목록에서 이동하고자 하는 쪽수를 선택하세요.
diff --git a/src/lang/latin.txt b/src/lang/latin.txt
index 38d620d047..08fc44b6ed 100644
--- a/src/lang/latin.txt
+++ b/src/lang/latin.txt
@@ -1971,10 +1971,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt
index 3ac147ee90..edabacbb0b 100644
--- a/src/lang/latvian.txt
+++ b/src/lang/latvian.txt
@@ -1717,10 +1717,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt
index 3db0564804..e0490f9334 100644
--- a/src/lang/lithuanian.txt
+++ b/src/lang/lithuanian.txt
@@ -1989,10 +1989,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt
index f85dc2b387..9c8754470f 100644
--- a/src/lang/luxembourgish.txt
+++ b/src/lang/luxembourgish.txt
@@ -1773,10 +1773,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/malay.txt b/src/lang/malay.txt
index 3a7b5e5e73..5692526ce8 100644
--- a/src/lang/malay.txt
+++ b/src/lang/malay.txt
@@ -1531,10 +1531,7 @@ STR_OSNAME_WINDOWS :Tetingkap
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt
index 2262d93c93..d3ee3f14fe 100644
--- a/src/lang/norwegian_bokmal.txt
+++ b/src/lang/norwegian_bokmal.txt
@@ -1186,6 +1186,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Tillat endring
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillat endring av landskapet under bygninger og spor uten å fjerne dem
STR_CONFIG_SETTING_CATCHMENT :Mer realistisk størrelse på oppfangingsområder: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Ha oppsamlingsområder i forskjellige størrelser for forskjellige typer stasjoner og lufthavner
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Firmaets stasjoner kan betjene industrier med tilknyttede nøytrale stasjoner: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, vil industrier med egne stasjoner (slik som oljerigger) også kunne betjenes av firma-stasjoner bygget i nærheten. Hvis deaktivert, vil disse industriene bare kunne betjenes av sine egne stasjoner. Nærliggende firma-stasjoner vil ikke kunne betjene dem, heller ikke vil den egne stasjonen betjene noe annet enn den tilhørende industrien.
STR_CONFIG_SETTING_EXTRADYNAMITE :Tillat fjerning av flere veier, broer osv. eid av byene: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Gjør det enklere å fjerne infrastruktur og bygninger som tilhører byer
STR_CONFIG_SETTING_TRAIN_LENGTH :Maksimal toglengde: {STRING}
@@ -1202,8 +1204,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Brattheten av e
STR_CONFIG_SETTING_PERCENTAGE :{COMMA} %
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skråningens bratthet for veikjøretøy: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Brattheten av et skrått kartelement for et veikjøretøy. Høyere verdier gjør det vanskeligere å kjøre opp bakken
-STR_CONFIG_SETTING_FORBID_90_DEG :Forby tog og skip å gjøre 90° svinger: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på tilstøtende kartelement, som dermed fører til at toget må snu 90 grader når det krysser kartelementet, istedenfor de vanlige 45 grader for andre spor-kombinasjoner. Dette gjelder også for båters svingradius
+STR_CONFIG_SETTING_FORBID_90_DEG :Forby tog å gjøre 90° svinger: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på tilstøtende kartelement, som medfører at toget må svinge 90 grader når det krysser kartelementet, i stedet for de vanlige 45 grader for andre spor-kombinasjoner.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillat sammenslåing av stasjoner som ikke ligger inntil hverandre: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Gjør det mulig å legge til deler til en stasjon uten at de er direkte ved siden av hverandre. Bruk Ctrl+klikk for å bygge slike stasjoner.
STR_CONFIG_SETTING_INFLATION :Inflasjon: {STRING}
@@ -1260,8 +1262,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Flyfart faktor:
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Still den relative hastigheten til fly sammenlignet med andre kjøretøy, for å redusere inntekter ved luftfrakt
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Antall flystyrter: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bestem sjansen for en flykatastrofe
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bestem sannsynligheten for flykrasj.{}* Store fly vil alltid kunne krasje når de lander på små flyplasser.
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Redusert
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalt
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillat stoppesteder med gjennomkjøring på by-eide veier: {STRING}
@@ -1586,6 +1588,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ved å aktivere
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbudt
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tillatt
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tillatt, egendefinert oppsett av by
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :varegenerering byer: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hvor mye varer som genereres av hus i byer, i forhold til byens folketall.{}Kvadratisk vekst: En by av dobbel størrelse genererer fire ganger så mange passasjerer.{}Lineær vekst: En by av dobbel størrelse genererer dobbelt så mange passasjerer.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plassering av trær i spillet: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroll tilfeldige utseender til tre under spillet. Dette kan påvirke industrier som avhenger av trevekst, for eksempel trelast
@@ -1800,10 +1806,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt
index b17460cca8..fb12ae9a2f 100644
--- a/src/lang/norwegian_nynorsk.txt
+++ b/src/lang/norwegian_nynorsk.txt
@@ -1693,10 +1693,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/polish.txt b/src/lang/polish.txt
index 5b0a6748bd..ebf5e4cf3e 100644
--- a/src/lang/polish.txt
+++ b/src/lang/polish.txt
@@ -1374,6 +1374,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Podwójny
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Poczwórny
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Poczwórny
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Podstawowy zestaw grafik
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wybierz podstawowy zestaw grafik do użycia
@@ -1955,6 +1956,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Aktywacja tej o
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Zabronione
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dozwolone
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dozwolone, dowolny układ miasta
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Liniowy
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Rozmieszczenie drzew w grze: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Losowe pojawianie się drzew podczas gry. Może mieć to wpływ na zakłady opierające się na wyrastaniu drzew, np. tartaki
@@ -2169,10 +2171,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
@@ -2759,7 +2758,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednokie
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zamiana sygnałów{}Jeżeli włączone, kliknięcie na istniejący sygnał spowoduje zamianę go na wybrany typ i wariant. CTRL+klik przełącza istniejący wariant. Shift+klik pokazuje szacowany koszt zamiany
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Gęstość sygnałów przy przeciąganiu
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Zmniejsz odległość między sygnałami przy przeciąganiu
-STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zwiększ gęstość sygnałów przy przeciąganiu
+STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zwiększ odległość między sygnałami przy przeciąganiu
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Wybierz rodzaj mostu kolejowego
@@ -3083,6 +3082,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę
+STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
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.
@@ -3107,6 +3107,7 @@ STR_FRAMERATE_SOUND :{WHITE}Miksowan
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Pętla gry
+STR_FRAMETIME_CAPTION_GL_ECONOMY :Obsługa ładunku
STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Opóźnienie wykresu połączeń
STR_FRAMETIME_CAPTION_DRAWING :Renderowanie grafiki
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderowanie okna podgląu świata
@@ -3466,6 +3467,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Daj ła
# Goal window
STR_GOALS_CAPTION :{WHITE}Cele firmy {COMPANY}
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Cele globalne
+STR_GOALS_SPECTATOR :Cele globalne
STR_GOALS_GLOBAL_TITLE :{BLACK}Cele globalne:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Brak -
@@ -3514,6 +3516,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik na
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}Dziennik Historii Firmy {COMPANY}
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Ogólny przewodnik
+STR_STORY_BOOK_SPECTATOR :Ogólny przewodnik
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strona {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skocz na właściwą stronę wybierając ją z listy.
diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt
index 956d3757f8..ac2403022e 100644
--- a/src/lang/portuguese.txt
+++ b/src/lang/portuguese.txt
@@ -1798,10 +1798,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt
index ea52338675..b260965928 100644
--- a/src/lang/romanian.txt
+++ b/src/lang/romanian.txt
@@ -1747,10 +1747,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/russian.txt b/src/lang/russian.txt
index 5237175b81..8fe4cc9c64 100644
--- a/src/lang/russian.txt
+++ b/src/lang/russian.txt
@@ -1337,6 +1337,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Разреши
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разрешить изменение ландшафта под домами и дорогами, не требуя их сноса
STR_CONFIG_SETTING_CATCHMENT :Зона покрытия зависит от типа станции: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Установить различный размер зоны покрытия для различных типов станций и аэропортов
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Предприятия с собственными станциями используют станции игроков: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :При включении - предприятия, имеющие собственные станции погрузки (например, нефтяные платформы), смогут обслуживаться также и станциями игроков, построенными поблизости.{}При отключении - предприятия будут производить погрузку только через свои внутренние станции, и эти станции будут обслуживать только своё предприятие.
STR_CONFIG_SETTING_EXTRADYNAMITE :Разрешить снос (почти) всех городских объектов: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Упростить снос городских зданий и инфраструктуры
STR_CONFIG_SETTING_TRAIN_LENGTH :Максимальная длина состава: {STRING}
@@ -1353,8 +1355,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Настрой
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Крутизна склона для автотранспорта: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Настройка крутизны склона для автотранспорта. Высокие значения делают подъём более тяжёлым.
-STR_CONFIG_SETTING_FORBID_90_DEG :Запретить 90-градусные повороты на ж/д и море: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Поворот на 90° происходит, когда к горизонтальному участку рельсов примыкает вертикальный. В остальных случаях поезда поворачивают на 45°. Запрет поворота на 90° относится также и к кораблям.
+STR_CONFIG_SETTING_FORBID_90_DEG :Запретить 90-градусные повороты на ж/д: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Поворот на 90° происходит, когда к горизонтальному участку рельсов примыкает вертикальный. В остальных случаях поезда поворачивают на 45°.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Разрешить объединение не примыкающих друг к другу станций: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Разрешить объединять несколько станций в одну, даже если они не примыкают друг к другу. Требуется нажать Ctrl+щелчок при расширении станции.
STR_CONFIG_SETTING_INFLATION :Включить инфляцию: {STRING}
@@ -1410,7 +1412,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Множите
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Ограничение скорости воздушных судов относительно другого транспорта для снижения сверхприбылей от использования самолётов
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Вероятность падения самолётов: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Настройка вероятности падения самолёта
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Настройка вероятности падения самолёта.{}У крупных самолётов всегда есть риск крушения при посадке в маленьких аэропортах.
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :отсутствует
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :сниженная
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :обычная
@@ -1738,6 +1740,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Включен
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :запрещено
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :разрешено
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :разрешено с выбором сети дорог
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Количество грузов и пассажиров в городах: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Зависимость количества грузов и пассажиров от размера города.{}Линейная: в городе двукратного размера появляется в 2 раза больше пассажиров.{}Квадратичная: в городе двукратного размера появляется в 4 раза больше пассажиров.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :квадратичная зависимость (оригинальная)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :линейная зависимость
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Размножение деревьев в игре: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Настройка возможности самостоятельного размножения деревьев в игре. Это может влиять на работоспособность некоторых предприятий, например, лесопилок.
@@ -1952,10 +1958,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt
index e4c9e11e56..d386d3f7a1 100644
--- a/src/lang/serbian.txt
+++ b/src/lang/serbian.txt
@@ -1977,10 +1977,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt
index f855c211c6..b9e4aefa59 100644
--- a/src/lang/simplified_chinese.txt
+++ b/src/lang/simplified_chinese.txt
@@ -1780,10 +1780,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt
index 57b7d4a932..5fb50eba1e 100644
--- a/src/lang/slovak.txt
+++ b/src/lang/slovak.txt
@@ -1838,10 +1838,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt
index 421ec1f8c2..5ad9581ef3 100644
--- a/src/lang/slovenian.txt
+++ b/src/lang/slovenian.txt
@@ -1924,10 +1924,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt
index 494a9fe805..47fb4ac8de 100644
--- a/src/lang/spanish.txt
+++ b/src/lang/spanish.txt
@@ -1783,10 +1783,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt
index c432e5d64a..b7959abeab 100644
--- a/src/lang/spanish_MX.txt
+++ b/src/lang/spanish_MX.txt
@@ -1201,8 +1201,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Grado de inclin
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinación de pendientes para vehículos de carretera: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Grado de inclinación de una casilla con pendiente para un vehículo de carretera. Los valores altos hacen que sea más difícil subir las colinas
-STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir a trenes y barcos realizar giros de 90°: {STRING}
-STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90° ocurren en vías férreas perpendiculares donde el tren gira 90° al pasar de una casilla a otra, en lugar de los 45° habituales en otras combinaciones de vías. Esto también se aplica al radio de giro de los barcos
+STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir a trenes realizar giros de 90°: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90° ocurren en vías férreas perpendiculares donde el tren gira 90° al pasar de una casilla a otra, en lugar de los 45° habituales en otras combinaciones de vías.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir la ampliación de estaciones no adyacentes: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permitir añadir de partes a una estación sin tener que estar en contacto directo con las partes existentes. Se debe pulsar Ctrl+Clic para añadir las nuevas partes
STR_CONFIG_SETTING_INFLATION :Inflación: {STRING}
@@ -1259,7 +1259,7 @@ STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Establece la ve
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Cantidad de accidentes aéreos: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Probabilidad de que ocurran accidentes aéreos
-STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ninguno
+STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ninguno*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reducida
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir la construcción de paradas intermedias sobre carreteras en pueblos: {STRING}
@@ -1798,10 +1798,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt
index 956e746303..129ea02bf0 100644
--- a/src/lang/swedish.txt
+++ b/src/lang/swedish.txt
@@ -1791,10 +1791,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt
index 372921cacf..21a9663655 100644
--- a/src/lang/tamil.txt
+++ b/src/lang/tamil.txt
@@ -1540,10 +1540,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/thai.txt b/src/lang/thai.txt
index 447fa963f8..d9332595ba 100644
--- a/src/lang/thai.txt
+++ b/src/lang/thai.txt
@@ -1721,10 +1721,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :ระบบปฏิบัติการ Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt
index 6a3005eecf..cea370e736 100644
--- a/src/lang/traditional_chinese.txt
+++ b/src/lang/traditional_chinese.txt
@@ -1770,10 +1770,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt
index ab600084dc..329c2b80f4 100644
--- a/src/lang/turkish.txt
+++ b/src/lang/turkish.txt
@@ -1796,10 +1796,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt
index 4ba9a750ae..dcb381b495 100644
--- a/src/lang/ukrainian.txt
+++ b/src/lang/ukrainian.txt
@@ -314,6 +314,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}миль/год
@@ -589,6 +591,7 @@ STR_TOOLBAR_SOUND_MUSIC :Звук/Муз
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Останнє повідомлення
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Історія повідомлень
+STR_NEWS_MENU_DELETE_ALL_MESSAGES :Видалити всі повідомлення
############ range ends here
############ range for about menu starts
@@ -600,6 +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_ABOUT_OPENTTD :Про гру 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Вирівнювання спрайтів
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Вкл./відкл. обмежуючі рамки
@@ -778,6 +782,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}Немає доступної музики
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}"
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Доріжка
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Заголовок
@@ -798,11 +803,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Вкл./
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Показує вікно вибору музичної програми
# Playlist window
+STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Музична програма - '{STRING}'
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Назва доріжки
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Програма - '{STRING}'
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Очистити
+STR_PLAYLIST_CHANGE_SET :{BLACK}Змінити набір
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Очистити програму (тільки для Набору 1 або Набору 2)
+STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Виберіть інший набір музичного оформлення
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Виберіть доріжку, щоб додати до програми (тільки для Набору 1 або Набору 2)
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Клацніть мишою на мелодії для її видалення зі списку (лише Набір1 та Набір2)
@@ -938,6 +946,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Керівник)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} субсидував спорудження нового міста {TOWN}!
+STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Нове місто {TOWN} побудовано!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Будується {STRING} біля {TOWN}!
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Насаджено {STRING} біля {TOWN}!
@@ -1005,9 +1014,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Вікно {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Копіювати до вікна
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Змінити вікно
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Копіювати місцеположення з основного екрану до цього вікна
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Вставити з вікна
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Вставити в головне вікно
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Перейти на основному екрані до цього місця
# Game options window
@@ -1051,6 +1060,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}Сторона руху транспорту
@@ -1113,7 +1123,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Нормаль
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Подвійний розмір
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Почетверний розмір
+STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Розмір шрифту
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Виберть розмір шрифту інтерфейсу
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Нормальний
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Подвійний розмір
+STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Почетверний розмір
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовий набір графіки
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати
@@ -1297,6 +1312,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Дозволи
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Можливість змінювати ландшафт під будівлями та дорогами без необхідності їх зносу
STR_CONFIG_SETTING_CATCHMENT :Більш реалістічні зони покриття станцій: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :При включенні розмір зони покриття станції залежить від її типу та розміру
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Підприємства з власними станціями обслуговують станції гравців: {STRING}
+STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Якщо увімкнено - підприємства, що мають власні станції завантаження (наприклад, нафтові платформ), зможуть обслуговуватися також і збудованими поруч станціями гравців.{}При відключенні - підприємства будуть виконувати завантаження тільки через свої внутрішні станції, а ці станції будуть обслуговувати лише своє підприємство.
STR_CONFIG_SETTING_EXTRADYNAMITE :Дозволити видаляти більше міських будівель: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :При включенні видалення міських будівель та інфраструктури стає біль простішим
STR_CONFIG_SETTING_TRAIN_LENGTH :Максимальна довжина потягів: {STRING}
@@ -1313,7 +1330,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Налашту
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Крутизна схилів для дорожнього транспорту: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Налаштування крутизни схилів для дорожнього транспорту. Чим вище значення, тим складніше підйом на схилах.
-STR_CONFIG_SETTING_FORBID_90_DEG :Заборонити поїздам і кораблям повертати на 90°: {STRING}
+STR_CONFIG_SETTING_FORBID_90_DEG :Заборонити поїздам повертати на 90°: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :При включенні прямокутні перетини шляхів не будуть вважатися поворотами. Для повороту необходно прокладати шляхи під кутом 45°.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Станції можуть складатися з не суміжних частин: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дозволяє об'єднання в одну станцію частин, що не примикають одна до одної. Щоб приєднати нову станцію до існуючої необхідно використовувати Ctrl+Click при будівництві.
@@ -1370,7 +1387,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Множник
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Налаштування співвідношення швідкості повітряного транспорту та швидкості інших видів транспорту з метою зменьшення високих прибутків від авіації.
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Частота повітряних катастроф: {STRING}
-STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Налаштування частоти повітряних катастроф
+STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Налаштування частоти повітряних катастроф.{}* Великі літаки мають більший ризик катастрофив малих аеропортах
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Немає
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Низька
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Нормальна
@@ -1382,6 +1399,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 :При включенні кожен аеропорт буде доступним для будівництва безстроково після його впровадження.
@@ -1466,6 +1485,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Колір по
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :зелений
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :темнозелений
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :фіолетовий
+STR_CONFIG_SETTING_SCROLLMODE :Переміщення вікна обзору: {STRING}
+STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Спосіб пересування ігрового поля
+STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Переміщувати ПКМ, зафіксувавши курсор
+STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Переміщувати карту ПКМ, зафіксувавши курсор
+STR_CONFIG_SETTING_SCROLLMODE_RMB :Переміщувати карту ПКМ
+STR_CONFIG_SETTING_SCROLLMODE_LMB :Переміщувати ЛКМ
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавна прокрутка у вікні: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Налаштування способу прокрутки основного екрану при клацанні мишою по зменшенній карті, або інших діях, що призводять до переміщення по карті (кнопки "Оглянути", тощо). При включенні опції переміщення карти відбувається плавно. При виключенні - відбувається моментальне переміщення в необхідну точку
STR_CONFIG_SETTING_MEASURE_TOOLTIP :Показувати підказки про розміри під час будівництва: {STRING}
@@ -1497,6 +1522,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Команда+
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+клац мишою
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :не емулювати
+STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Закрити вікно правою кнопкою миші: {STRING}
+STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Закривати вікно кліком правої кнопки миші по ньому. При цьому віключається поява підказок за правою кнопкою.
STR_CONFIG_SETTING_AUTOSAVE :Автозбереження: {STRING}
STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Оберіть проміжок між автоматичними збереженнями гри
@@ -1686,6 +1713,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Дозволя
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Заборонено
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Дозволено
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Дозволено (з вибором дорожньої сітки)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Кількість вантажів та пасажирів у містах: {STRING}
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Скільки вантажів генерується будинками в містах відносно населення.{}Квадратична залежність: Вдвічі більше місто генерує вчетверо більше вантажів.{}Лінійна: Вдвічі більше місто генерує вдвічі більше вантажів.
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Квадратична(оригінальна)
+STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінійна залежність
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Поява дерев під час гри: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Налаштування випадкової появи дерев на карті в процесі гри. Ця настройка також впливає на відповідні підприємства, такі як лісопилки.
@@ -1886,6 +1917,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Пере
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Показати налаштування AI / Ігрового Скрипта
STR_INTRO_TOOLTIP_QUIT :{BLACK}Вийти з OpenTTD
+STR_INTRO_BASESET :{BLACK}В обраному наборі базової графіки немає {NUM} спрайт{P а ів ів}. Будь ласка, оновіть набір графіки.
STR_INTRO_TRANSLATION :{BLACK}Переклад має {NUM} неперекладених рядків. Зареєструйтесь як перекладач вашої мови та покращіть OpenTTD. Детальніше читайте в readme.txt.
# Quit window
@@ -1899,10 +1931,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
@@ -1931,6 +1960,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Змін
STR_CHEAT_SETUP_PROD :{LTBLUE}Дозволити зміну рівня виробництва: {ORANGE}{STRING}
# Livery window
+STR_LIVERY_CAPTION :{WHITE}Кольори компанії «{COMPANY}»
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показати загальне фарбування
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показати фарбування поїздів
@@ -2190,6 +2220,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Роз'
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сервер захищено паролем. Введіть пароль
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанія захищена паролем. Введіть пароль
+STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Список клієнтів
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клієнтів
@@ -2402,6 +2433,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Леге
STR_LINKGRAPH_LEGEND_ALL :{BLACK}Усе
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Немає
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Виберіть компанії для відображення
+STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}не використовується
@@ -2489,9 +2521,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}Виберіть міст
@@ -2712,6 +2744,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Назв
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Приймає: {LTBLUE}
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
+STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Тип зал.колії: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Ліміт швидкості залізниці: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ліміт швидкості авто: {LTBLUE}{VELOCITY}
@@ -2724,29 +2757,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поле
STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Засніжена земля
STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустеля
-STR_LAI_RAIL_DESCRIPTION_TRACK :Звичайна колія
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Звичайна колія з блок-сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Звичайна колія з пресигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Звичайна колія з вихідними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Звичайна колія з комбосигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Звичайна колія з маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Звичайна колія з односторонніми маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Звичайна колія з блок-сигналами і пресигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Звичайна колія з блок-сигналами і вихідними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Звичайна колія з блок-сигналами і комбосигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Звичайна колія з блок-сигналами та маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Звичайна колія з блок-сигналами та одност. маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Звичайна колія з пресигналами і вихідними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Звичайна колія з пресигналами і комбосигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Звичайна колія з пресигналами і маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Звичайна колія з пресигналами і одност. маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Звичайна колія з вихідними сигналами та комбосигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Звичайна колія з вихідними та маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Звичайна колія з вихідними та одност. маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Звичайна колія з комбосигналами і маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Звичайна колія з комбосигналами та одност. маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Звичайна колія з маршрутними та одност. маршрутними сигналами
-STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Звичайна колія залізничне депо
+STR_LAI_RAIL_DESCRIPTION_TRACK :Залізнична колія
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Залізнична колія з блок-сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Залізнична колія з пресигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Залізнична колія з вихідними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Залізнична колія з комбосигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Залізнична колія з маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Залізнична колія з односторонніми маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Залізнична колія з блок-сигналами і пресигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Залізнична колія з блок-сигналами і вихідними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Залізнична колія з блок-сигналами і комбосигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Залізнична колія з блок-сигналами та маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Залізнична колія з блок-сигналами та одност. маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Залізнична колія з пресигналами і вихідними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Залізнична колія з пресигналами і комбосигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Залізнична колія з пресигналами і маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Залізнична колія з пресигналами і одност. маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Залізнична колія з вихідними сигналами та комбосигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Залізнична колія з вихідними та маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Залізнична колія з вихідними та одност. маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Залізнична колія з комбосигналами і маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Залізнична колія з комбосигналами та одност. маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Залізнична колія з маршрутними та одност. маршрутними сигналами
+STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Залізничне депо
STR_LAI_ROAD_DESCRIPTION_ROAD :Дорога
STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Дорога з вуличними ліхтарями
@@ -2813,13 +2846,58 @@ STR_ABOUT_VERSION :{BLACK}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} ms
+STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
+STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} мс
+STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} кадрів/сек
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадр{P "" "и" "ів"}/сек
+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}Обробка звуків:
+STR_FRAMERATE_ALLSCRIPTS :{BLACK} Виконання скриптів:
+STR_FRAMERATE_GAMESCRIPT :{BLACK} Ігровий Скрипт:
+STR_FRAMERATE_AI :{BLACK} ШІ {NUM} {STRING}
############ 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_VIEWPORTS :Додаткові вікна перегляду
+STR_FRAMETIME_CAPTION_VIDEO :Виведення на екран
+STR_FRAMETIME_CAPTION_SOUND :Обробка звуку
+STR_FRAMETIME_CAPTION_ALLSCRIPTS :Час виконання скриптів
+STR_FRAMETIME_CAPTION_GAMESCRIPT :Час виконання ігрового скрипту
+STR_FRAMETIME_CAPTION_AI :ШІ {NUM} {STRING}
############ End of leave-in-this-order
@@ -2845,6 +2923,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}Введіть назву файла збереженої гри
@@ -2962,7 +3043,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 :Застаріла
+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}Таких файлів не знайдено
@@ -3043,6 +3129,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Вихід за
STR_NEWGRF_ERROR_GRM_FAILED :Недоступні необхідні ресурси GRF (спрайт {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} був вимкнений {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}Обережно!
@@ -3107,6 +3195,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Введ
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Міста
STR_TOWN_DIRECTORY_NONE :{ORANGE}- немає -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполіс){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Назви міст - натисніть на назву, щоб показати місто у центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на місто
STR_TOWN_POPULATION :{BLACK}Населення світу: {COMMA}
@@ -3114,6 +3203,7 @@ STR_TOWN_POPULATION :{BLACK}Насе
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (місто)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Населення: {ORANGE}{COMMA}{BLACK} Будинки: {ORANGE}{COMMA}
+STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} минулого місяця: {ORANGE}{COMMA}{BLACK} макс: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Вантаж, потрібний для зростання міста:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} потрібно
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} потрібно взимку
@@ -3166,6 +3256,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Під
# Goal window
STR_GOALS_CAPTION :{WHITE}Цілі {COMPANY}
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Глобальні цілі:
+STR_GOALS_SPECTATOR :Загальні задачі
STR_GOALS_GLOBAL_TITLE :{BLACK}Глобальні цілі:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- нема -
@@ -3214,6 +3305,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Нати
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}Історія {COMPANY}
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Світова історія
+STR_STORY_BOOK_SPECTATOR :Всесвітня історія
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Стор. {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Перейти до сторінки, вибраної в цьому списку.
@@ -3420,7 +3512,13 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття!
+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}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Змінити виробництво (кратне 8, до 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Змінити обсяг виробництва (до 800%)
@@ -3474,6 +3572,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}Видалити групу
@@ -3484,6 +3583,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Позбути
STR_GROUP_RENAME_CAPTION :{BLACK}Перейменувати групу
+STR_GROUP_PROFIT_THIS_YEAR :Прибуток цього року:
+STR_GROUP_PROFIT_LAST_YEAR :Прибуток минулого року:
+STR_GROUP_OCCUPANCY :Використання:
+STR_GROUP_OCCUPANCY_VALUE :{NUM}%
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Новий неелектрифікований поїзд
@@ -3513,9 +3616,11 @@ 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} клітинок
+STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тип літака: {GOLD}{STRING}
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Список поїздів. Клацніть на поїзд для інформації. Ctrl+клац мишою вимикає показ типу транспорту
STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Список автомобілів. Клацніть на авто для отримання інформації. Ctrl+клац мишою вимикає показ типу транспорту
@@ -3650,6 +3755,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :магнітн
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Ціна: {CURRENCY_LONG} Вага: {WEIGHT_SHORT}{}Швидкість: {VELOCITY}{}Потужність: {POWER}{}Вартість експлуатації: {CURRENCY_LONG}/рік{}Місткість: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Вартість: {CURRENCY_LONG} Вага: {WEIGHT_SHORT}{}Швидкість: {VELOCITY} Потужність: {POWER} Макс. тяга: {6:FORCE}{}Вартість експлуатації: {4:CURRENCY_LONG}/рік{}Місткість: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Місткість: {CARGO_LONG}{}Вартість експлуатації: {CURRENCY_LONG}/рік
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Тип: {STRING}{}Місткість: {CARGO_LONG}, {CARGO_LONG}{}Вартість експлуатації: {CURRENCY_LONG}/рік
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Тип: {STRING}{}Місткість: {CARGO_LONG}{}Експлуатація: {CURRENCY_LONG}/рік
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Тип: {STRING} Дальність: {COMMA} клітин{P ка ки ок}Місткість: {CARGO_LONG}, {CARGO_LONG}{}Експлуатація: {CURRENCY_LONG}/рік
+STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Тип: {STRING} Дальність: {COMMA} клітин{P ка ки ок}Місткість: {CARGO_LONG}{}Експлуатація: {CURRENCY_LONG}/рік
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Оновити {STRING} - {STRING}
@@ -3679,6 +3788,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Нати
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Переключення між вікнами заміни потягів та вагонів.
STR_REPLACE_ENGINES :Локомотиви
STR_REPLACE_WAGONS :Вагони
+STR_REPLACE_ALL_RAILTYPE :Весь з/д транспорт
STR_REPLACE_HELP_RAILTYPE :{BLACK}Виберіть тип колії, для якого ви збираєтесь оновити потяги
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Показує, яким потягом буде замінено потяг, вибраний ліворуч
@@ -3771,6 +3881,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} р{P і
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} р{P ік оки оків} ({COMMA})
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING}
+STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING} {BLACK}Дальність: {LTBLUE}{COMMA} клітин{P ка ки ок }
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Макс. тяга: {LTBLUE}{FORCE}
@@ -3904,6 +4016,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 :дорівнює
@@ -4336,6 +4449,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... ця
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... дорога не в тому напрямку
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... проїзні зупинки не можуть мати поворотів
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... проїзні зупинки не можуть мати перехресть
+STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... дорога одностороння або заблокована
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Не можна зруйнувати частину станції...
@@ -4588,6 +4702,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Оригіна
STR_BASESOUNDS_NONE_DESCRIPTION :Порожній набір звуків.
STR_BASEMUSIC_WIN_DESCRIPTION :Оригінальна музика з Transport Tycoon Deluxe Windows edition.
STR_BASEMUSIC_DOS_DESCRIPTION :Оригінальна музика Transport Tycoon Deluxe(DOS)
+STR_BASEMUSIC_TTO_DESCRIPTION :Оригінальна музика Transport Tycoon Deluxe(DOS)
STR_BASEMUSIC_NONE_DESCRIPTION :Порожній набір музики.
##id 0x2000
diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt
index 7366b99fcf..8d93f19360 100644
--- a/src/lang/unfinished/chuvash.txt
+++ b/src/lang/unfinished/chuvash.txt
@@ -665,10 +665,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt
index 4d4101b1aa..2c399a5208 100644
--- a/src/lang/unfinished/frisian.txt
+++ b/src/lang/unfinished/frisian.txt
@@ -1704,10 +1704,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt
index c080592407..b25ee84b06 100644
--- a/src/lang/unfinished/macedonian.txt
+++ b/src/lang/unfinished/macedonian.txt
@@ -952,9 +952,6 @@ STR_QUIT_NO :{BLACK}Не
STR_OSNAME_WINDOWS :Windows
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt
index b95e1f93fd..2259c5160a 100644
--- a/src/lang/unfinished/persian.txt
+++ b/src/lang/unfinished/persian.txt
@@ -1487,10 +1487,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :هایکو
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt
index 2c0c332f2c..c0f94b9b5a 100644
--- a/src/lang/unfinished/urdu.txt
+++ b/src/lang/unfinished/urdu.txt
@@ -1384,10 +1384,7 @@ STR_OSNAME_WINDOWS :ونڈوز
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :یونیکس
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt
index acc025f31a..e2882ed865 100644
--- a/src/lang/vietnamese.txt
+++ b/src/lang/vietnamese.txt
@@ -1786,10 +1786,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt
index 91ad4d7457..3a4a8c2b50 100644
--- a/src/lang/welsh.txt
+++ b/src/lang/welsh.txt
@@ -1773,10 +1773,7 @@ STR_OSNAME_WINDOWS :Windows
STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS{NBSP}X
-STR_OSNAME_BEOS :BeOS
STR_OSNAME_HAIKU :Haiku
-STR_OSNAME_MORPHOS :MorphOS
-STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_OSNAME_SUNOS :SunOS
diff --git a/src/language.h b/src/language.h
index ec241dbd8c..8df59f74ff 100644
--- a/src/language.h
+++ b/src/language.h
@@ -13,9 +13,9 @@
#define LANGUAGE_H
#include "core/smallvec_type.hpp"
-#ifdef WITH_ICU_SORT
+#ifdef WITH_ICU_I18N
#include
-#endif /* WITH_ICU_SORT */
+#endif /* WITH_ICU_I18N */
#include "strings_type.h"
static const uint8 CASE_GENDER_LEN = 16; ///< The (maximum) length of a case/gender string.
@@ -104,9 +104,9 @@ extern LanguageList _languages;
/** The currently loaded language. */
extern const LanguageMetadata *_current_language;
-#ifdef WITH_ICU_SORT
+#ifdef WITH_ICU_I18N
extern icu::Collator *_current_collator;
-#endif /* WITH_ICU_SORT */
+#endif /* WITH_ICU_I18N */
bool ReadLanguagePack(const LanguageMetadata *lang);
const LanguageMetadata *GetLanguage(byte newgrflangid);
diff --git a/src/misc.cpp b/src/misc.cpp
index 41f96de41c..98d8955825 100644
--- a/src/misc.cpp
+++ b/src/misc.cpp
@@ -28,6 +28,9 @@
#include "core/pool_type.hpp"
#include "game/game.hpp"
#include "linkgraph/linkgraphschedule.h"
+#include "station_kdtree.h"
+#include "town_kdtree.h"
+#include "viewport_kdtree.h"
#include "tracerestrict.h"
#include "programmable_signals.h"
#include "viewport_func.h"
@@ -68,7 +71,6 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin
AllocateMap(size_x, size_y);
ViewportMapClearTunnelCache();
- ViewportClearStationSignCache();
ClearCommandLog();
_pause_mode = PM_UNPAUSED;
@@ -92,6 +94,10 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin
ClearCargoPacketDeferredPayments();
PoolBase::Clean(PT_NORMAL);
+ RebuildStationKdtree();
+ RebuildTownKdtree();
+ RebuildViewportKdtree();
+
FreeSignalPrograms();
FreeSignalDependencies();
diff --git a/src/music/libtimidity.cpp b/src/music/libtimidity.cpp
deleted file mode 100644
index 42c1e3c155..0000000000
--- a/src/music/libtimidity.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/* $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 .
- */
-
-/** @file libtimidity.cpp Playing music via the timidity library. */
-
-#include "../stdafx.h"
-#include "../openttd.h"
-#include "../sound_type.h"
-#include "../debug.h"
-#include "libtimidity.h"
-#include "midifile.hpp"
-#include "../base_media_base.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "../safeguards.h"
-
-/** The state of playing. */
-enum MidiState {
- MIDI_STOPPED = 0,
- MIDI_PLAYING = 1,
-};
-
-static struct {
- MidIStream *stream;
- MidSongOptions options;
- MidSong *song;
-
- MidiState status;
- uint32 song_length;
- uint32 song_position;
-} _midi; ///< Metadata about the midi we're playing.
-
-/** Factory for the libtimidity driver. */
-static FMusicDriver_LibTimidity iFMusicDriver_LibTimidity;
-
-const char *MusicDriver_LibTimidity::Start(const char * const *param)
-{
- _midi.status = MIDI_STOPPED;
- _midi.song = NULL;
-
- if (mid_init(param == NULL ? NULL : const_cast(param[0])) < 0) {
- /* If init fails, it can be because no configuration was found.
- * If it was not forced via param, try to load it without a
- * configuration. Who knows that works. */
- if (param != NULL || mid_init_no_config() < 0) {
- return "error initializing timidity";
- }
- }
- DEBUG(driver, 1, "successfully initialised timidity");
-
- _midi.options.rate = 44100;
- _midi.options.format = MID_AUDIO_S16LSB;
- _midi.options.channels = 2;
- _midi.options.buffer_size = _midi.options.rate;
-
- return NULL;
-}
-
-void MusicDriver_LibTimidity::Stop()
-{
- if (_midi.status == MIDI_PLAYING) this->StopSong();
- mid_exit();
-}
-
-void MusicDriver_LibTimidity::PlaySong(const MusicSongInfo &song)
-{
- std::string filename = MidiFile::GetSMFFile(song);
-
- this->StopSong();
- if (filename.empty()) return;
-
- _midi.stream = mid_istream_open_file(filename.c_str());
- if (_midi.stream == NULL) {
- DEBUG(driver, 0, "Could not open music file");
- return;
- }
-
- _midi.song = mid_song_load(_midi.stream, &_midi.options);
- mid_istream_close(_midi.stream);
- _midi.song_length = mid_song_get_total_time(_midi.song);
-
- if (_midi.song == NULL) {
- DEBUG(driver, 1, "Invalid MIDI file");
- return;
- }
-
- mid_song_start(_midi.song);
- _midi.status = MIDI_PLAYING;
-}
-
-void MusicDriver_LibTimidity::StopSong()
-{
- _midi.status = MIDI_STOPPED;
- /* mid_song_free cannot handle NULL! */
- if (_midi.song != NULL) mid_song_free(_midi.song);
- _midi.song = NULL;
-}
-
-bool MusicDriver_LibTimidity::IsSongPlaying()
-{
- if (_midi.status == MIDI_PLAYING) {
- _midi.song_position = mid_song_get_time(_midi.song);
- if (_midi.song_position >= _midi.song_length) {
- _midi.status = MIDI_STOPPED;
- _midi.song_position = 0;
- }
- }
-
- return (_midi.status == MIDI_PLAYING);
-}
-
-void MusicDriver_LibTimidity::SetVolume(byte vol)
-{
- if (_midi.song != NULL) mid_song_set_volume(_midi.song, vol);
-}
diff --git a/src/music/libtimidity.h b/src/music/libtimidity.h
deleted file mode 100644
index badb05bab2..0000000000
--- a/src/music/libtimidity.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $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 .
- */
-
-/** @file libtimidity.h Base for LibTimidity music playback. */
-
-#ifndef MUSIC_LIBTIMIDITY_H
-#define MUSIC_LIBTIMIDITY_H
-
-#include "music_driver.hpp"
-
-/** Music driver making use of libtimidity. */
-class MusicDriver_LibTimidity : public MusicDriver {
-public:
- /* virtual */ const char *Start(const char * const *param);
-
- /* virtual */ void Stop();
-
- /* virtual */ void PlaySong(const MusicSongInfo &song);
-
- /* virtual */ void StopSong();
-
- /* virtual */ bool IsSongPlaying();
-
- /* virtual */ void SetVolume(byte vol);
- /* virtual */ const char *GetName() const { return "libtimidity"; }
-};
-
-/** Factory for the libtimidity driver. */
-class FMusicDriver_LibTimidity : public DriverFactoryBase {
-public:
- FMusicDriver_LibTimidity() : DriverFactoryBase(Driver::DT_MUSIC, 5, "libtimidity", "LibTimidity MIDI Driver") {}
- /* virtual */ Driver *CreateInstance() const { return new MusicDriver_LibTimidity(); }
-};
-
-#endif /* MUSIC_LIBTIMIDITY_H */
diff --git a/src/network/core/core.cpp b/src/network/core/core.cpp
index c8db860dd5..e5f1df7214 100644
--- a/src/network/core/core.cpp
+++ b/src/network/core/core.cpp
@@ -21,48 +21,12 @@
#include "../../safeguards.h"
-#ifdef __MORPHOS__
-/* the library base is required here */
-struct Library *SocketBase = NULL;
-#endif
-
/**
* Initializes the network core (as that is needed for some platforms
* @return true if the core has been initialized, false otherwise
*/
bool NetworkCoreInitialize()
{
-#if defined(__MORPHOS__) || defined(__AMIGA__)
- /*
- * IMPORTANT NOTE: SocketBase needs to be initialized before we use _any_
- * network related function, else: crash.
- */
- DEBUG(net, 3, "[core] loading bsd socket library");
- SocketBase = OpenLibrary("bsdsocket.library", 4);
- if (SocketBase == NULL) {
- DEBUG(net, 0, "[core] can't open bsdsocket.library version 4, network unavailable");
- return false;
- }
-
-#if defined(__AMIGA__)
- /* for usleep() implementation (only required for legacy AmigaOS builds) */
- TimerPort = CreateMsgPort();
- if (TimerPort != NULL) {
- TimerRequest = (struct timerequest*)CreateIORequest(TimerPort, sizeof(struct timerequest);
- if (TimerRequest != NULL) {
- if (OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest*)TimerRequest, 0) == 0) {
- TimerBase = TimerRequest->tr_node.io_Device;
- if (TimerBase == NULL) {
- /* free resources... */
- DEBUG(net, 0, "[core] can't initialize timer, network unavailable");
- return false;
- }
- }
- }
- }
-#endif /* __AMIGA__ */
-#endif /* __MORPHOS__ / __AMIGA__ */
-
/* Let's load the network in windows */
#ifdef _WIN32
{
@@ -83,17 +47,6 @@ bool NetworkCoreInitialize()
*/
void NetworkCoreShutdown()
{
-#if defined(__MORPHOS__) || defined(__AMIGA__)
- /* free allocated resources */
-#if defined(__AMIGA__)
- if (TimerBase != NULL) CloseDevice((struct IORequest*)TimerRequest); // XXX This smells wrong
- if (TimerRequest != NULL) DeleteIORequest(TimerRequest);
- if (TimerPort != NULL) DeleteMsgPort(TimerPort);
-#endif
-
- if (SocketBase != NULL) CloseLibrary(SocketBase);
-#endif
-
#if defined(_WIN32)
WSACleanup();
#endif
diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp
index 216839032b..c2faf4c8b5 100644
--- a/src/network/core/host.cpp
+++ b/src/network/core/host.cpp
@@ -24,7 +24,7 @@
*/
static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast);
-#if defined(BEOS_NET_SERVER) || defined(__HAIKU__) /* doesn't have neither getifaddrs or net/if.h */
+#if defined(__HAIKU__) /* doesn't have neither getifaddrs or net/if.h */
/* Based on Andrew Bachmann's netstat+.c. Big thanks to him! */
extern "C" int _netstat(int fd, char **output, int verbose);
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index 5307e7321b..e58a48a6d1 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -61,50 +61,34 @@ typedef unsigned long in_addr_t;
# endif
# define SOCKET int
# define INVALID_SOCKET -1
-# if !defined(__MORPHOS__) && !defined(__AMIGA__)
-# define ioctlsocket ioctl
-# if !defined(BEOS_NET_SERVER)
-# define closesocket close
-# endif
-# define GET_LAST_ERROR() (errno)
-# endif
+# define ioctlsocket ioctl
+# define closesocket close
+# define GET_LAST_ERROR() (errno)
/* Need this for FIONREAD on solaris */
# define BSD_COMP
/* Includes needed for UNIX-like systems */
# include
# include
-# if defined(__BEOS__) && defined(BEOS_NET_SERVER)
-# include
-# include /* snooze() */
-# include
- typedef unsigned long in_addr_t;
-# define INADDR_NONE INADDR_BROADCAST
-# else
-# include
-# include
-# include
-# include
-# include
+# include
+# include
+# include
+# include
+# include
/* According to glibc/NEWS, appeared in glibc-2.3. */
-# if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \
- && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
+# if !defined(__sgi__) && !defined(SUNOS) && !defined(__INNOTEK_LIBC__) \
+ && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
/* If for any reason ifaddrs.h does not exist on your system, comment out
* the following two lines and an alternative way will be used to fetch
* the list of IPs from the system. */
-# include
-# define HAVE_GETIFADDRS
-# endif
-# if !defined(INADDR_NONE)
-# define INADDR_NONE 0xffffffff
-# endif
-# if defined(__BEOS__) && !defined(BEOS_NET_SERVER)
- /* needed on Zeta */
-# include
-# endif
-# endif /* BEOS_NET_SERVER */
-
-# if !defined(__BEOS__) && defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 1)
+# include
+# define HAVE_GETIFADDRS
+# endif
+# if !defined(INADDR_NONE)
+# define INADDR_NONE 0xffffffff
+# endif
+
+# if defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 1)
typedef uint32_t in_addr_t;
# endif
@@ -113,14 +97,6 @@ typedef unsigned long in_addr_t;
# include
#endif /* UNIX */
-#ifdef __BEOS__
- typedef int socklen_t;
-#endif
-
-#ifdef __HAIKU__
- #define IPV6_V6ONLY 27
-#endif
-
/* OS/2 stuff */
#if defined(__OS2__)
# define SOCKET int
@@ -177,39 +153,6 @@ typedef unsigned long in_addr_t;
#endif /* OS/2 */
-/* MorphOS and Amiga stuff */
-#if defined(__MORPHOS__) || defined(__AMIGA__)
-# include
-# include /* required for Open/CloseLibrary() */
- /* MorphOS defines his network functions with UBYTE arrays while we
- * use char arrays. This gives tons of unneeded warnings */
-# define UBYTE char
-# if defined(__MORPHOS__)
-# include /* FIO* defines */
-# include /* SIO* defines */
-# include
-# else /* __AMIGA__ */
-# include
-# endif
-
-/* Make the names compatible */
-# define closesocket(s) CloseSocket(s)
-# define GET_LAST_ERROR() Errno()
-# define ioctlsocket(s, request, status) IoctlSocket((LONG)s, (ULONG)request, (char*)status)
-# define ioctl ioctlsocket
-
- typedef unsigned int in_addr_t;
- typedef long socklen_t;
- extern struct Library *SocketBase;
-
-# ifdef __AMIGA__
- /* for usleep() implementation */
- extern struct Device *TimerBase;
- extern struct MsgPort *TimerPort;
- extern struct timerequest *TimerRequest;
-# endif
-#endif /* __MORPHOS__ || __AMIGA__ */
-
/**
* Try to set the socket into non-blocking mode.
* @param d The socket to set the non-blocking more for.
@@ -222,11 +165,7 @@ static inline bool SetNonBlocking(SOCKET d)
#else
int nonblocking = 1;
#endif
-#if (defined(__BEOS__) && defined(BEOS_NET_SERVER))
- return setsockopt(d, SOL_SOCKET, SO_NONBLOCK, &nonblocking, sizeof(nonblocking)) == 0;
-#else
return ioctlsocket(d, FIONBIO, &nonblocking) == 0;
-#endif
}
/**
@@ -237,13 +176,9 @@ static inline bool SetNonBlocking(SOCKET d)
static inline bool SetNoDelay(SOCKET d)
{
/* XXX should this be done at all? */
-#if !defined(BEOS_NET_SERVER) /* not implemented on BeOS net_server */
int b = 1;
/* The (const char*) cast is needed for windows */
return setsockopt(d, IPPROTO_TCP, TCP_NODELAY, (const char*)&b, sizeof(b)) == 0;
-#else
- return true;
-#endif
}
/* Make sure these structures have the size we expect them to be */
diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp
index c98d51ff54..70138bf38f 100644
--- a/src/network/core/tcp.cpp
+++ b/src/network/core/tcp.cpp
@@ -233,11 +233,7 @@ bool NetworkTCPSocketHandler::CanSendReceive()
FD_SET(this->sock, &write_fd);
tv.tv_sec = tv.tv_usec = 0; // don't block at all.
-#if !defined(__MORPHOS__) && !defined(__AMIGA__)
if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false;
-#else
- if (WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL) < 0) return false;
-#endif
this->writable = !!FD_ISSET(this->sock, &write_fd);
return FD_ISSET(this->sock, &read_fd) != 0;
diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp
index a8bb64080a..3b0f0d1489 100644
--- a/src/network/core/tcp_http.cpp
+++ b/src/network/core/tcp_http.cpp
@@ -310,11 +310,7 @@ int NetworkHTTPSocketHandler::Receive()
}
tv.tv_sec = tv.tv_usec = 0; // don't block at all.
-#if !defined(__MORPHOS__) && !defined(__AMIGA__)
int n = select(FD_SETSIZE, &read_fd, NULL, NULL, &tv);
-#else
- int n = WaitSelect(FD_SETSIZE, &read_fd, NULL, NULL, &tv, NULL);
-#endif
if (n == -1) return;
for (NetworkHTTPSocketHandler **iter = _http_connections.Begin(); iter < _http_connections.End(); /* nothing */) {
diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h
index e6b5893324..8cd8257b25 100644
--- a/src/network/core/tcp_listen.h
+++ b/src/network/core/tcp_listen.h
@@ -118,11 +118,7 @@ public:
}
tv.tv_sec = tv.tv_usec = 0; // don't block at all.
-#if !defined(__MORPHOS__) && !defined(__AMIGA__)
if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false;
-#else
- if (WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL) < 0) return false;
-#endif
/* accept clients.. */
for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) {
diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp
index d06ec15e2d..57fe84e256 100644
--- a/src/network/core/udp.cpp
+++ b/src/network/core/udp.cpp
@@ -127,7 +127,6 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a
p->PrepareToSend();
-#ifndef BEOS_NET_SERVER /* will work around this, some day; maybe. */
if (broadcast) {
/* Enable broadcast */
unsigned long val = 1;
@@ -135,7 +134,6 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a
DEBUG(net, 1, "[udp] setting broadcast failed with: %i", GET_LAST_ERROR());
}
}
-#endif
/* Send the buffer */
int res = sendto(s->second, (const char*)p->buffer, p->size, 0, (const struct sockaddr *)send.GetAddress(), send.GetAddressLength());
diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp
index 992cb5c38e..fd2145e1a7 100644
--- a/src/network/network_client.cpp
+++ b/src/network/network_client.cpp
@@ -1183,7 +1183,6 @@ void ClientNetworkGameSocketHandler::CheckConnection()
* the server will forcefully disconnect you. */
if (lag > 20) {
this->NetworkGameSocketHandler::CloseConnection();
- ShowErrorMessage(STR_NETWORK_ERROR_LOSTCONNECTION, INVALID_STRING_ID, WL_CRITICAL);
return;
}
diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp
index a889a614b7..cbd6320ef5 100644
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -567,24 +567,6 @@ void ShowNewGRFTextfileWindow(TextfileType file_type, const GRFConfig *c)
static GRFPresetList _grf_preset_list; ///< List of known NewGRF presets. @see GetGRFPresetList
-class DropDownListPresetItem : public DropDownListItem {
-public:
- DropDownListPresetItem(int result) : DropDownListItem(result, false) {}
-
- virtual ~DropDownListPresetItem() {}
-
- bool Selectable() const
- {
- return true;
- }
-
- void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
- {
- DrawString(left + 2, right + 2, top, _grf_preset_list[this->result], sel ? TC_WHITE : TC_BLACK);
- }
-};
-
-
typedef std::map GrfIdMap; ///< Map of grfid to the grf config.
/**
@@ -951,7 +933,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
for (uint i = 0; i < _grf_preset_list.Length(); i++) {
if (_grf_preset_list[i] != NULL) {
- *list->Append() = new DropDownListPresetItem(i);
+ *list->Append() = new DropDownListCharStringItem(_grf_preset_list[i], i, false);
}
}
diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp
index 030aef3603..3d6a7667f2 100644
--- a/src/newgrf_house.cpp
+++ b/src/newgrf_house.cpp
@@ -368,8 +368,7 @@ static uint32 GetDistanceFromNearbyHouse(uint8 parameter, TileIndex tile, HouseI
/* Collect acceptance stats. */
uint32 res = 0;
- for (Station * const * st_iter = sl->Begin(); st_iter != sl->End(); st_iter++) {
- const Station *st = *st_iter;
+ for (Station *st : *sl) {
if (HasBit(st->goods[cid].status, GoodsEntry::GES_EVER_ACCEPTED)) SetBit(res, 0);
if (HasBit(st->goods[cid].status, GoodsEntry::GES_LAST_MONTH)) SetBit(res, 1);
if (HasBit(st->goods[cid].status, GoodsEntry::GES_CURRENT_MONTH)) SetBit(res, 2);
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 41d5434283..71a5b845a0 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -208,7 +208,7 @@ static void ShowHelp()
" -P password = Password to join company\n"
" -D [ip][:port] = Start dedicated server\n"
" -l ip[:port] = Redirect DEBUG()\n"
-#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(_WIN32)
+#if !defined(_WIN32)
" -f = Fork into the background (dedicated only)\n"
#endif
#endif /* ENABLE_NETWORK */
@@ -375,7 +375,6 @@ static void ShutdownGame()
UninitFreeType();
ViewportMapClearTunnelCache();
- ViewportClearStationSignCache();
InvalidateVehicleTickCaches();
ClearVehicleTickCaches();
ClearCommandLog();
@@ -562,7 +561,7 @@ struct AfterNewGRFScan : NewGRFScanCallback {
}
};
-#if defined(UNIX) && !defined(__MORPHOS__)
+#if defined(UNIX)
extern void DedicatedFork();
#endif
@@ -581,7 +580,7 @@ static const OptionData _options[] = {
GETOPT_SHORT_VALUE('l'),
GETOPT_SHORT_VALUE('p'),
GETOPT_SHORT_VALUE('P'),
-#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(_WIN32)
+#if !defined(_WIN32)
GETOPT_SHORT_NOVAL('f'),
#endif
#endif /* ENABLE_NETWORK */
@@ -775,7 +774,7 @@ int openttd_main(int argc, char *argv[])
if (dedicated) DEBUG(net, 0, "Starting dedicated version %s", _openttd_revision);
if (_dedicated_forks && !dedicated) _dedicated_forks = false;
-#if defined(UNIX) && !defined(__MORPHOS__)
+#if defined(UNIX)
/* We must fork here, or we'll end up without some resources we need (like sockets) */
if (_dedicated_forks) DedicatedFork();
#endif
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index 80979ca6d9..60dcedbca8 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -2248,7 +2248,6 @@ void CheckOrders(const Vehicle *v)
} else if (v->type == VEH_AIRCRAFT &&
(AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) &&
(st->airport.GetFTA()->flags & AirportFTAClass::SHORT_STRIP) &&
- _settings_game.vehicle.plane_crashes != 0 &&
!_cheats.no_jetcrash.value &&
message == INVALID_STRING_ID) {
message = STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY;
diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp
index bea69ec931..2f982dea06 100644
--- a/src/os/unix/unix.cpp
+++ b/src/os/unix/unix.cpp
@@ -43,21 +43,6 @@
#include
#endif
-
-#ifdef __MORPHOS__
-#include
-ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;)
-
-/* The system supplied definition of SIG_IGN does not match */
-#undef SIG_IGN
-#define SIG_IGN (void (*)(int))1
-#endif /* __MORPHOS__ */
-
-#ifdef __AMIGA__
-#warning add stack symbol to avoid that user needs to set stack manually (tokai)
-// ULONG __stack =
-#endif
-
#if defined(__APPLE__)
#if defined(WITH_SDL)
/* the mac implementation needs this file included in the same file as main() */
@@ -69,13 +54,7 @@ ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;)
bool FiosIsRoot(const char *path)
{
-#if !defined(__MORPHOS__) && !defined(__AMIGAOS__)
return path[1] == '\0';
-#else
- /* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
- const char *s = strchr(path, ':');
- return s != NULL && s[1] == '\0';
-#endif
}
void FiosGetDrives(FileList &file_list)
@@ -106,15 +85,8 @@ bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb
{
char filename[MAX_PATH];
int res;
-#if defined(__MORPHOS__) || defined(__AMIGAOS__)
- /* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
- if (FiosIsRoot(path)) {
- res = seprintf(filename, lastof(filename), "%s:%s", path, ent->d_name);
- } else // XXX - only next line!
-#else
assert(path[strlen(path) - 1] == PATHSEPCHAR);
if (strlen(path) > 2) assert(path[strlen(path) - 2] != PATHSEPCHAR);
-#endif
res = seprintf(filename, lastof(filename), "%s%s", path, ent->d_name);
/* Could we fully concatenate the path and filename? */
@@ -296,39 +268,9 @@ bool GetClipboardContents(char *buffer, const char *last)
/* multi os compatible sleep function */
-#ifdef __AMIGA__
-/* usleep() implementation */
-# include
-# include
-
- extern struct Device *TimerBase = NULL;
- extern struct MsgPort *TimerPort = NULL;
- extern struct timerequest *TimerRequest = NULL;
-#endif /* __AMIGA__ */
-
void CSleep(int milliseconds)
{
- #if defined(__BEOS__)
- snooze(milliseconds * 1000);
- #elif defined(__AMIGA__)
- {
- ULONG signals;
- ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
-
- /* send IORequest */
- TimerRequest->tr_node.io_Command = TR_ADDREQUEST;
- TimerRequest->tr_time.tv_secs = (milliseconds * 1000) / 1000000;
- TimerRequest->tr_time.tv_micro = (milliseconds * 1000) % 1000000;
- SendIO((struct IORequest *)TimerRequest);
-
- if (!((signals = Wait(TimerSigBit | SIGBREAKF_CTRL_C)) & TimerSigBit) ) {
- AbortIO((struct IORequest *)TimerRequest);
- }
- WaitIO((struct IORequest *)TimerRequest);
- }
- #else
- usleep(milliseconds * 1000);
- #endif
+ usleep(milliseconds * 1000);
}
diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp
index 6f4f305336..6498d37fe4 100644
--- a/src/pathfinder/follow_track.hpp
+++ b/src/pathfinder/follow_track.hpp
@@ -160,7 +160,7 @@ struct CFollowTrackT
return false;
}
- if (!Allow90degTurns() && m_tiles_skipped == 0) {
+ if (m_tiles_skipped == 0 && ((!IsRailTT() && !Allow90degTurns()) || (IsRailTT() && Rail90DegTurnDisallowed(GetTileRailType(m_old_tile), GetTileRailType(m_new_tile), !Allow90degTurns())))) {
m_new_td_bits &= (TrackdirBits)~(int)TrackdirCrossesTrackdirs(m_old_td);
if (m_new_td_bits == TRACKDIR_BIT_NONE) {
m_err = EC_90DEG;
diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp
index 3480f430e0..24b0ca0c23 100644
--- a/src/pathfinder/npf/npf.cpp
+++ b/src/pathfinder/npf/npf.cpp
@@ -810,12 +810,13 @@ static bool CanEnterTile(TileIndex tile, DiagDirection dir, AyStarUserData *user
* One-way-roads are taken into account. Signals are not tested.
*
* @param dst_tile The tile of interest.
+ * @param src_tile The originating tile.
* @param src_trackdir The direction the vehicle is currently moving.
* @param type The transporttype of the vehicle.
* @param subtype For TRANSPORT_ROAD the compatible RoadTypes of the vehicle.
* @return The Trackdirs the vehicle can continue moving on.
*/
-static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_trackdir, TransportType type, uint subtype)
+static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, TileIndex src_tile, Trackdir src_trackdir, TransportType type, uint subtype)
{
TrackdirBits trackdirbits = TrackStatusToTrackdirBits(GetTileTrackStatus(dst_tile, type, subtype));
@@ -843,7 +844,9 @@ static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_tr
trackdirbits &= TrackdirReachesTrackdirs(src_trackdir);
/* Filter out trackdirs that would make 90 deg turns for trains */
- if (_settings_game.pf.forbid_90_deg && type == TRANSPORT_RAIL) trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir);
+ if (type == TRANSPORT_RAIL && Rail90DegTurnDisallowed(GetTileRailType(src_tile), GetTileRailType(dst_tile))) {
+ trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir);
+ }
DEBUG(npf, 6, "After filtering: (%d, %d), possible trackdirs: 0x%X", TileX(dst_tile), TileY(dst_tile), trackdirbits);
@@ -884,7 +887,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
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);
+ trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype);
} else if (IsTileType(src_tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(src_tile) == src_exitdir) {
/* We drive through the wormhole and arrive on the other side */
dst_tile = GetOtherTunnelBridgeEnd(src_tile);
@@ -908,7 +911,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
src_trackdir = ReverseTrackdir(src_trackdir);
}
- trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype);
+ trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype);
if (trackdirbits == TRACKDIR_BIT_NONE) {
/* We cannot enter the next tile. Road vehicles can reverse, others reach dead end */
@@ -917,7 +920,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
dst_tile = src_tile;
src_trackdir = ReverseTrackdir(src_trackdir);
- trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype);
+ trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype);
}
}
diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h
index 0ecf00bbd2..3740d03902 100644
--- a/src/pathfinder/pathfinder_type.h
+++ b/src/pathfinder/pathfinder_type.h
@@ -43,6 +43,9 @@ 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;
+/** Maximum segments of road vehicle path cache */
+static const int YAPF_ROADVEH_PATH_CACHE_SEGMENTS = 8;
+
/**
* Helper container to find a depot
*/
diff --git a/src/pathfinder/yapf/yapf.h b/src/pathfinder/yapf/yapf.h
index 84bd35c8b0..3bea692b79 100644
--- a/src/pathfinder/yapf/yapf.h
+++ b/src/pathfinder/yapf/yapf.h
@@ -16,6 +16,7 @@
#include "../../track_type.h"
#include "../../vehicle_type.h"
#include "../../ship.h"
+#include "../../roadveh.h"
#include "../pathfinder_type.h"
/**
@@ -45,7 +46,7 @@ bool YapfShipCheckReverse(const Ship *v);
* @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 YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found);
+Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found, RoadVehPathCache &path_cache);
/**
* Finds the best path for given train using YAPF.
diff --git a/src/pathfinder/yapf/yapf_node.hpp b/src/pathfinder/yapf/yapf_node.hpp
index b3021096b3..e510b2a6c2 100644
--- a/src/pathfinder/yapf/yapf_node.hpp
+++ b/src/pathfinder/yapf/yapf_node.hpp
@@ -67,6 +67,7 @@ struct CYapfNodeT {
Node *m_parent;
int m_cost;
int m_estimate;
+ bool m_is_choice;
inline void Set(Node *parent, TileIndex tile, Trackdir td, bool is_choice)
{
@@ -75,6 +76,7 @@ struct CYapfNodeT {
m_parent = parent;
m_cost = 0;
m_estimate = 0;
+ m_is_choice = is_choice;
}
inline Node *GetHashNext()
@@ -112,6 +114,11 @@ struct CYapfNodeT {
return m_estimate;
}
+ inline bool GetIsChoice() const
+ {
+ return m_is_choice;
+ }
+
inline bool operator<(const Node &other) const
{
return m_estimate < other.m_estimate;
diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp
index 92a035fba4..88f78502b4 100644
--- a/src/pathfinder/yapf/yapf_road.cpp
+++ b/src/pathfinder/yapf/yapf_road.cpp
@@ -360,13 +360,13 @@ public:
return 'r';
}
- static Trackdir stChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found)
+ static Trackdir stChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found, RoadVehPathCache &path_cache)
{
Tpf pf;
- return pf.ChooseRoadTrack(v, tile, enterdir, path_found);
+ return pf.ChooseRoadTrack(v, tile, enterdir, path_found, path_cache);
}
- inline Trackdir ChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found)
+ inline Trackdir ChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found, RoadVehPathCache &path_cache)
{
/* Handle special case - when next tile is destination tile.
* However, when going to a station the (initial) destination
@@ -394,15 +394,30 @@ public:
Trackdir next_trackdir = INVALID_TRACKDIR;
Node *pNode = Yapf().GetBestNode();
if (pNode != NULL) {
+ uint steps = 0;
+ for (Node *n = pNode; n->m_parent != NULL; n = n->m_parent) steps++;
+
/* path was found or at least suggested
* walk through the path back to its origin */
while (pNode->m_parent != NULL) {
+ steps--;
+ if (pNode->GetIsChoice() && steps < YAPF_ROADVEH_PATH_CACHE_SEGMENTS) {
+ TrackdirByte td;
+ td = pNode->GetTrackdir();
+ path_cache.td.push_front(td);
+ path_cache.tile.push_front(pNode->GetTile());
+ }
pNode = pNode->m_parent;
}
/* return trackdir from the best origin node (one of start nodes) */
Node &best_next_node = *pNode;
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() && tile == v->dest_tile) {
+ path_cache.td.pop_back();
+ path_cache.tile.pop_back();
+ }
}
return next_trackdir;
}
@@ -509,18 +524,18 @@ struct CYapfRoadAnyDepot1 : CYapfT > {};
-Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found)
+Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found, RoadVehPathCache &path_cache)
{
/* default is YAPF type 2 */
- typedef Trackdir (*PfnChooseRoadTrack)(const RoadVehicle*, TileIndex, DiagDirection, bool &path_found);
- PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir
+ typedef Trackdir (*PfnChooseRoadTrack)(const RoadVehicle*, TileIndex, DiagDirection, bool &path_found, RoadVehPathCache &path_cache);
+ PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir, allow 90-deg
/* check if non-default YAPF type should be used */
if (_settings_game.pf.yapf.disable_node_optimization) {
pfnChooseRoadTrack = &CYapfRoad1::stChooseRoadTrack; // Trackdir
}
- Trackdir td_ret = pfnChooseRoadTrack(v, tile, enterdir, path_found);
+ Trackdir td_ret = pfnChooseRoadTrack(v, tile, enterdir, path_found, path_cache);
return (td_ret != INVALID_TRACKDIR) ? td_ret : (Trackdir)FindFirstBit2x64(trackdirs);
}
diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp
index d09827bcde..5aa2bf8d97 100644
--- a/src/pathfinder/yapf/yapf_ship.cpp
+++ b/src/pathfinder/yapf/yapf_ship.cpp
@@ -94,7 +94,8 @@ public:
/* 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) {
+ steps--;
+ if (steps > 0 && steps < YAPF_SHIP_PATH_CACHE_LENGTH) {
TrackdirByte td;
td = pNode->GetTrackdir();
path_cache.push_front(td);
@@ -164,6 +165,21 @@ protected:
}
public:
+ inline int CurveCost(Trackdir td1, Trackdir td2)
+ {
+ assert(IsValidTrackdir(td1));
+ assert(IsValidTrackdir(td2));
+
+ if (HasTrackdir(TrackdirCrossesTrackdirs(td1), td2)) {
+ /* 90-deg curve penalty */
+ return Yapf().PfGetSettings().ship_curve90_penalty;
+ } else if (td2 != NextTrackdir(td1)) {
+ /* 45-deg curve penalty */
+ return Yapf().PfGetSettings().ship_curve45_penalty;
+ }
+ return 0;
+ }
+
/**
* Called by YAPF to calculate the cost from the origin to the given node.
* Calculates only the cost of given node, adds it to the parent node cost
@@ -174,10 +190,7 @@ public:
/* base tile cost depending on distance */
int c = IsDiagonalTrackdir(n.GetTrackdir()) ? YAPF_TILE_LENGTH : YAPF_TILE_CORNER_LENGTH;
/* additional penalty for curves */
- if (n.GetTrackdir() != NextTrackdir(n.m_parent->GetTrackdir())) {
- /* new trackdir does not match the next one when going straight */
- c += YAPF_TILE_LENGTH;
- }
+ c += CurveCost(n.m_parent->GetTrackdir(), n.GetTrackdir());
/* Skipped tile cost for aqueducts. */
c += YAPF_TILE_LENGTH * tf->m_tiles_skipped;
@@ -298,6 +311,16 @@ struct CYapfShip1 : CYapfT > {};
+static inline bool RequireTrackdirKey()
+{
+ /* If the two curve penalties are not equal, then it is not possible to use the
+ * ExitDir keyed node list, as it there will be key overlap. Using Trackdir keyed
+ * nodes means potentially more paths are tested, which would be wasteful if it's
+ * not necessary.
+ */
+ return _settings_game.pf.yapf.ship_curve45_penalty != _settings_game.pf.yapf.ship_curve90_penalty;
+}
+
/** Ship controller helper - path finder invoker */
Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache)
{
@@ -306,7 +329,7 @@ Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir,
PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir
/* check if non-default YAPF type needed */
- if (_settings_game.pf.yapf.disable_node_optimization) {
+ if (_settings_game.pf.yapf.disable_node_optimization || RequireTrackdirKey()) {
pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir
}
@@ -324,7 +347,7 @@ bool YapfShipCheckReverse(const Ship *v)
PfnCheckReverseShip pfnCheckReverseShip = CYapfShip2::CheckShipReverse; // default: ExitDir
/* check if non-default YAPF type needed */
- if (_settings_game.pf.yapf.disable_node_optimization) {
+ if (_settings_game.pf.yapf.disable_node_optimization || RequireTrackdirKey()) {
pfnCheckReverseShip = &CYapfShip1::CheckShipReverse; // Trackdir
}
diff --git a/src/pbs.cpp b/src/pbs.cpp
index c082280bdc..d4c037b07f 100644
--- a/src/pbs.cpp
+++ b/src/pbs.cpp
@@ -521,7 +521,7 @@ bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bo
/* Check for reachable tracks. */
ft.m_new_td_bits &= DiagdirReachesTrackdirs(ft.m_exitdir);
- if (forbid_90deg && ft.m_tiles_skipped == 0) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir);
+ if (ft.m_tiles_skipped == 0 && Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile), forbid_90deg)) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir);
if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) return include_line_end;
if (ft.m_new_td_bits != TRACKDIR_BIT_NONE && KillFirstBit(ft.m_new_td_bits) == TRACKDIR_BIT_NONE) {
@@ -625,7 +625,7 @@ bool IsWaitingPositionFree(const Train *v, TileIndex tile, Trackdir trackdir, bo
/* Check for reachable tracks. */
ft.m_new_td_bits &= DiagdirReachesTrackdirs(ft.m_exitdir);
- if (forbid_90deg) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir);
+ if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile), forbid_90deg)) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir);
if (HasReservedTracks(ft.m_new_tile, TrackdirBitsToTrackBits(ft.m_new_td_bits))) return false;
diff --git a/src/rail.h b/src/rail.h
index b9f44c411b..b67e28990f 100644
--- a/src/rail.h
+++ b/src/rail.h
@@ -21,17 +21,24 @@
#include "strings_type.h"
#include "date_type.h"
#include "signal_type.h"
+#include "settings_type.h"
/** Railtype flags. */
enum RailTypeFlags {
RTF_CATENARY = 0, ///< Bit number for drawing a catenary.
RTF_NO_LEVEL_CROSSING = 1, ///< Bit number for disallowing level crossings.
RTF_HIDDEN = 2, ///< Bit number for hiding from selection.
+ RTF_NO_SPRITE_COMBINE = 3, ///< Bit number for using non-combined junctions.
+ RTF_ALLOW_90DEG = 4, ///< Bit number for always allowed 90 degree turns, regardless of setting.
+ RTF_DISALLOW_90DEG = 5, ///< Bit number for never allowed 90 degree turns, regardless of setting.
RTFB_NONE = 0, ///< All flags cleared.
RTFB_CATENARY = 1 << RTF_CATENARY, ///< Value for drawing a catenary.
RTFB_NO_LEVEL_CROSSING = 1 << RTF_NO_LEVEL_CROSSING, ///< Value for disallowing level crossings.
RTFB_HIDDEN = 1 << RTF_HIDDEN, ///< Value for hiding from selection.
+ RTFB_NO_SPRITE_COMBINE = 1 << RTF_NO_SPRITE_COMBINE, ///< Value for using non-combined junctions.
+ RTFB_ALLOW_90DEG = 1 << RTF_ALLOW_90DEG, ///< Value for always allowed 90 degree turns, regardless of setting.
+ RTFB_DISALLOW_90DEG = 1 << RTF_DISALLOW_90DEG, ///< Value for never allowed 90 degree turns, regardless of setting.
};
DECLARE_ENUM_AS_BIT_SET(RailTypeFlags)
@@ -51,6 +58,7 @@ enum RailTypeSpriteGroup {
RTSG_FENCES, ///< Fence images
RTSG_TUNNEL_PORTAL, ///< Tunnel portal overlay
RTSG_SIGNALS, ///< Signal images
+ RTSG_GROUND_COMPLETE, ///< Complete ground images
RTSG_END,
};
@@ -338,6 +346,26 @@ static inline bool RailNoLevelCrossings(RailType rt)
return HasBit(GetRailTypeInfo(rt)->flags, RTF_NO_LEVEL_CROSSING);
}
+/**
+ * Test if 90 degree turns are disallowed between two railtypes.
+ * @param rt1 First railtype to test for.
+ * @param rt2 Second railtype to test for.
+ * @param def Default value to use if the rail type doesn't specify anything.
+ * @return True if 90 degree turns are disallowed between the two rail types.
+ */
+static inline bool Rail90DegTurnDisallowed(RailType rt1, RailType rt2, bool def = _settings_game.pf.forbid_90_deg)
+{
+ if (rt1 == INVALID_RAILTYPE || rt2 == INVALID_RAILTYPE) return def;
+
+ const RailtypeInfo *rti1 = GetRailTypeInfo(rt1);
+ const RailtypeInfo *rti2 = GetRailTypeInfo(rt2);
+
+ bool rt1_90deg = HasBit(rti1->flags, RTF_DISALLOW_90DEG) || (!HasBit(rti1->flags, RTF_ALLOW_90DEG) && def);
+ bool rt2_90deg = HasBit(rti2->flags, RTF_DISALLOW_90DEG) || (!HasBit(rti2->flags, RTF_ALLOW_90DEG) && def);
+
+ return rt1_90deg || rt2_90deg;
+}
+
/**
* Returns the cost of building the specified railtype.
* @param railtype The railtype being built.
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index bbe246b8a4..0b566134b8 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -2617,8 +2617,9 @@ static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeIn
}
}
+ bool no_combine = ti->tileh == SLOPE_FLAT && HasBit(rti->flags, RTF_NO_SPRITE_COMBINE);
SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY);
- SpriteID ground = GetCustomRailSprite(rti, ti->tile, RTSG_GROUND);
+ SpriteID ground = GetCustomRailSprite(rti, ti->tile, no_combine ? RTSG_GROUND_COMPLETE : RTSG_GROUND);
TrackBits pbs = TRACK_BIT_NONE;
if (_settings_client.gui.show_track_reservation) {
pbs = is_bridge ? GetTunnelBridgeReservationTrackBits(ti->tile) : GetRailReservationTrackBits(ti->tile);
@@ -2626,6 +2627,18 @@ static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeIn
if (track == TRACK_BIT_NONE) {
/* Half-tile foundation, no track here? */
+ } else if (no_combine) {
+ /* Use trackbits as direct index from ground sprite, subtract 1
+ * because there is no sprite for no bits. */
+ DrawGroundSprite(ground + track - 1, PAL_NONE);
+
+ /* Draw reserved track bits */
+ if (pbs & TRACK_BIT_X) DrawGroundSprite(overlay + RTO_X, PALETTE_CRASH);
+ if (pbs & TRACK_BIT_Y) DrawGroundSprite(overlay + RTO_Y, PALETTE_CRASH);
+ if (pbs & TRACK_BIT_UPPER) DrawTrackSprite(overlay + RTO_N, PALETTE_CRASH, ti, SLOPE_N);
+ if (pbs & TRACK_BIT_LOWER) DrawTrackSprite(overlay + RTO_S, PALETTE_CRASH, ti, SLOPE_S);
+ if (pbs & TRACK_BIT_RIGHT) DrawTrackSprite(overlay + RTO_E, PALETTE_CRASH, ti, SLOPE_E);
+ if (pbs & TRACK_BIT_LEFT) DrawTrackSprite(overlay + RTO_W, PALETTE_CRASH, ti, SLOPE_W);
} else if (ti->tileh == SLOPE_NW && track == TRACK_BIT_Y) {
DrawGroundSprite(ground + RTO_SLOPE_NW, PAL_NONE);
if (pbs != TRACK_BIT_NONE) DrawGroundSprite(overlay + RTO_SLOPE_NW, PALETTE_CRASH);
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 80726c78ba..a67b8bb724 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -1148,6 +1148,7 @@ public:
this->DrawWidgets();
+ if (this->IsShaded()) return;
/* 'Accepts' and 'Supplies' texts. */
NWidgetBase *cov = this->GetWidget(WID_BRAS_COVERAGE_TEXTS);
int top = cov->pos_y + WD_PAR_VSEP_NORMAL;
@@ -1497,6 +1498,7 @@ static const NWidgetPart _nested_station_builder_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_RAIL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
+ NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_SHOW_NEWST_DEFSIZE),
NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN),
EndContainer(),
@@ -2201,7 +2203,17 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option)
*list->Append() = item;
}
+ Dimension d = { 0, 0 };
RailType rt;
+ /* Get largest icon size, to ensure text is aligned on each menu item. */
+ if (!for_replacement) {
+ FOR_ALL_SORTED_RAILTYPES(rt) {
+ if (!HasBit(used_railtypes, rt)) continue;
+ const RailtypeInfo *rti = GetRailTypeInfo(rt);
+ d = maxdim(d, GetSpriteSize(rti->gui_sprites.build_x_rail));
+ }
+ }
+
FOR_ALL_SORTED_RAILTYPES(rt) {
/* If it's not used ever, don't show it to the user. */
if (!HasBit(used_railtypes, rt)) continue;
@@ -2209,7 +2221,14 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option)
const RailtypeInfo *rti = GetRailTypeInfo(rt);
StringID str = for_replacement ? rti->strings.replace_text : (rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING);
- DropDownListParamStringItem *item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_railtypes, rt));
+ DropDownListParamStringItem *item;
+ if (for_replacement) {
+ item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_railtypes, rt));
+ } else {
+ DropDownListIconItem *iconitem = new DropDownListIconItem(rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(c->avail_railtypes, rt));
+ iconitem->SetDimension(d);
+ item = iconitem;
+ }
item->SetParam(0, rti->strings.menu_text);
item->SetParam(1, rti->max_speed);
*list->Append() = item;
diff --git a/src/rev.cpp.in b/src/rev.cpp.in
index 584f90ef9f..eae70d7bff 100644
--- a/src/rev.cpp.in
+++ b/src/rev.cpp.in
@@ -89,10 +89,3 @@ const byte _openttd_revision_tagged = !!ISTAG!!;
* version, thus making comparisons on specific revisions easy.
*/
const uint32 _openttd_newgrf_version = 1 << 28 | 10 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004;
-
-#ifdef __MORPHOS__
-/**
- * Variable used by MorphOS to show the version.
- */
-extern const char morphos_versions_tag[] = "$VER: OpenTTD !!VERSION!! (!!DATE!!) OpenTTD Team [MorphOS, PowerPC]";
-#endif
diff --git a/src/roadveh.h b/src/roadveh.h
index 6c90b5baf4..372a046f51 100644
--- a/src/roadveh.h
+++ b/src/roadveh.h
@@ -18,6 +18,7 @@
#include "track_func.h"
#include "road_type.h"
#include "newgrf_engine.h"
+#include
struct RoadVehicle;
@@ -82,10 +83,30 @@ static const byte RV_OVERTAKE_TIMEOUT = 35;
void RoadVehUpdateCache(RoadVehicle *v, bool same_length = false);
void GetRoadVehSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
+struct RoadVehPathCache {
+ std::deque td;
+ std::deque tile;
+
+ inline bool empty() const { return this->td.empty(); }
+
+ inline size_t size() const
+ {
+ assert(this->td.size() == this->tile.size());
+ return this->td.size();
+ }
+
+ inline void clear()
+ {
+ this->td.clear();
+ this->tile.clear();
+ }
+};
+
/**
* Buses, trucks and trams belong to this class.
*/
struct RoadVehicle FINAL : public GroundVehicle {
+ RoadVehPathCache path; ///< Cached path.
byte state; ///< @see RoadVehicleStates
byte frame;
uint16 blocked_ctr;
@@ -129,6 +150,7 @@ struct RoadVehicle FINAL : public GroundVehicle {
int GetEffectiveMaxSpeed() const;
int GetDisplayEffectiveMaxSpeed() const { return this->GetEffectiveMaxSpeed() / 2; }
int UpdateSpeed();
+ void SetDestTile(TileIndex tile);
inline bool IsRoadVehicleOnLevelCrossing() const
{
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp
index 48f2d5724f..f10b1c65d0 100644
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -973,6 +973,8 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection
/* Remove tracks unreachable from the enter dir */
trackdirs &= DiagdirReachesTrackdirs(enterdir);
if (trackdirs == TRACKDIR_BIT_NONE) {
+ /* If vehicle expected a path, it no longer exists, so invalidate it. */
+ if (!v->path.empty()) v->path.clear();
/* No reachable tracks, so we'll reverse */
return_track(_road_reverse_table[enterdir]);
}
@@ -1003,12 +1005,35 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection
/* Only one track to choose between? */
if (KillFirstBit(trackdirs) == TRACKDIR_BIT_NONE) {
+ if (!v->path.empty() && v->path.tile.front() == tile) {
+ /* Vehicle expected a choice here, invalidate its path. */
+ v->path.clear();
+ }
return_track(FindFirstBit2x64(trackdirs));
}
+ /* Attempt to follow cached path. */
+ if (!v->path.empty()) {
+ if (v->path.tile.front() != tile) {
+ /* Vehicle didn't expect a choice here, invalidate its path. */
+ v->path.clear();
+ } else {
+ Trackdir trackdir = v->path.td.front();
+
+ if (HasBit(trackdirs, trackdir)) {
+ v->path.td.pop_front();
+ v->path.tile.pop_front();
+ return_track(trackdir);
+ }
+
+ /* Vehicle expected a choice which is no longer available. */
+ v->path.clear();
+ }
+ }
+
switch (_settings_game.pf.pathfinder_for_roadvehs) {
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;
+ case VPF_YAPF: best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found, v->path); break;
default: NOT_REACHED();
}
@@ -1679,6 +1704,13 @@ bool RoadVehicle::Tick()
return true;
}
+void RoadVehicle::SetDestTile(TileIndex tile)
+{
+ if (tile == this->dest_tile) return;
+ this->path.clear();
+ this->dest_tile = tile;
+}
+
static void CheckIfRoadVehNeedsService(RoadVehicle *v)
{
/* If we already got a slot at a stop, use that FIRST, and go to a depot later */
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index c4cc7855b5..a6b1ad51fd 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -20,6 +20,7 @@
#include "../network/network_func.h"
#include "../gfxinit.h"
#include "../viewport_func.h"
+#include "../viewport_kdtree.h"
#include "../industry.h"
#include "../clear_map.h"
#include "../vehicle_func.h"
@@ -228,6 +229,7 @@ void UpdateAllVirtCoords()
UpdateAllStationVirtCoords();
UpdateAllSignVirtCoords();
UpdateAllTownVirtCoords();
+ RebuildViewportKdtree();
}
/**
@@ -292,7 +294,6 @@ static void InitializeWindowsAndCaches()
GroupStatistics::UpdateAfterLoad();
- Station::RecomputeIndustriesNearForAll();
RebuildSubsidisedSourceAndDestinationCache();
/* Towns have a noise controlled number of airports system
@@ -605,6 +606,12 @@ bool AfterLoadGame()
GamelogTestRevision();
GamelogTestMode();
+ RebuildTownKdtree();
+ RebuildStationKdtree();
+ /* This needs to be done even before conversion, because some conversions will destroy objects
+ * that otherwise won't exist in the tree. */
+ RebuildViewportKdtree();
+
if (IsSavegameVersionBefore(SLV_98)) GamelogGRFAddList(_grfconfig);
if (IsSavegameVersionBefore(SLV_119)) {
@@ -3529,6 +3536,33 @@ bool AfterLoadGame()
}
}
+ if (IsSavegameVersionBefore(SLV_TOWN_CARGOGEN)) {
+ /* Ensure the original cargo generation mode is used */
+ _settings_game.economy.town_cargogen_mode = TCGM_ORIGINAL;
+ }
+
+ if (IsSavegameVersionBefore(SLV_SERVE_NEUTRAL_INDUSTRIES)) {
+ /* Ensure the original neutral industry/station behaviour is used */
+ _settings_game.station.serve_neutral_industries = true;
+
+ /* Link oil rigs to their industry and back. */
+ Station *st;
+ FOR_ALL_STATIONS(st) {
+ if (IsTileType(st->xy, MP_STATION) && IsOilRig(st->xy)) {
+ /* Industry tile is always adjacent during construction by TileDiffXY(0, 1) */
+ st->industry = Industry::GetByTile(st->xy + TileDiffXY(0, 1));
+ st->industry->neutral_station = st;
+ }
+ }
+ } else {
+ /* Link neutral station back to industry, as this is not saved. */
+ Industry *ind;
+ FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != NULL) ind->neutral_station->industry = ind;
+ }
+
+ /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */
+ Station::RecomputeCatchmentForAll();
+
/* Station acceptance is some kind of cache */
if (IsSavegameVersionBefore(SLV_127)) {
Station *st;
diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp
index 9e81861c4e..e5a0b74a32 100644
--- a/src/saveload/industry_sl.cpp
+++ b/src/saveload/industry_sl.cpp
@@ -25,6 +25,7 @@ static const SaveLoad _industry_desc[] = {
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_CONDREF(Industry, neutral_station, REF_STATION, SLV_SERVE_NEUTRAL_INDUSTRIES, 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),
diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp
index 76765a06d7..cafb3f54ae 100644
--- a/src/saveload/saveload.cpp
+++ b/src/saveload/saveload.cpp
@@ -2426,7 +2426,7 @@ struct ZlibSaveFilter : SaveFilter {
********** START OF LZMA CODE **************
********************************************/
-#if defined(WITH_LZMA)
+#if defined(WITH_LIBLZMA)
#include
/**
@@ -2539,7 +2539,7 @@ struct LZMASaveFilter : SaveFilter {
}
};
-#endif /* WITH_LZMA */
+#endif /* WITH_LIBLZMA */
/*******************************************
************* END OF CODE *****************
@@ -2576,7 +2576,7 @@ static const SaveLoadFormat _saveload_formats[] = {
#else
{"zlib", TO_BE32X('OTTZ'), NULL, NULL, 0, 0, 0},
#endif
-#if defined(WITH_LZMA)
+#if defined(WITH_LIBLZMA)
/* Level 2 compression is speed wise as fast as zlib level 6 compression (old default), but results in ~10% smaller saves.
* Higher compression levels are possible, and might improve savegame size by up to 25%, but are also up to 10 times slower.
* The next significant reduction in file size is at level 4, but that is already 4 times slower. Level 3 is primarily 50%
diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h
index de39dcca62..5fb986e32c 100644
--- a/src/saveload/saveload.h
+++ b/src/saveload/saveload.h
@@ -294,6 +294,11 @@ enum SaveLoadVersion : uint16 {
SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries.
SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes.
SLV_FIX_CARGO_MONITOR, ///< 207 PR#7175 v1.9 Cargo monitor data packing fix to support 64 cargotypes.
+ SLV_TOWN_CARGOGEN, ///< 208 PR#6965 New algorithms for town building cargo generation.
+ SLV_SHIP_CURVE_PENALTY, ///< 209 PR#7289 Configurable ship curve penalties.
+
+ SLV_SERVE_NEUTRAL_INDUSTRIES, ///< 210 PR#7234 Company stations can serve industries with attached neutral stations.
+ SLV_ROADVEH_PATH_CACHE, ///< 211 PR#7261 Add path cache for road vehicles.
SL_MAX_VERSION, ///< Highest possible saveload version
};
diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp
index 63b3b44e55..52a13bcc06 100644
--- a/src/saveload/town_sl.cpp
+++ b/src/saveload/town_sl.cpp
@@ -28,6 +28,7 @@ void RebuildTownCaches()
{
Town *town;
InitializeBuildingCounts();
+ RebuildTownKdtree();
/* Reset town population and num_houses */
FOR_ALL_TOWNS(town) {
diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp
index c45ea3c58f..6e5ede9a8d 100644
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -790,22 +790,24 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
static const SaveLoad _roadveh_desc[] = {
SLE_WRITEBYTE(Vehicle, type),
SLE_VEH_INCLUDE(),
- SLE_VAR(RoadVehicle, state, SLE_UINT8),
- SLE_VAR(RoadVehicle, frame, SLE_UINT8),
- SLE_VAR(RoadVehicle, blocked_ctr, SLE_UINT16),
- SLE_VAR(RoadVehicle, overtaking, SLE_UINT8),
- SLE_VAR(RoadVehicle, overtaking_ctr, SLE_UINT8),
- SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16),
- SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8),
-
- SLE_CONDNULL(2, SLV_6, SLV_69),
- SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION),
- SLE_CONDNULL(4, SLV_69, SLV_131),
- SLE_CONDNULL(2, SLV_6, SLV_131),
- SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
- SLE_CONDVAR_X(RoadVehicle, critical_breakdown_count, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 6)),
-
- SLE_END()
+ SLE_VAR(RoadVehicle, state, SLE_UINT8),
+ SLE_VAR(RoadVehicle, frame, SLE_UINT8),
+ SLE_VAR(RoadVehicle, blocked_ctr, SLE_UINT16),
+ SLE_VAR(RoadVehicle, overtaking, SLE_UINT8),
+ SLE_VAR(RoadVehicle, overtaking_ctr, SLE_UINT8),
+ SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16),
+ SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8),
+ SLE_CONDDEQUE(RoadVehicle, path.td, SLE_UINT8, SLV_ROADVEH_PATH_CACHE, SL_MAX_VERSION),
+ SLE_CONDDEQUE(RoadVehicle, path.tile, SLE_UINT32, SLV_ROADVEH_PATH_CACHE, SL_MAX_VERSION),
+
+ SLE_CONDNULL(2, SLV_6, SLV_69),
+ SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION),
+ SLE_CONDNULL(4, SLV_69, SLV_131),
+ SLE_CONDNULL(2, SLV_6, SLV_131),
+ SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
+ SLE_CONDVAR_X(RoadVehicle, critical_breakdown_count, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 6)),
+
+ SLE_END()
};
static const SaveLoad _ship_desc[] = {
diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq
index 5fa50ae1be..29d86754d0 100644
--- a/src/script/api/ai/ai_group.hpp.sq
+++ b/src/script/api/ai/ai_group.hpp.sq
@@ -45,6 +45,10 @@ void SQAIGroup_Register(Squirrel *engine)
SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitThisYear, "GetProfitThisYear", 2, ".i");
SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitLastYear, "GetProfitLastYear", 2, ".i");
SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetCurrentUsage, "GetCurrentUsage", 2, ".i");
+ SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetPrimaryColour, "SetPrimaryColour", 3, ".ii");
+ SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetSecondaryColour, "SetSecondaryColour", 3, ".ii");
+ SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetPrimaryColour, "GetPrimaryColour", 2, ".i");
+ SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetSecondaryColour, "GetSecondaryColour", 2, ".i");
SQAIGroup.PostRegister(engine);
}
diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp
index f3ec539a40..3735908011 100644
--- a/src/script/api/ai_changelog.hpp
+++ b/src/script/api/ai_changelog.hpp
@@ -19,6 +19,12 @@
*
* This version is not yet released. The following changes are not set in stone yet.
*
+ * API additions:
+ * \li AIGroup::SetPrimaryColour
+ * \li AIGroup::SetSecondaryColour
+ * \li AIGroup::GetPrimaryColour
+ * \li AIGroup::GetSecondaryColour
+ *
* \b 1.9.0
*
* API additions:
diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq
index ce0576b8a1..39336037aa 100644
--- a/src/script/api/game/game_window.hpp.sq
+++ b/src/script/api/game/game_window.hpp.sq
@@ -468,6 +468,7 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_NAMES, "WID_FRW_TIMES_NAMES");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_CURRENT, "WID_FRW_TIMES_CURRENT");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_AVERAGE, "WID_FRW_TIMES_AVERAGE");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_SCROLLBAR, "WID_FRW_SCROLLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FGW_CAPTION, "WID_FGW_CAPTION");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FGW_GRAPH, "WID_FGW_GRAPH");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TEMPERATE, "WID_GL_TEMPERATE");
@@ -1033,7 +1034,6 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_RESOLUTION_DROPDOWN, "WID_GO_RESOLUTION_DROPDOWN");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FULLSCREEN_BUTTON, "WID_GO_FULLSCREEN_BUTTON");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_GUI_ZOOM_DROPDOWN, "WID_GO_GUI_ZOOM_DROPDOWN");
- SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FONT_ZOOM_DROPDOWN, "WID_GO_FONT_ZOOM_DROPDOWN");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_DROPDOWN, "WID_GO_BASE_GRF_DROPDOWN");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_STATUS, "WID_GO_BASE_GRF_STATUS");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_TEXTFILE, "WID_GO_BASE_GRF_TEXTFILE");
@@ -1045,6 +1045,7 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_STATUS, "WID_GO_BASE_MUSIC_STATUS");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_TEXTFILE, "WID_GO_BASE_MUSIC_TEXTFILE");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_DESCRIPTION, "WID_GO_BASE_MUSIC_DESCRIPTION");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FONT_ZOOM_DROPDOWN, "WID_GO_FONT_ZOOM_DROPDOWN");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_FILTER, "WID_GS_FILTER");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_OPTIONSPANEL, "WID_GS_OPTIONSPANEL");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_SCROLLBAR, "WID_GS_SCROLLBAR");
diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp
index 16a50bc17c..fcae6c3d2d 100644
--- a/src/script/api/script_group.cpp
+++ b/src/script/api/script_group.cpp
@@ -194,3 +194,35 @@
return occupancy / vehicle_count;
}
+
+/* static */ bool ScriptGroup::SetPrimaryColour(GroupID group_id, ScriptCompany::Colours colour)
+{
+ EnforcePrecondition(false, IsValidGroup(group_id));
+
+ return ScriptObject::DoCommand(0, group_id, colour << 16, CMD_SET_GROUP_LIVERY);
+}
+
+/* static */ bool ScriptGroup::SetSecondaryColour(GroupID group_id, ScriptCompany::Colours colour)
+{
+ EnforcePrecondition(false, IsValidGroup(group_id));
+
+ return ScriptObject::DoCommand(0, group_id, (1 << 8) | (colour << 16), CMD_SET_GROUP_LIVERY);
+}
+
+/* static */ ScriptCompany::Colours ScriptGroup::GetPrimaryColour(GroupID group_id)
+{
+ EnforcePrecondition(ScriptCompany::Colours::COLOUR_INVALID, IsValidGroup(group_id));
+
+ const Group *g = ::Group::GetIfValid(group_id);
+ if (!HasBit(g->livery.in_use, 0)) return ScriptCompany::Colours::COLOUR_INVALID;
+ return (ScriptCompany::Colours)g->livery.colour1;
+}
+
+/* static */ ScriptCompany::Colours ScriptGroup::GetSecondaryColour(GroupID group_id)
+{
+ EnforcePrecondition(ScriptCompany::Colours::COLOUR_INVALID, IsValidGroup(group_id));
+
+ const Group *g = ::Group::GetIfValid(group_id);
+ if (!HasBit(g->livery.in_use, 1)) return ScriptCompany::Colours::COLOUR_INVALID;
+ return (ScriptCompany::Colours)g->livery.colour2;
+}
diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp
index 9e88eaff1c..6e7deb0b7b 100644
--- a/src/script/api/script_group.hpp
+++ b/src/script/api/script_group.hpp
@@ -214,6 +214,36 @@ public:
* @return The current usage of the group.
*/
static uint32 GetCurrentUsage(GroupID group_id);
+
+ /**
+ * Set primary colour for a group.
+ * @param group_id The group id to set the colour of.
+ * @param colour Colour to set.
+ * @pre IsValidGroup(group_id).
+ */
+ static bool SetPrimaryColour(GroupID group_id, ScriptCompany::Colours colour);
+
+ /**
+ * Set secondary colour for a group.
+ * @param group_id The group id to set the colour of.
+ * @param colour Colour to set.
+ * @pre IsValidGroup(group_id).
+ */
+ static bool SetSecondaryColour(GroupID group_id, ScriptCompany::Colours colour);
+
+ /**
+ * Get primary colour of a group.
+ * @param group_id The group id to get the colour of.
+ * @pre IsValidGroup(group_id).
+ */
+ static ScriptCompany::Colours GetPrimaryColour(GroupID group_id);
+
+ /**
+ * Get secondary colour for a group.
+ * @param group_id The group id to get the colour of.
+ * @pre IsValidGroup(group_id).
+ */
+ static ScriptCompany::Colours GetSecondaryColour(GroupID group_id);
};
#endif /* SCRIPT_GROUP_HPP */
diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp
index c536ec5590..68bb9003dd 100644
--- a/src/script/api/script_industry.cpp
+++ b/src/script/api/script_industry.cpp
@@ -132,9 +132,7 @@
if (!IsValidIndustry(industry_id)) return -1;
Industry *ind = ::Industry::Get(industry_id);
- StationList stations;
- ::FindStationsAroundTiles(ind->location, &stations);
- return (int32)stations.Length();
+ return (int32)ind->stations_near.size();
}
/* static */ int32 ScriptIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile)
diff --git a/src/settings.cpp b/src/settings.cpp
index 1f3657602d..a57e6204a6 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1357,7 +1357,7 @@ static bool ChangeMaxHeightLevel(int32 p1)
static bool StationCatchmentChanged(int32 p1)
{
- Station::RecomputeIndustriesNearForAll();
+ Station::RecomputeCatchmentForAll();
Station *st;
FOR_ALL_STATIONS(st) UpdateStationAcceptance(st, true);
MarkWholeScreenDirty();
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 5be87a6165..20592e6a7a 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -1835,6 +1835,7 @@ static SettingsContainer &GetSettingsTree()
towns->Add(new SettingEntry("economy.allow_town_roads"));
towns->Add(new SettingEntry("economy.allow_town_level_crossings"));
towns->Add(new SettingEntry("economy.found_town"));
+ towns->Add(new SettingEntry("economy.town_cargogen_mode"));
towns->Add(new SettingEntry("economy.town_cargo_scale_factor"));
towns->Add(new SettingEntry("economy.random_road_reconstruction"));
}
@@ -1846,6 +1847,7 @@ static SettingsContainer &GetSettingsTree()
industries->Add(new SettingEntry("economy.multiple_industry_per_town"));
industries->Add(new SettingEntry("game_creation.oil_refinery_limit"));
industries->Add(new SettingEntry("economy.smooth_economy"));
+ industries->Add(new SettingEntry("station.serve_neutral_industries"));
}
SettingsPage *cdist = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST));
diff --git a/src/settings_type.h b/src/settings_type.h
index 0a2e8a0e75..ea68b0c303 100644
--- a/src/settings_type.h
+++ b/src/settings_type.h
@@ -482,6 +482,8 @@ struct YAPFSettings {
uint32 rail_longer_platform_per_tile_penalty; ///< penalty for longer station platform than train (per tile)
uint32 rail_shorter_platform_penalty; ///< penalty for shorter station platform than train
uint32 rail_shorter_platform_per_tile_penalty; ///< penalty for shorter station platform than train (per tile)
+ uint32 ship_curve45_penalty; ///< penalty for 45-deg curve for ships
+ uint32 ship_curve90_penalty; ///< penalty for 90-deg curve for ships
};
/** Settings related to all pathfinders. */
@@ -572,6 +574,7 @@ struct EconomySettings {
uint8 larger_towns; ///< the number of cities to build. These start off larger and grow twice as fast
uint8 initial_city_size; ///< multiplier for the initial size of the cities compared to towns
TownLayoutByte town_layout; ///< select town layout, @see TownLayout
+ TownCargoGenMode town_cargogen_mode; ///< algorithm for generating cargo from houses, @see TownCargoGenMode
bool allow_town_roads; ///< towns are allowed to build roads (always allowed when generating world / in SE)
uint16 town_min_distance; ///< minimum distance between towns
TownFoundingByte found_town; ///< town founding, @see TownFounding
@@ -612,6 +615,7 @@ struct LinkGraphSettings {
/** Settings related to stations. */
struct StationSettings {
bool modified_catchment; ///< different-size catchment areas
+ bool serve_neutral_industries; ///< company stations can serve industries with attached neutral stations
bool adjacent_stations; ///< allow stations to be built directly adjacent to other stations
bool distant_join_stations; ///< allow to join non-adjacent stations
bool never_expire_airports; ///< never expire airports
diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp
index 298539417e..d8d76a4d64 100644
--- a/src/settingsgen/settingsgen.cpp
+++ b/src/settingsgen/settingsgen.cpp
@@ -23,13 +23,6 @@
#include
#endif
-#ifdef __MORPHOS__
-#ifdef stderr
-#undef stderr
-#endif
-#define stderr stdout
-#endif /* __MORPHOS__ */
-
#include "../safeguards.h"
/**
diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp
index c755330d09..8e6a0f7989 100644
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -919,6 +919,10 @@ static void ShipController(Ship *v)
}
/* Bridge exit */
if (_settings_game.vehicle.ship_collision_avoidance && gp.new_tile != TileVirtXY(v->x_pos, v->y_pos)) HandleSpeedOnAqueduct(v, gp.new_tile, v->tile);
+
+ /* Ship is back on the bridge head, we need to comsume its path
+ * cache entry here as we didn't have to choose a ship track. */
+ if (!v->path.empty()) v->path.pop_front();
}
/* update image of ship, as well as delta XY */
diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp
index 4badd36050..69fde2559f 100644
--- a/src/signs_cmd.cpp
+++ b/src/signs_cmd.cpp
@@ -16,6 +16,7 @@
#include "signs_func.h"
#include "command_func.h"
#include "tilehighlight_func.h"
+#include "viewport_kdtree.h"
#include "window_func.h"
#include "string_func.h"
@@ -57,7 +58,7 @@ CommandCost CmdPlaceSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
if (!StrEmpty(text)) {
si->name = stredup(text);
}
- si->UpdateVirtCoord();
+ _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeSign(si->index));
InvalidateWindowData(WC_SIGN_LIST, 0, 0);
_new_sign_id = si->index;
}
@@ -98,7 +99,7 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
}
} else { // Delete sign
if (flags & DC_EXEC) {
- si->sign.MarkDirty();
+ _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeSign(si->index));
delete si;
InvalidateWindowData(WC_SIGN_LIST, 0, 0);
diff --git a/src/station.cpp b/src/station.cpp
index 5a7aaf8642..3771784dde 100644
--- a/src/station.cpp
+++ b/src/station.cpp
@@ -14,6 +14,7 @@
#include "company_base.h"
#include "roadveh.h"
#include "viewport_func.h"
+#include "viewport_kdtree.h"
#include "date_func.h"
#include "command_func.h"
#include "news_func.h"
@@ -21,9 +22,11 @@
#include "vehiclelist.h"
#include "core/pool_func.hpp"
#include "station_base.h"
+#include "station_kdtree.h"
#include "roadstop_base.h"
#include "dock_base.h"
#include "industry.h"
+#include "town.h"
#include "core/random_func.hpp"
#include "linkgraph/linkgraph.h"
#include "linkgraph/linkgraphschedule.h"
@@ -37,6 +40,20 @@
StationPool _station_pool("Station");
INSTANTIATE_POOL_METHODS(Station)
+
+StationKdtree _station_kdtree(Kdtree_StationXYFunc);
+
+void RebuildStationKdtree()
+{
+ std::vector stids;
+ BaseStation *st;
+ FOR_ALL_STATIONS(st) {
+ stids.push_back(st->index);
+ }
+ _station_kdtree.Build(stids.begin(), stids.end());
+}
+
+
BaseStation::~BaseStation()
{
free(this->name);
@@ -51,7 +68,6 @@ BaseStation::~BaseStation()
DeleteWindowById(WC_DEPARTURES_BOARD, this->index);
this->sign.MarkDirty();
- ViewportClearStationSignCache();
}
Station::Station(TileIndex tile) :
@@ -122,6 +138,9 @@ Station::~Station()
}
}
+ /* Remove station from industries and towns that reference it. */
+ this->RemoveFromAllNearbyLists();
+
/* Clear the persistent storage. */
delete this->airport.psa;
@@ -147,6 +166,9 @@ Station::~Station()
}
CargoPacket::InvalidateAllFrom(this->index);
+
+ _station_kdtree.Remove(this->index);
+ _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(this->index));
}
@@ -266,6 +288,41 @@ void Station::MarkTilesDirty(bool cargo_change) const
return length;
}
+/**
+ * Get the catchment size of an individual station tile.
+ * @param tile Station tile to get catchment size of.
+ * @param st Associated station of station tile.
+ * @pre IsTileType(tile, MP_STATION)
+ * @return The catchment size of the station tile.
+ */
+static uint GetTileCatchmentRadius(TileIndex tile, const Station *st)
+{
+ assert(IsTileType(tile, MP_STATION));
+
+ const int32 inc = _settings_game.station.catchment_increase;
+
+ if (_settings_game.station.modified_catchment) {
+ switch (GetStationType(tile)) {
+ case STATION_RAIL: return CA_TRAIN + inc;
+ case STATION_OILRIG: return CA_UNMODIFIED + inc;
+ case STATION_AIRPORT: return st->airport.GetSpec()->catchment + inc;
+ case STATION_TRUCK: return CA_TRUCK + inc;
+ case STATION_BUS: return CA_BUS + inc;
+ case STATION_DOCK: return CA_DOCK + inc;
+
+ default: NOT_REACHED();
+ case STATION_BUOY:
+ case STATION_WAYPOINT: return CA_NONE;
+ }
+ } else {
+ switch (GetStationType(tile)) {
+ default: return CA_UNMODIFIED + inc;
+ case STATION_BUOY:
+ case STATION_WAYPOINT: return CA_NONE;
+ }
+ }
+}
+
/**
* Determines the catchment radius of the station
* @return The radius
@@ -327,79 +384,127 @@ bool Station::IsWithinRangeOfDockingTile(TileIndex tile, uint max_distance) cons
return false;
}
-/** Rect and pointer to IndustryVector */
-struct RectAndIndustryVector {
- Rect rect; ///< The rectangle to search the industries in.
- IndustryVector *industries_near; ///< The nearby industries.
-};
-
/**
- * Callback function for Station::RecomputeIndustriesNear()
- * Tests whether tile is an industry and possibly adds
- * the industry to station's industries_near list.
- * @param ind_tile tile to check
- * @param user_data pointer to RectAndIndustryVector
- * @return always false, we want to search all tiles
+ * Add nearby industry to station's industries_near list if it accepts cargo.
+ * @param ind Industry
+ * @param st Station
*/
-static bool FindIndustryToDeliver(TileIndex ind_tile, void *user_data)
+static void AddIndustryToDeliver(Industry *ind, Station *st)
{
- /* Only process industry tiles */
- if (!IsTileType(ind_tile, MP_INDUSTRY)) return false;
-
- RectAndIndustryVector *riv = (RectAndIndustryVector *)user_data;
- Industry *ind = Industry::GetByTile(ind_tile);
-
/* Don't check further if this industry is already in the list */
- if (riv->industries_near->Contains(ind)) return false;
-
- /* Only process tiles in the station acceptance rectangle */
- int x = TileX(ind_tile);
- int y = TileY(ind_tile);
- if (x < riv->rect.left || x > riv->rect.right || y < riv->rect.top || y > riv->rect.bottom) return false;
+ if (st->industries_near.find(ind) != st->industries_near.end()) return;
/* Include only industries that can accept cargo */
uint cargo_index;
for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) {
if (ind->accepts_cargo[cargo_index] != CT_INVALID) break;
}
- if (cargo_index >= lengthof(ind->accepts_cargo)) return false;
+ if (cargo_index >= lengthof(ind->accepts_cargo)) return;
- *riv->industries_near->Append() = ind;
+ st->industries_near.insert(ind);
+}
+
+/**
+ * Remove this station from the nearby stations lists of all towns and industries.
+ */
+void Station::RemoveFromAllNearbyLists()
+{
+ Town *t;
+ FOR_ALL_TOWNS(t) { t->stations_near.erase(this); }
+ Industry *i;
+ FOR_ALL_INDUSTRIES(i) { i->stations_near.erase(this); }
+}
+/**
+ * Test if the given town ID is covered by our catchment area.
+ * This is used when removing a house tile to determine if it was the last house tile
+ * within our catchment.
+ * @param t TownID to test.
+ * @return true if at least one house tile of TownID is covered.
+ */
+bool Station::CatchmentCoversTown(TownID t) const
+{
+ BitmapTileIterator it(this->catchment_tiles);
+ for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) {
+ if (IsTileType(tile, MP_HOUSE) && GetTownIndex(tile) == t) return true;
+ }
return false;
}
/**
- * Recomputes Station::industries_near, list of industries possibly
- * accepting cargo in station's catchment radius
+ * Recompute tiles covered in our catchment area.
+ * This will additionally recompute nearby towns and industries.
*/
-void Station::RecomputeIndustriesNear()
+void Station::RecomputeCatchment()
{
- this->industries_near.Clear();
- if (this->rect.IsEmpty()) return;
+ this->industries_near.clear();
+ this->RemoveFromAllNearbyLists();
- RectAndIndustryVector riv = {
- this->GetCatchmentRect(),
- &this->industries_near
- };
+ if (this->rect.IsEmpty()) {
+ this->catchment_tiles.Reset();
+ return;
+ }
+ this->catchment_tiles.Initialize(GetCatchmentRect());
- /* Compute maximum extent of acceptance rectangle wrt. station sign */
- TileIndex start_tile = this->xy;
- uint max_radius = max(
- max(DistanceManhattan(start_tile, TileXY(riv.rect.left, riv.rect.top)), DistanceManhattan(start_tile, TileXY(riv.rect.left, riv.rect.bottom))),
- max(DistanceManhattan(start_tile, TileXY(riv.rect.right, riv.rect.top)), DistanceManhattan(start_tile, TileXY(riv.rect.right, riv.rect.bottom)))
- );
+ if (!_settings_game.station.serve_neutral_industries && this->industry != NULL) {
+ /* Station is associated with an industry, so we only need to deliver to that industry. */
+ TILE_AREA_LOOP(tile, this->industry->location) {
+ if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == this->industry->index) {
+ this->catchment_tiles.SetTile(tile);
+ }
+ }
+ /* The industry's stations_near may have been computed before its neutral station was built so clear and re-add here. */
+ for (Station *st : this->industry->stations_near) {
+ st->industries_near.erase(this->industry);
+ }
+ this->industry->stations_near.clear();
+ this->industry->stations_near.insert(this);
+ this->industries_near.insert(this->industry);
+ return;
+ }
- CircularTileSearch(&start_tile, 2 * max_radius + 1, &FindIndustryToDeliver, &riv);
+ /* Loop finding all station tiles */
+ TileArea ta(TileXY(this->rect.left, this->rect.top), TileXY(this->rect.right, this->rect.bottom));
+ TILE_AREA_LOOP(tile, ta) {
+ if (!IsTileType(tile, MP_STATION) || GetStationIndex(tile) != this->index) continue;
+
+ uint r = GetTileCatchmentRadius(tile, this);
+ if (r == CA_NONE) continue;
+
+ /* This tile sub-loop doesn't need to test any tiles, they are simply added to the catchment set. */
+ TileArea ta2(TileXY(max(TileX(tile) - r, 0), max(TileY(tile) - r, 0)), TileXY(min(TileX(tile) + r, MapMaxX()), min(TileY(tile) + r, MapMaxY())));
+ TILE_AREA_LOOP(tile2, ta2) this->catchment_tiles.SetTile(tile2);
+ }
+
+ /* Search catchment tiles for towns and industries */
+ BitmapTileIterator it(this->catchment_tiles);
+ for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) {
+ if (IsTileType(tile, MP_HOUSE)) {
+ Town *t = Town::GetByTile(tile);
+ t->stations_near.insert(this);
+ }
+ if (IsTileType(tile, MP_INDUSTRY)) {
+ Industry *i = Industry::GetByTile(tile);
+
+ /* Ignore industry if it has a neutral station. It already can't be this station. */
+ if (!_settings_game.station.serve_neutral_industries && i->neutral_station != NULL) continue;
+
+ i->stations_near.insert(this);
+
+ /* Add if we can deliver to this industry as well */
+ AddIndustryToDeliver(i, this);
+ }
+ }
}
/**
- * Recomputes Station::industries_near for all stations
+ * Recomputes catchment of all stations.
+ * This will additionally recompute nearby stations for all towns and industries.
*/
-/* static */ void Station::RecomputeIndustriesNearForAll()
+/* static */ void Station::RecomputeCatchmentForAll()
{
Station *st;
- FOR_ALL_STATIONS(st) st->RecomputeIndustriesNear();
+ FOR_ALL_STATIONS(st) { st->RecomputeCatchment(); }
}
/************************************************************************/
@@ -587,3 +692,8 @@ Money AirportMaintenanceCost(Owner owner)
/* 3 bits fraction for the maintenance cost factor. */
return total_cost >> 3;
}
+
+bool StationCompare::operator() (const Station *lhs, const Station *rhs) const
+{
+ return lhs->index < rhs->index;
+}
diff --git a/src/station_base.h b/src/station_base.h
index ce4ab0b1ab..f4a07b6b14 100644
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -20,8 +20,10 @@
#include "linkgraph/linkgraph_type.h"
#include "newgrf_storage.h"
#include "3rdparty/cpp-btree/btree_map.h"
+#include "bitmap_type.h"
#include