(svn r10195) [NoAI] -Sync: with trunk r10119:10194. noai
authorrubidium
Sun, 17 Jun 2007 21:31:00 +0000
branchnoai
changeset 9628 b5c2449616b5
parent 9627 6a7c8ead2328
child 9629 66dde6412125
(svn r10195) [NoAI] -Sync: with trunk r10119:10194.
Makefile.in
Makefile.lang.in
Makefile.src.in
bin/data/roadstops.grf
config.lib
configure
docs/32bpp.txt
projects/generate
projects/langs.vcproj
projects/langs_vs80.vcproj
projects/openttd.vcproj
projects/openttd.vcproj.in
projects/openttd_vs80.vcproj
projects/openttd_vs80.vcproj.in
source.list
src/airport_movement.h
src/blitter/32bpp_base.cpp
src/blitter/32bpp_base.hpp
src/blitter/32bpp_simple.cpp
src/blitter/32bpp_simple.hpp
src/blitter/8bpp_base.cpp
src/blitter/8bpp_base.hpp
src/blitter/8bpp_debug.cpp
src/blitter/8bpp_debug.hpp
src/blitter/8bpp_optimized.cpp
src/blitter/8bpp_optimized.hpp
src/blitter/8bpp_simple.cpp
src/blitter/8bpp_simple.hpp
src/blitter/base.hpp
src/blitter/blitter.hpp
src/blitter/factory.hpp
src/blitter/null.cpp
src/blitter/null.hpp
src/console_cmds.cpp
src/economy.cpp
src/fileio.cpp
src/fileio.h
src/fios.cpp
src/fontcache.cpp
src/fontcache.h
src/functions.h
src/gfx.cpp
src/gfx.h
src/gfxinit.cpp
src/industry_cmd.cpp
src/intro_gui.cpp
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/dutch.txt
src/lang/esperanto.txt
src/lang/norwegian_bokmal.txt
src/lang/piglatin.txt
src/lang/romanian.txt
src/lang/turkish.txt
src/main_gui.cpp
src/misc.cpp
src/misc_cmd.cpp
src/misc_gui.cpp
src/music_gui.cpp
src/network/network_client.cpp
src/network/network_server.cpp
src/newgrf.cpp
src/newgrf.h
src/newgrf_config.cpp
src/newgrf_engine.cpp
src/newgrf_house.cpp
src/newgrf_industries.cpp
src/newgrf_industries.h
src/newgrf_industrytiles.cpp
src/newgrf_industrytiles.h
src/newgrf_spritegroup.h
src/newgrf_text.cpp
src/oldloader.cpp
src/openttd.cpp
src/order_gui.cpp
src/ottdres.rc
src/player.h
src/player_gui.cpp
src/roadveh_cmd.cpp
src/saveload.cpp
src/saveload.h
src/screenshot.cpp
src/settings.cpp
src/ship_cmd.cpp
src/smallmap_gui.cpp
src/sound.cpp
src/spritecache.cpp
src/spritecache.h
src/spriteloader/grf.cpp
src/spriteloader/grf.hpp
src/spriteloader/png.cpp
src/spriteloader/png.hpp
src/spriteloader/spriteloader.hpp
src/station_cmd.cpp
src/stdafx.h
src/strings.cpp
src/table/files.h
src/table/station_land.h
src/texteff.cpp
src/town_cmd.cpp
src/train_cmd.cpp
src/variables.h
src/vehicle.cpp
src/video/cocoa_v.mm
src/video/dedicated_v.cpp
src/video/null_v.cpp
src/video/sdl_v.cpp
src/video/win32_v.cpp
src/viewport.cpp
src/water_cmd.cpp
src/win32.cpp
src/window.cpp
--- a/Makefile.in	Tue Jun 12 19:52:26 2007 +0000
+++ b/Makefile.in	Sun Jun 17 21:31:00 2007 +0000
@@ -237,11 +237,6 @@
 	$(Q)mkdir -p "$(BUNDLES_DIR)"
 	$(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLE_DIR)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg"
 
-# TODO: ENABLE_INSTALL should be removed when the search path patch has been applied
-ifeq ($(ENABLE_INSTALL), 0)
-install:
-	@echo '[INSTALL] Cannot install. Not compiled with installation paths'
-else
 ifdef OSXAPP
 install:
 	@echo '[INSTALL] Cannot install the OSX Application Bundle'
@@ -266,4 +261,3 @@
 	$(Q)cp -R "$(BUNDLE_DIR)/scenario" "$(INSTALL_DATA_DIR)"
 endif # INSTALL_PERSONAL_DIR
 endif # OSXAPP
-endif # ENABLE_INSTALL
--- a/Makefile.lang.in	Tue Jun 12 19:52:26 2007 +0000
+++ b/Makefile.lang.in	Sun Jun 17 21:31:00 2007 +0000
@@ -75,7 +75,7 @@
 
 clean:
 	$(E) '$(STAGE) Cleaning up language files'
-	$(Q)rm -f strgen.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* $(ENDIAN_TARGETS)
+	$(Q)rm -f strgen.o string.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* $(ENDIAN_TARGETS)
 
 mrproper: clean
 
--- a/Makefile.src.in	Tue Jun 12 19:52:26 2007 +0000
+++ b/Makefile.src.in	Sun Jun 17 21:31:00 2007 +0000
@@ -292,7 +292,7 @@
 
 clean:
 	$(E) '$(STAGE) Cleaning up object files'
-	$(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o
+	$(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o rev.cpp
 
 mrproper: clean
 	$(Q)rm -f rev.cpp
Binary file bin/data/roadstops.grf has changed
--- a/config.lib	Tue Jun 12 19:52:26 2007 +0000
+++ b/config.lib	Sun Jun 17 21:31:00 2007 +0000
@@ -29,11 +29,8 @@
 	binary_dir="games"
 	data_dir="share/games/openttd"
 	icon_dir="share/pixmaps"
-	personal_dir=""
-	custom_lang_dir=""
-	second_data_dir=""
+	personal_dir="1"
 	install_dir="/"
-	enable_install="0"
 	enable_debug="0"
 	enable_profiling="0"
 	enable_dedicated="0"
@@ -46,6 +43,7 @@
 	enable_osx_g5="0"
 	enable_unicode="1"
 	with_distcc="1"
+	with_ccache="1"
 	with_osx_sysroot="1"
 	with_application_bundle="1"
 	with_sdl="1"
@@ -64,7 +62,7 @@
 	with_psp_config="1"
 	with_threads="1"
 
-	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip awk lipo os cpu_type revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir custom_lang_dir second_data_dir enable_install enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_distcc with_osx_sysroot enable_universal enable_osx_g5 enable_unicode with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_libtimidity with_freetype with_fontconfig with_psp_config with_threads CC CXX CFLAGS LDFLAGS"
+	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip awk lipo os cpu_type revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir enable_install enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_distcc with_osx_sysroot enable_universal enable_osx_g5 enable_unicode with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_libtimidity with_freetype with_fontconfig with_psp_config with_threads CC CXX CFLAGS LDFLAGS"
 }
 
 detect_params() {
@@ -135,20 +133,11 @@
 
 			--personal-dir)               prevp_p="personal-dir";;
 			--personal-dir=*)             personal_dir="$optarg";;
+			--without-personal-dir)       personal_dir="";;
 
 			--install-dir)                prevp_p="install-dir";;
 			--install-dir=*)              install_dir="$optarg";;
 
-# TODO: The next few cases will be removed when the search path patch is applied
-			--custom-lang-dir)            prevp_p="custom-lang-dir";;
-			--custom-lang-dir=*)          custom_lang_dir="$optarg";;
-
-			--second-data-dir)            prevp_p="second-data-dir";;
-			--second-data-dir=*)          second_data_dir="$optarg";;
-
-			--enable-install)             enable_install="1";;
-			--enable-install=*)           enable_install="$optarg";;
-# TODO: End of to be removed cases
 
 
 			--enable-debug)               enable_debug="1";;
@@ -245,6 +234,10 @@
 			--with-distcc)                with_distcc="2";;
 			--with-distcc=*)              with_distcc="$optarg";;
 
+			--without-ccache)             with_ccache="0";;
+			--with-ccache)                with_ccache="2";;
+			--with-ccache=*)              with_ccache="$optarg";;
+
 			--without-osx-sysroot)        with_osx_sysroot="0";;
 			--with-osx-sysroot)           with_osx_sysroot="2";;
 			--with-osx-sysroot=*)         with_osx_sysroot="$optarg";;
@@ -563,6 +556,35 @@
 		log 1 "checking distcc... $distcc"
 	fi
 
+	if [ "$with_ccache" = "0" ]; then
+		log 1 "checking ccache... no"
+	elif [ "$with_ccache" = "1" ]; then
+		with_ccache="0"
+
+		log 1 "checking ccache... no (only used when forced)"
+	elif [ "$with_ccache" = "2" ]; then
+		ccache="ccache"
+	else
+		ccache="$with_ccache"
+	fi
+	if [ "$with_ccache" != "0" ]; then
+		res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 0-6`"
+		if [ "$res" != "ccache" ]; then
+			ccache=""
+			log 1 "checking ccache... no"
+			if [ "$with_ccache" = "2" ]; then
+				log 1 "configure: error: no ccache detected, but was forced to be used"
+				exit 1
+			fi
+			if [ "$with_ccache" != "1" ]; then
+				log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me"
+				exit 1
+			fi
+		fi
+
+		log 1 "checking ccache... $ccache"
+	fi
+
 	if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then
 		if [ "$with_osx_sysroot" = "1" ]; then
 			with_osx_sysroot="0"
@@ -606,21 +628,6 @@
 
 	if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then
 		OSXAPP="OpenTTD.app"
-
-# TODO: remove next few lines of code when the search path patch has been applied
-		if [ -n "$custom_lang_dir" ] && [ "$custom_lang_dir" != "${OSXAPP}/Contents/Resources/lang/" ]; then
-			log 1 "configure: error: --custom-lang-dir and --with-application-bundle are not compatible
-			exit 1
-		fi
-
-		if [ -n "$custom_lang_dir" ] && [ "$second_data_dir" != "${OSXAPP}/Contents/Resources/data/" ]; then
-			log 1 "configure: error: --second-data-dir and --with-application-bundle are not compatible
-			exit 1
-		fi
-
-		custom_lang_dir="${OSXAPP}/Contents/Resources/lang/"
-		second_data_dir="${OSXAPP}/Contents/Resources/data/"
-# TODO: remove till here
 	else
 		OSXAPP=""
 	fi
@@ -703,6 +710,30 @@
 			sleep 5
 		fi
 	fi
+
+	if [ "$personal_dir" = "1" ]; then
+		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
+			personal_dir="OpenTTD"
+		elif [ "$os" = "OSX" ]; then
+			personal_dir="Documents/OpenTTD"
+		else
+			personal_dir=".openttd"
+		fi
+	fi
+
+	if [ -n "$personal_dir" ]
+	then
+		log 1 "personal home directory... $personal_dir"
+	else
+		log 1 "personal home directory... none"
+	fi
+
+	if [ -n "$install_dir" ]
+	then
+		log 1 "installation directory... $install_dir"
+	else
+		log 1 "installation directory... none"
+	fi
 }
 
 make_cflags_and_ldflags() {
@@ -1012,29 +1043,11 @@
 		LDFLAGS="$LDFLAGS -Wl,-syslibroot,/Developer/SDKs/MacOSX$with_osx_sysroot.sdk"
 	fi
 
-# TODO: remove next few lines of code when the search path patch has been applied
-	if [ -n "$second_data_dir" ]; then
-		CFLAGS="$CFLAGS -DSECOND_DATA_DIR=\\\\\"$second_data_dir\\\\\""
+	if [ -n "$personal_dir" ]; then
+		CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\""
 	fi
 
-	if [ -n "$custom_lang_dir" ]; then
-		CFLAGS="$CFLAGS -DCUSTOM_LANG_DIR=\\\\\"$custom_lang_dir\\\\\""
-	fi
-# TODO: remove till here
-
-	if [ "$enable_install" = "1" ]; then
-		if [ -n "$personal_dir" ]; then
-			CFLAGS="$CFLAGS -DUSE_HOMEDIR=1 -DPERSONAL_DIR=\\\\\"$personal_dir/\\\\\""
-		fi
-
-		if [ -n "$data_dir" ]; then
-			CFLAGS="$CFLAGS -DGAME_DATA_DIR=\\\\\"$prefix_dir/$data_dir/\\\\\""
-		fi
-
-		if [ -n "$icon_dir" ]; then
-			CFLAGS="$CFLAGS -DICON_DIR=\\\\\"$prefix_dir/$icon_dir/\\\\\""
-		fi
-	fi
+	CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
 
 	log 1 "using CFLAGS... $CFLAGS $CC_CFLAGS"
 	log 1 "using LDFLAGS... $LIBS $LDFLAGS"
@@ -1058,6 +1071,11 @@
 		log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc"
 		log 1 ""
 	fi
+
+	if [ "$with_ccache" != "0" ]; then
+		cc_host="$ccache $cc_host"
+		cxx_host="$ccache $cxx_host"
+	fi
 }
 
 check_compiler() {
@@ -1985,7 +2003,6 @@
 		s#!!REVISION!!#$revision#g;
 		s#!!AWK!!#$awk#g;
 		s#!!GCC295!!#$gcc295#g;
-		s#!!ENABLE_INSTALL!!#$enable_install#g;
 		s#!!DISTCC!!#$distcc#g;
 	"
 }
@@ -2101,18 +2118,10 @@
 	echo "                                 [share/games/openttd]"
 	echo "  --icon-dir=dir                 location of icons. Will be prefixed"
 	echo "                                 with the prefix-dir [share/pixmaps]"
-	echo "  --personal-dir=dir             location of the personal directory []"
+	echo "  --personal-dir=dir             location of the personal directory [.openttd]"
 	echo "  --install-dir=dir              specifies the root to install to."
 	echo "                                 Useful to install into jails [/]"
 	echo ""
-# TODO: The Following 3 tags will be removed when the 'search path patch' is applied
-	echo "  --second-data-dir=dir          specifies a second directory for the"
-	echo "                                 data files"
-	echo "  --custom-lang-dir=dir          specifies a custom directory for the"
-	echo "                                 language files"
-	echo "  --enable-install               make a binary that uses the specified"
-	echo "                                 data-dir and icon-dir"
-	echo ""
 	echo "Features and packages:"
 	echo "  --enable-debug[=LVL]           enable debug-mode (LVL=[0123], 0 is release)"
 	echo "  --enable-profiling             enables profiling"
--- a/configure	Tue Jun 12 19:52:26 2007 +0000
+++ b/configure	Sun Jun 17 21:31:00 2007 +0000
@@ -83,6 +83,7 @@
 		deep += 1;
 
 		if ($0 == "SDL"         && "'$sdl_config'" == "")          { next; }
+		if ($0 == "PNG"         && "'$png_config'" == "")          { next; }
 		if ($0 == "OSX"         && "'$os'" != "OSX")               { next; }
 		if ($0 == "OS2"         && "'$os'" != "OS2")               { next; }
 		if ($0 == "PSP"         && "'$os'" != "PSP")               { next; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/32bpp.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,36 @@
+32bpp and OpenTTD
+=================
+
+OpenTTD has 32bpp support. This means: OpenTTD still is 8bpp, but it has the
+posibility to override the graphics with 32bpp. This means that it isn't a
+replacement of grf or newgrf, but simply an addition. If you want to use 32bpp
+graphics of a newgrf, you do need the newgrf itself too (with 8bpp graphics).
+
+
+The Format
+----------
+
+32bpp images are stored in PNG. They should go in:
+  data/sprites/<grfname>/<SpriteID>.png
+
+For example, a grfname would be 'openttd' (without .grf, lowercase), and the
+SpriteID 3, to override the 3rd sprite in openttd.grf with a 32bpp version.
+
+The format of this PNG can be almost anything, but we advise to use RGBA
+format. Alpha-channel is fully supported.
+
+As the core of OpenTTD is 8bpp, and because you of course want company colours
+in your images, you will need to add a mask for every sprite that needs colour
+remapping. The name is simular as above, only you have to put a 'm' behind the
+SpriteID. This image should be a 8bpp palette image, where the palette is the
+OpenTTD palette. Upon load of the PNG, the mask is loaded too, and overrides
+the RGB (not the Alpha) of the original PNG image, and replacing it with a
+8bpp color remapped and converted to 32bpp.
+
+An other thing that OpenTTD needs in your png, is 2 tEXt chunks: x_offs and
+y_offs. This to define the x- and y-offset, of course. Use the tool we supply
+to add this information. Sadly enough most graphical editors trashes those
+chunks upon save, so you have to readd it every time you save your image.
+
+Your images should be the same as the grf, in size.
+
--- a/projects/generate	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/generate	Sun Jun 17 21:31:00 2007 +0000
@@ -31,6 +31,7 @@
 
 # First, collect the list of Windows files
 sdl_config="1"
+png_config="1"
 os="MSVC"
 enable_dedicated="0"
 with_cocoa="0"
@@ -38,6 +39,24 @@
 with_threads="1"
 file_prefix="..\\\\src\\\\"
 
+safety_check() {
+	li=""
+	for i in `cat $1 | grep -v "#\|ottdres.rc\|win32.cpp\|win32_v.cpp" | xargs -n 1 basename | sort`; do
+		if [ "$li" = "$i" ]; then
+			echo " !! ERROR !!"
+			echo ""
+			echo "The filename '$i' is already used in this project."
+			echo "Because MSVC uses one single directory for all object files, it"
+			echo "cannot handle filenames with the same name inside the same project."
+			echo "Please rename either one of the file and try generating again."
+			echo ""
+			echo " !! ERROR !!"
+			exit 1
+		fi
+		li="$i"
+	done
+}
+
 load_main_data() {
 	# Read the source.list and process it
 	RES="`cat $1 | tr '\r' '\n' | awk '
@@ -53,6 +72,7 @@
 			deep += 1;
 
 			if ($0 == "SDL"         && "'$sdl_config'" == "")          { next; }
+			if ($0 == "PNG"         && "'$png_config'" == "")          { next; }
 			if ($0 == "OSX"         && "'$os'" != "OSX")               { next; }
 			if ($0 == "OS2"         && "'$os'" != "OS2")               { next; }
 			if ($0 == "PSP"         && "'$os'" != "PSP")               { next; }
@@ -169,6 +189,8 @@
 	' >> "$ROOT_DIR/projects/$2"
 }
 
+safety_check "$ROOT_DIR/source.list"
+
 load_main_data "$ROOT_DIR/source.list" openttd
 load_lang_data "$ROOT_DIR/src/lang/*.txt" lang
 
--- a/projects/langs.vcproj	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/langs.vcproj	Sun Jun 17 21:31:00 2007 +0000
@@ -338,6 +338,19 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\src\lang\piglatin.txt">
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating piglatin language file"
+					CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
+"
+					AdditionalDependencies=""
+					Outputs="..\bin\lang\piglatin.lng"/>
+			</FileConfiguration>
+		</File>
+		<File
 			RelativePath="..\src\lang\polish.txt">
 			<FileConfiguration
 				Name="Debug|Win32">
--- a/projects/langs_vs80.vcproj	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/langs_vs80.vcproj	Sun Jun 17 21:31:00 2007 +0000
@@ -392,6 +392,21 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\src\lang\piglatin.txt"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating piglatin language file"
+					CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+					AdditionalDependencies=""
+					Outputs="..\bin\lang\piglatin.lng"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
 			RelativePath="..\src\lang\polish.txt"
 			>
 			<FileConfiguration
--- a/projects/openttd.vcproj	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/openttd.vcproj	Sun Jun 17 21:31:00 2007 +0000
@@ -30,7 +30,7 @@
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="1"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="TRUE"
 				ExceptionHandling="TRUE"
 				RuntimeLibrary="0"
@@ -103,7 +103,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -552,6 +552,9 @@
 				RelativePath=".\..\src\newgrf_industries.h">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industrytiles.h">
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.h">
 			</File>
 			<File
@@ -645,6 +648,9 @@
 				RelativePath=".\..\src\sprite.h">
 			</File>
 			<File
+				RelativePath=".\..\src\spritecache.h">
+			</File>
+			<File
 				RelativePath=".\..\src\station.h">
 			</File>
 			<File
@@ -1223,6 +1229,24 @@
 			Name="Blitters"
 			Filter="">
 			<File
+				RelativePath=".\..\src\blitter\32bpp_base.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_base.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.hpp">
+			</File>
+			<File
 				RelativePath=".\..\src\blitter\8bpp_debug.cpp">
 			</File>
 			<File
@@ -1241,7 +1265,16 @@
 				RelativePath=".\..\src\blitter\8bpp_simple.hpp">
 			</File>
 			<File
-				RelativePath=".\..\src\blitter\blitter.hpp">
+				RelativePath=".\..\src\blitter\base.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\factory.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.hpp">
 			</File>
 		</Filter>
 		<Filter
@@ -1254,6 +1287,12 @@
 				RelativePath=".\..\src\spriteloader\grf.hpp">
 			</File>
 			<File
+				RelativePath=".\..\src\spriteloader\png.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.hpp">
+			</File>
+			<File
 				RelativePath=".\..\src\spriteloader\spriteloader.hpp">
 			</File>
 		</Filter>
@@ -1286,6 +1325,9 @@
 				RelativePath=".\..\src\newgrf_industries.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industrytiles.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.cpp">
 			</File>
 			<File
--- a/projects/openttd.vcproj.in	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/openttd.vcproj.in	Sun Jun 17 21:31:00 2007 +0000
@@ -30,7 +30,7 @@
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="1"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="TRUE"
 				ExceptionHandling="TRUE"
 				RuntimeLibrary="0"
@@ -103,7 +103,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
--- a/projects/openttd_vs80.vcproj	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Sun Jun 17 21:31:00 2007 +0000
@@ -59,7 +59,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -171,7 +171,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -277,7 +277,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -373,7 +373,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -964,6 +964,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industrytiles.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.h"
 				>
 			</File>
@@ -1088,6 +1092,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\spritecache.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\station.h"
 				>
 			</File>
@@ -1846,6 +1854,30 @@
 			Name="Blitters"
 			>
 			<File
+				RelativePath=".\..\src\blitter\32bpp_base.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_base.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\blitter\8bpp_debug.cpp"
 				>
 			</File>
@@ -1870,7 +1902,19 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\blitter\blitter.hpp"
+				RelativePath=".\..\src\blitter\base.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\factory.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.hpp"
 				>
 			</File>
 		</Filter>
@@ -1886,6 +1930,14 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\spriteloader\png.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\spriteloader\spriteloader.hpp"
 				>
 			</File>
@@ -1927,6 +1979,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industrytiles.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.cpp"
 				>
 			</File>
--- a/projects/openttd_vs80.vcproj.in	Tue Jun 12 19:52:26 2007 +0000
+++ b/projects/openttd_vs80.vcproj.in	Sun Jun 17 21:31:00 2007 +0000
@@ -59,7 +59,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -171,7 +171,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -277,7 +277,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -373,7 +373,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
--- a/source.list	Tue Jun 12 19:52:26 2007 +0000
+++ b/source.list	Sun Jun 17 21:31:00 2007 +0000
@@ -151,6 +151,7 @@
 newgrf_engine.h
 newgrf_house.h
 newgrf_industries.h
+newgrf_industrytiles.h
 newgrf_sound.h
 newgrf_spritegroup.h
 newgrf_station.h
@@ -182,6 +183,7 @@
 slope.h
 sound.h
 sprite.h
+spritecache.h
 station.h
 stdafx.h
 string.h
@@ -382,17 +384,30 @@
 #end
 
 # Blitters
+blitter/32bpp_base.cpp
+blitter/32bpp_base.hpp
+blitter/32bpp_simple.cpp
+blitter/32bpp_simple.hpp
+blitter/8bpp_base.cpp
+blitter/8bpp_base.hpp
 blitter/8bpp_debug.cpp
 blitter/8bpp_debug.hpp
 blitter/8bpp_optimized.cpp
 blitter/8bpp_optimized.hpp
 blitter/8bpp_simple.cpp
 blitter/8bpp_simple.hpp
-blitter/blitter.hpp
+blitter/base.hpp
+blitter/factory.hpp
+blitter/null.cpp
+blitter/null.hpp
 
 # Sprite loaders
 spriteloader/grf.cpp
 spriteloader/grf.hpp
+#if PNG
+spriteloader/png.cpp
+spriteloader/png.hpp
+#end
 spriteloader/spriteloader.hpp
 
 # NewGRF
@@ -404,6 +419,7 @@
 newgrf_engine.cpp
 newgrf_house.cpp
 newgrf_industries.cpp
+newgrf_industrytiles.cpp
 newgrf_sound.cpp
 newgrf_spritegroup.cpp
 newgrf_station.cpp
--- a/src/airport_movement.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/airport_movement.h	Sun Jun 17 21:31:00 2007 +0000
@@ -195,7 +195,7 @@
 	{  193,  104, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 32 Fly to landing position in air
 	{  105,  104, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 33 Going down for land
 	{    3,  104, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 34 Just landed, brake until end of runway
-	{   12,  104, 0,                               {DIR_N} }, // 35 Just landed, turn around and taxi 1 square
+	{   12,  104, AMED_SLOWTURN,                   {DIR_N} }, // 35 Just landed, turn around and taxi 1 square
 	{    7,   84, 0,                               {DIR_N} }, // 36 Taxi from runway to crossing
 	{  -31,  209, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 37 Fly around waiting for a landing spot (north-east)
 	{    1,    6, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 38 Fly around waiting for a landing spot (north-west)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_base.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,75 @@
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "32bpp_base.hpp"
+
+void *Blitter_32bppBase::MoveTo(const void *video, int x, int y)
+{
+	return (uint32 *)video + x + y * _screen.pitch;
+}
+
+void Blitter_32bppBase::SetPixel(void *video, int x, int y, uint8 color)
+{
+	*((uint32 *)video + x + y * _screen.pitch) = LookupColourInPalette(color);
+}
+
+void Blitter_32bppBase::SetPixelIfEmpty(void *video, int x, int y, uint8 color)
+{
+	uint32 *dst = (uint32 *)video + x + y * _screen.pitch;
+	if (*dst == 0) *dst = LookupColourInPalette(color);
+}
+
+void Blitter_32bppBase::SetHorizontalLine(void *video, int width, uint8 color)
+{
+	uint32 *dst = (uint32 *)video;
+	uint32 color32 = LookupColourInPalette(color);
+
+	for (; width > 0; width--) {
+		*dst = color32;
+		dst++;
+	}
+}
+
+void Blitter_32bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
+{
+	int direction = (height < 0) ? -1 : 1;
+	uint32 *dst = (uint32 *)video;
+	uint32 *usrc = (uint32 *)src;
+
+	height = abs(height);
+	for (; height > 0; height--) {
+		memcpy(dst, usrc, width * sizeof(uint32));
+		usrc += src_pitch * direction;
+		dst += _screen.pitch * direction;
+	}
+}
+
+void Blitter_32bppBase::CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+{
+	int direction = (height < 0) ? -1 : 1;
+	uint32 *udst = (uint32 *)dst;
+	uint32 *src = (uint32 *)video;
+
+	height = abs(height);
+	for (; height > 0; height--) {
+		memcpy(udst, src, width * sizeof(uint32));
+		src += _screen.pitch * direction;
+		udst += dst_pitch * direction;
+	}
+}
+
+void Blitter_32bppBase::MoveBuffer(void *video_dst, const void *video_src, int width, int height)
+{
+	uint32 *dst = (uint32 *)video_dst;
+	uint32 *src = (uint32 *)video_src;
+
+	for (; height > 0; height--) {
+		memmove(dst, src, width * sizeof(uint32));
+		src += _screen.pitch;
+		dst += _screen.pitch;
+	}
+}
+
+int Blitter_32bppBase::BufferSize(int width, int height)
+{
+	return width * height * sizeof(uint32);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_base.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,32 @@
+/* $Id$ */
+
+/** @file 32bpp_base.hpp */
+
+#ifndef BLITTER_32BPP_BASE_HPP
+#define BLITTER_32BPP_BASE_HPP
+
+#include "base.hpp"
+
+class Blitter_32bppBase : public Blitter {
+public:
+	/* virtual */ uint8 GetScreenDepth() { return 32; }
+//	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+//	/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
+//	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+	/* virtual */ void *MoveTo(const void *video, int x, int y);
+	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
+	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
+	/* virtual */ void SetHorizontalLine(void *video, int width, uint8 color);
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch);
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
+	/* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height);
+	/* virtual */ int BufferSize(int width, int height);
+
+	static inline uint32 LookupColourInPalette(uint8 index) {
+		#define ARGB(a, r, g, b) ((((a) << 24) & 0xFF000000) | (((r) << 16) & 0x00FF0000) | (((g) << 8) & 0x0000FF00) | ((b) & 0x000000FF))
+		if (index == 0) return 0x00000000;
+		return ARGB(0xFF, _cur_palette[index].r, _cur_palette[index].g, _cur_palette[index].b);
+	}
+};
+
+#endif /* BLITTER_32BPP_BASE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_simple.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,186 @@
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "../table/sprites.h"
+#include "32bpp_simple.hpp"
+
+static FBlitter_32bppSimple iFBlitter_32bppSimple;
+
+/**
+ * Compose a color based on RGB values.
+ */
+static inline uint ComposeColor(uint r, uint g, uint b)
+{
+	return (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF) << 0;
+}
+
+/**
+ * Compose a color based on RGBA values and the current pixel value.
+ */
+static inline uint ComposeColorRGBA(uint r, uint g, uint b, uint a, uint current)
+{
+	uint cr, cg, cb;
+	cr = GB(current, 16, 8);
+	cg = GB(current, 8,  8);
+	cb = GB(current, 0,  8);
+
+	return ComposeColor((r * a + cr * (255 - a)) / 255,
+											(g * a + cg * (255 - a)) / 255,
+											(b * a + cb * (255 - a)) / 255);
+}
+
+/**
+ * Compose a color based on Pixel value, alpha value, and the current pixel value.
+ */
+static inline uint ComposeColorPA(uint color, uint a, uint current)
+{
+	uint r, g, b, cr, cg, cb;
+	r  = GB(color,   16, 8);
+	g  = GB(color,   8,  8);
+	b  = GB(color,   0,  8);
+	cr = GB(current, 16, 8);
+	cg = GB(current, 8,  8);
+	cb = GB(current, 0,  8);
+
+	return ComposeColor((r * a + cr * (255 - a)) / 255,
+											(g * a + cg * (255 - a)) / 255,
+											(b * a + cb * (255 - a)) / 255);
+}
+
+/**
+ * Make a pixel looks like it is transparent.
+ * @param color the color already on the screen.
+ * @param amount the amount of transparency, times 100.
+ * @return the new color for the screen.
+ */
+static inline uint MakeTransparent(uint color, uint amount)
+{
+	uint r, g, b;
+	r = GB(color, 16, 8);
+	g = GB(color, 8,  8);
+	b = GB(color, 0,  8);
+
+	return ComposeColor(r * amount / 100, g * amount / 100, b * amount / 100);
+}
+
+/**
+ * Make a color grey-based.
+ * @param color the color to make grey.
+ * @return the new color, now grey.
+ */
+static inline uint MakeGrey(uint color)
+{
+	uint r, g, b;
+	r = GB(color, 16, 8);
+	g = GB(color, 8,  8);
+	b = GB(color, 0,  8);
+
+	/* To avoid doubles and stuff, multiple it with a total of 65536 (16bits), then
+	 *  divide by it to normalize the value to a byte again. See heightmap.cpp for
+	 *  information about the formula. */
+	color = ((r * 19595) + (g * 38470) + (b * 7471)) / 65536;
+
+	return ComposeColor(color, color, color);
+}
+
+void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const SpriteLoader::CommonPixel *src, *src_line;
+	uint32 *dst, *dst_line;
+
+	/* Find where to start reading in the source sprite */
+	src_line = (const SpriteLoader::CommonPixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+	dst_line = (uint32 *)bp->dst + bp->top * bp->pitch + bp->left;
+
+	for (int y = 0; y < bp->height; y++) {
+		dst = dst_line;
+		dst_line += bp->pitch;
+
+		src = src_line;
+		src_line += bp->sprite_width * ScaleByZoom(1, zoom);
+
+		for (int x = 0; x < bp->width; x++) {
+			switch (mode) {
+				case BM_COLOUR_REMAP:
+					/* In case the m-channel is zero, do not remap this pixel in any way */
+					if (src->m == 0) {
+						if (src->a != 0) *dst = ComposeColorRGBA(src->r, src->g, src->b, src->a, *dst);
+					} else {
+						if (bp->remap[src->m] != 0) *dst = ComposeColorPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+					}
+					break;
+
+				case BM_TRANSPARENT:
+					/* TODO -- We make an assumption here that the remap in fact is transparency, not some color.
+					 *  This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
+					 *  we produce a result the newgrf maker didn't expect ;) */
+
+					/* Make the current color a bit more black, so it looks like this image is transparent */
+					if (src->a != 0) *dst = MakeTransparent(*dst, 75);
+					break;
+
+				default:
+					if (src->a != 0) *dst = ComposeColorRGBA(src->r, src->g, src->b, src->a, *dst);
+					break;
+			}
+			dst++;
+			src += ScaleByZoom(1, zoom);
+		}
+	}
+}
+
+void Blitter_32bppSimple::DrawColorMappingRect(void *dst, int width, int height, int pal)
+{
+	uint32 *udst = (uint32 *)dst;
+
+	if (pal == PALETTE_TO_TRANSPARENT) {
+		do {
+			for (int i = 0; i != width; i++) {
+				*udst = MakeTransparent(*udst, 60);
+				udst++;
+			}
+			udst = udst - width + _screen.pitch;
+		} while (height--);
+		return;
+	}
+	if (pal == PALETTE_TO_STRUCT_GREY) {
+		do {
+			for (int i = 0; i != width; i++) {
+				*udst = MakeGrey(*udst);
+				udst++;
+			}
+			udst = udst - width + _screen.pitch;
+		} while (height--);
+		return;
+	}
+
+	DEBUG(misc, 0, "32bpp blitter doesn't know how to draw this color table ('%d')", pal);
+}
+
+Sprite *Blitter_32bppSimple::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	SpriteLoader::CommonPixel *dst;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	dst = (SpriteLoader::CommonPixel *)dest_sprite->data;
+
+	memcpy(dst, sprite->data, sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
+	for (int i = 0; i < sprite->height * sprite->width; i++) {
+		if (dst[i].m != 0) {
+			/* Pre-convert the mapping channel to a RGB value */
+			uint color = this->LookupColourInPalette(dst[i].m);
+			dst[i].r = GB(color, 16, 8);
+			dst[i].g = GB(color, 8,  8);
+			dst[i].b = GB(color, 0,  8);
+		}
+	}
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_simple.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,25 @@
+/* $Id$ */
+
+/** @file 32bpp_simple.hpp */
+
+#ifndef BLITTER_32BPP_SIMPLE_HPP
+#define BLITTER_32BPP_SIMPLE_HPP
+
+#include "32bpp_base.hpp"
+#include "factory.hpp"
+
+class Blitter_32bppSimple : public Blitter_32bppBase {
+public:
+	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+	/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
+	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+};
+
+class FBlitter_32bppSimple: public BlitterFactory<FBlitter_32bppSimple> {
+public:
+	/* virtual */ const char *GetName() { return "32bpp-simple"; }
+	/* virtual */ const char *GetDescription() { return "32bpp Simple Blitter (no palette animation)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSimple(); }
+};
+
+#endif /* BLITTER_32BPP_SIMPLE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_base.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,79 @@
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "8bpp_base.hpp"
+
+void Blitter_8bppBase::DrawColorMappingRect(void *dst, int width, int height, int pal)
+{
+	const uint8 *ctab = GetNonSprite(pal) + 1;
+
+	do {
+		for (int i = 0; i != width; i++) *((uint8 *)dst + i) = ctab[((uint8 *)dst)[i]];
+		dst = (uint8 *)dst + _screen.pitch;
+	} while (height--);
+}
+
+void *Blitter_8bppBase::MoveTo(const void *video, int x, int y)
+{
+	return (uint8 *)video + x + y * _screen.pitch;
+}
+
+void Blitter_8bppBase::SetPixel(void *video, int x, int y, uint8 color)
+{
+	*((uint8 *)video + x + y * _screen.pitch) = color;
+}
+
+void Blitter_8bppBase::SetPixelIfEmpty(void *video, int x, int y, uint8 color)
+{
+	uint8 *dst = (uint8 *)video + x + y * _screen.pitch;
+	if (*dst == 0) *dst = color;
+}
+
+void Blitter_8bppBase::SetHorizontalLine(void *video, int width, uint8 color)
+{
+	memset(video, color, width);
+}
+
+void Blitter_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
+{
+	int direction = (height < 0) ? -1 : 1;
+	uint8 *dst = (uint8 *)video;
+	uint8 *usrc = (uint8 *)src;
+
+	height = abs(height);
+	for (; height > 0; height--) {
+		memcpy(dst, usrc, width);
+		usrc += src_pitch * direction;
+		dst += _screen.pitch * direction;
+	}
+}
+
+void Blitter_8bppBase::CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+{
+	int direction = (height < 0) ? -1 : 1;
+	uint8 *udst = (uint8 *)dst;
+	uint8 *src = (uint8 *)video;
+
+	height = abs(height);
+	for (; height > 0; height--) {
+		memcpy(udst, src, width);
+		src += _screen.pitch * direction;
+		udst += dst_pitch * direction;
+	}
+}
+
+void Blitter_8bppBase::MoveBuffer(void *video_dst, const void *video_src, int width, int height)
+{
+	uint8 *dst = (uint8 *)video_dst;
+	uint8 *src = (uint8 *)video_src;
+
+	for (; height > 0; height--) {
+		memmove(dst, src, width);
+		src += _screen.pitch;
+		dst += _screen.pitch;
+	}
+}
+
+int Blitter_8bppBase::BufferSize(int width, int height)
+{
+	return width * height;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_base.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,26 @@
+/* $Id$ */
+
+/** @file 8bpp_base.hpp */
+
+#ifndef BLITTER_8BPP_BASE_HPP
+#define BLITTER_8BPP_BASE_HPP
+
+#include "base.hpp"
+
+class Blitter_8bppBase : public Blitter {
+public:
+	/* virtual */ uint8 GetScreenDepth() { return 8; }
+//	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+	/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
+//	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+	/* virtual */ void *MoveTo(const void *video, int x, int y);
+	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
+	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
+	/* virtual */ void SetHorizontalLine(void *video, int width, uint8 color);
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch);
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
+	/* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height);
+	/* virtual */ int BufferSize(int width, int height);
+};
+
+#endif /* BLITTER_8BPP_BASE_HPP */
--- a/src/blitter/8bpp_debug.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/blitter/8bpp_debug.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -12,12 +12,12 @@
 
 void Blitter_8bppDebug::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
 {
-	const byte *src, *src_line;
-	Pixel8 *dst, *dst_line;
+	const uint8 *src, *src_line;
+	uint8 *dst, *dst_line;
 
 	/* Find where to start reading in the source sprite */
-	src_line = (const byte *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
-	dst_line = (Pixel8 *)bp->dst + bp->top * bp->pitch + bp->left;
+	src_line = (const uint8 *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+	dst_line = (uint8 *)bp->dst + bp->top * bp->pitch + bp->left;
 
 	for (int y = 0; y < bp->height; y++) {
 		dst = dst_line;
--- a/src/blitter/8bpp_debug.hpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/blitter/8bpp_debug.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -5,25 +5,19 @@
 #ifndef BLITTER_8BPP_DEBUG_HPP
 #define BLITTER_8BPP_DEBUG_HPP
 
-#include "blitter.hpp"
-
-typedef Pixel Pixel8;
+#include "8bpp_base.hpp"
+#include "factory.hpp"
 
-class Blitter_8bppDebug : public Blitter {
+class Blitter_8bppDebug : public Blitter_8bppBase {
 public:
-	uint8 GetScreenDepth() { return 8; }
-
-	void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
-
-	Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
 };
 
 class FBlitter_8bppDebug: public BlitterFactory<FBlitter_8bppDebug> {
 public:
 	/* virtual */ const char *GetName() { return "8bpp-debug"; }
-
 	/* virtual */ const char *GetDescription() { return "8bpp Debug Blitter (testing only)"; }
-
 	/* virtual */ Blitter *CreateInstance() { return new Blitter_8bppDebug(); }
 };
 
--- a/src/blitter/8bpp_optimized.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/blitter/8bpp_optimized.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -12,16 +12,16 @@
 
 void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
 {
-	const byte *src, *src_next;
-	Pixel8 *dst, *dst_line;
+	const uint8 *src, *src_next;
+	uint8 *dst, *dst_line;
 	uint offset = 0;
 
 	/* Find the offset of this zoom-level */
-	offset = ((const byte *)bp->sprite)[(int)zoom * 2] | ((const byte *)bp->sprite)[(int)zoom * 2 + 1] << 8;
+	offset = ((const uint8 *)bp->sprite)[(int)zoom * 2] | ((const byte *)bp->sprite)[(int)zoom * 2 + 1] << 8;
 
 	/* Find where to start reading in the source sprite */
-	src = (const byte *)bp->sprite + offset;
-	dst_line = (Pixel8 *)bp->dst + bp->top * bp->pitch + bp->left;
+	src = (const uint8 *)bp->sprite + offset;
+	dst_line = (uint8 *)bp->dst + bp->top * bp->pitch + bp->left;
 
 	/* Skip over the top lines in the source image */
 	for (int y = 0; y < bp->skip_top; y++) {
--- a/src/blitter/8bpp_optimized.hpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/blitter/8bpp_optimized.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -5,25 +5,19 @@
 #ifndef BLITTER_8BPP_OPTIMIZED_HPP
 #define BLITTER_8BPP_OPTIMIZED_HPP
 
-#include "blitter.hpp"
-
-typedef Pixel Pixel8;
+#include "8bpp_base.hpp"
+#include "factory.hpp"
 
-class Blitter_8bppOptimized : public Blitter {
+class Blitter_8bppOptimized : public Blitter_8bppBase {
 public:
-	uint8 GetScreenDepth() { return 8; }
-
-	void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
-
-	Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
 };
 
 class FBlitter_8bppOptimized: public BlitterFactory<FBlitter_8bppOptimized> {
 public:
 	/* virtual */ const char *GetName() { return "8bpp-optimized"; }
-
 	/* virtual */ const char *GetDescription() { return "8bpp Optimized Blitter (compression + all-ZoomLevel cache)"; }
-
 	/* virtual */ Blitter *CreateInstance() { return new Blitter_8bppOptimized(); }
 };
 
--- a/src/blitter/8bpp_simple.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/blitter/8bpp_simple.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -11,12 +11,12 @@
 
 void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
 {
-	const byte *src, *src_line;
-	Pixel8 *dst, *dst_line;
+	const uint8 *src, *src_line;
+	uint8 *dst, *dst_line;
 
 	/* Find where to start reading in the source sprite */
-	src_line = (const byte *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
-	dst_line = (Pixel8 *)bp->dst + bp->top * bp->pitch + bp->left;
+	src_line = (const uint8 *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+	dst_line = (uint8 *)bp->dst + bp->top * bp->pitch + bp->left;
 
 	for (int y = 0; y < bp->height; y++) {
 		dst = dst_line;
--- a/src/blitter/8bpp_simple.hpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/blitter/8bpp_simple.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -5,25 +5,19 @@
 #ifndef BLITTER_8BPP_SIMPLE_HPP
 #define BLITTER_8BPP_SIMPLE_HPP
 
-#include "blitter.hpp"
-
-typedef Pixel Pixel8;
+#include "8bpp_base.hpp"
+#include "factory.hpp"
 
-class Blitter_8bppSimple : public Blitter {
+class Blitter_8bppSimple : public Blitter_8bppBase {
 public:
-	uint8 GetScreenDepth() { return 8; }
-
-	void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
-
-	Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
 };
 
 class FBlitter_8bppSimple: public BlitterFactory<FBlitter_8bppSimple> {
 public:
 	/* virtual */ const char *GetName() { return "8bpp-simple"; }
-
 	/* virtual */ const char *GetDescription() { return "8bpp Simple Blitter (relative slow, but never wrong)"; }
-
 	/* virtual */ Blitter *CreateInstance() { return new Blitter_8bppSimple(); }
 };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/base.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,139 @@
+/* $Id$ */
+
+#ifndef BLITTER_BASE_HPP
+#define BLITTER_BASE_HPP
+
+#include "../spritecache.h"
+#include "../spriteloader/spriteloader.hpp"
+
+enum BlitterMode {
+	BM_NORMAL,
+	BM_COLOUR_REMAP,
+	BM_TRANSPARENT,
+};
+
+/**
+ * How all blitters should look like. Extend this class to make your own.
+ */
+class Blitter {
+public:
+	struct BlitterParams {
+		const void *sprite;      ///< Pointer to the sprite how ever the encoder stored it
+		const byte *remap;       ///< XXX -- Temporary storage for remap array
+
+		int skip_left, skip_top; ///< How much pixels of the source to skip on the left and top (based on zoom of dst)
+		int width, height;       ///< The width and height in pixels that needs to be drawn to dst
+		int sprite_width;        ///< Real width of the sprite
+		int sprite_height;       ///< Real height of the sprite
+		int left, top;           ///< The offset in the 'dst' in pixels to start drawing
+
+		void *dst;               ///< Destination buffer
+		int pitch;               ///< The pitch of the destination buffer
+	};
+
+	typedef void *AllocatorProc(size_t size);
+
+	/**
+	 * Get the screen depth this blitter works for.
+	 *  This is either: 8, 16, 24 or 32.
+	 */
+	virtual uint8 GetScreenDepth() = 0;
+
+	/**
+	 * Draw an image to the screen, given an amount of params defined above.
+	 */
+	virtual void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) = 0;
+
+	/**
+	 * Draw a colortable to the screen. This is: the color of the screen is read
+	 *  and is looked-up in the palette to match a new color, which then is put
+	 *  on the screen again.
+	 * @param dst the destination pointer (video-buffer).
+	 * @param width the width of the buffer.
+	 * @param height the height of the buffer.
+	 * @param pal the palette to use.
+	 */
+	virtual void DrawColorMappingRect(void *dst, int width, int height, int pal) = 0;
+
+	/**
+	 * Convert a sprite from the loader to our own format.
+	 */
+	virtual Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator) = 0;
+
+	/**
+	 * Move the destination pointer the requested amount x and y, keeping in mind
+	 *  any pitch and bpp of the renderer.
+	 * @param video The destination pointer (video-buffer) to scroll.
+	 * @param x How much you want to scroll to the right.
+	 * @param y How much you want to scroll to the bottom.
+	 * @return A new destination pointer moved the the requested place.
+	 */
+	virtual void *MoveTo(const void *video, int x, int y) = 0;
+
+	/**
+	 * Draw a pixel with a given color on the video-buffer.
+	 * @param video The destination pointer (video-buffer).
+	 * @param x The x position within video-buffer.
+	 * @param y The y position within video-buffer.
+	 * @param color A 8bpp mapping color.
+	 */
+	virtual void SetPixel(void *video, int x, int y, uint8 color) = 0;
+
+	/**
+	 * Draw a pixel with a given color on the video-buffer if there is currently a black pixel.
+	 * @param video The destination pointer (video-buffer).
+	 * @param x The x position within video-buffer.
+	 * @param y The y position within video-buffer.
+	 * @param color A 8bpp mapping color.
+	 */
+	virtual void SetPixelIfEmpty(void *video, int x, int y, uint8 color) = 0;
+
+	/**
+	 * Make a single horizontal line in a single color on the video-buffer.
+	 * @param video The destination pointer (video-buffer).
+	 * @param width The lenght of the line.
+	 * @param color A 8bpp mapping color.
+	 */
+	virtual void SetHorizontalLine(void *video, int width, uint8 color) = 0;
+
+	/**
+	 * Copy from a buffer to the screen.
+	 * @param video The destionation pointer (video-buffer).
+	 * @param src The buffer from which the data will be read.
+	 * @param width The width of the buffer.
+	 * @param height The height of the buffer.
+	 * @param src_pitch The pitch (byte per line) of the source buffer.
+	 */
+	virtual void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch) = 0;
+
+	/**
+	 * Copy from the screen to a buffer.
+	 * @param video The destination pointer (video-buffer).
+	 * @param dst The buffer in which the data will be stored.
+	 * @param width The width of the buffer.
+	 * @param height The height of the buffer.
+	 * @param dst_pitch The pitch (byte per line) of the destination buffer.
+	 */
+	virtual void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) = 0;
+
+	/**
+	 * Move the videobuffer some places (via memmove).
+	 * @param video_dst The destination pointer (video-buffer).
+	 * @param video_src The source pointer (video-buffer).
+	 * @param width The width of the buffer to move.
+	 * @param height The height of the buffer to move.
+	 */
+	virtual void MoveBuffer(void *video_dst, const void *video_src, int width, int height) = 0;
+
+	/**
+	 * Calculate how much memory there is needed for an image of this size in the video-buffer.
+	 * @param width The width of the buffer-to-be.
+	 * @param height The height of the buffer-to-be.
+	 * @return The size needed for the buffer.
+	 */
+	virtual int BufferSize(int width, int height) = 0;
+
+	virtual ~Blitter() { }
+};
+
+#endif /* BLITTER_BASE_HPP */
--- a/src/blitter/blitter.hpp	Tue Jun 12 19:52:26 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +0,0 @@
-/* $Id$ */
-
-/** @file blitter.hpp */
-
-#ifndef BLITTER_HPP
-#define BLITTER_HPP
-
-#include "../spriteloader/spriteloader.hpp"
-#include "../spritecache.h"
-#include <string>
-#include <map>
-
-enum BlitterMode {
-	BM_NORMAL,
-	BM_COLOUR_REMAP,
-	BM_TRANSPARENT,
-};
-
-/**
- * How all blitters should look like. Extend this class to make your own.
- */
-class Blitter {
-public:
-	struct BlitterParams {
-		const void *sprite;      ///< Pointer to the sprite how ever the encoder stored it
-		const byte *remap;       ///< XXX -- Temporary storage for remap array
-
-		int skip_left, skip_top; ///< How much pixels of the source to skip on the left and top (based on zoom of dst)
-		int width, height;       ///< The width and height in pixels that needs to be drawn to dst
-		int sprite_width;        ///< Real width of the sprite
-		int sprite_height;       ///< Real height of the sprite
-		int left, top;           ///< The offset in the 'dst' in pixels to start drawing
-
-		void *dst;               ///< Destination buffer
-		int pitch;               ///< The pitch of the destination buffer
-	};
-
-	typedef void *AllocatorProc(size_t size);
-
-	/**
-	 * Get the screen depth this blitter works for.
-	 *  This is either: 8, 16, 24 or 32.
-	 */
-	virtual uint8 GetScreenDepth() = 0;
-
-	/**
-	 * Draw an image to the screen, given an amount of params defined above.
-	 */
-	virtual void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) = 0;
-
-	/**
-	 * Convert a sprite from the loader to our own format.
-	 */
-	virtual Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator) = 0;
-
-	virtual ~Blitter() { }
-};
-
-/**
- * The base factory, keeping track of all blitters.
- */
-class BlitterFactoryBase {
-private:
-	char *name;
-	typedef std::map<std::string, BlitterFactoryBase *> Blitters;
-
-	static Blitters &GetBlitters()
-	{
-		static Blitters &s_blitters = *new Blitters();
-		return s_blitters;
-	}
-
-	static Blitter **GetActiveBlitter()
-	{
-		static Blitter *s_blitter = NULL;
-		return &s_blitter;
-	}
-
-protected:
-	/**
-	 * Register a blitter internally, based on his name.
-	 * @param name the name of the blitter.
-	 * @note an assert() will be trigger if 2 blitters with the same name try to register.
-	 */
-	void RegisterBlitter(const char *name)
-	{
-		/* Don't register nameless Blitters */
-		if (name == NULL) return;
-
-		this->name = strdup(name);
-		std::pair<Blitters::iterator, bool> P = GetBlitters().insert(Blitters::value_type(name, this));
-		assert(P.second);
-	}
-
-public:
-	BlitterFactoryBase() :
-		name(NULL)
-	{}
-
-	virtual ~BlitterFactoryBase() { if (this->name != NULL) GetBlitters().erase(this->name); free(this->name); }
-
-	/**
-	 * Find the requested blitter and return his class.
-	 * @param name the blitter to select.
-	 * @post Sets the blitter so GetCurrentBlitter() returns it too.
-	 */
-	static Blitter *SelectBlitter(const char *name)
-	{
-		if (GetBlitters().size() == 0) return NULL;
-
-		Blitters::iterator it = GetBlitters().begin();
-		for (; it != GetBlitters().end(); it++) {
-			BlitterFactoryBase *b = (*it).second;
-			if (strcasecmp(name, b->name) == 0) {
-				Blitter *newb = b->CreateInstance();
-				*GetActiveBlitter() = newb;
-				return newb;
-			}
-		}
-		return NULL;
-	}
-
-	/**
-	 * Get the current active blitter (always set by calling SelectBlitter).
-	 */
-	static Blitter *GetCurrentBlitter()
-	{
-		return *GetActiveBlitter();
-	}
-
-
-	static char *GetBlittersInfo(char *p, const char *last)
-	{
-		p += snprintf(p, last - p, "List of blitters:\n");
-		Blitters::iterator it = GetBlitters().begin();
-		for (; it != GetBlitters().end(); it++) {
-			BlitterFactoryBase *b = (*it).second;
-			p += snprintf(p, last - p, "%18s: %s\n", b->name, b->GetDescription());
-		}
-		p += snprintf(p, last - p, "\n");
-
-		return p;
-	}
-
-	/**
-	 * Get a nice description of the blitter-class.
-	 */
-	virtual const char *GetDescription() = 0;
-
-	/**
-	 * Create an instance of this Blitter-class.
-	 */
-	virtual Blitter *CreateInstance() = 0;
-};
-
-/**
- * A template factory, so ->GetName() works correctly. This because else some compiler will complain.
- */
-template <class T>
-class BlitterFactory: public BlitterFactoryBase {
-public:
-	BlitterFactory() { this->RegisterBlitter(((T *)this)->GetName()); }
-
-	/**
-	 * Get the long, human readable, name for the Blitter-class.
-	 */
-	const char *GetName();
-};
-
-#endif /* BLITTER_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/factory.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,121 @@
+/* $Id$ */
+
+#ifndef BLITTER_FACTORY_HPP
+#define BLITTER_FACTORY_HPP
+
+#include "base.hpp"
+#include <string>
+#include <map>
+
+/**
+ * The base factory, keeping track of all blitters.
+ */
+class BlitterFactoryBase {
+private:
+	char *name;
+	typedef std::map<std::string, BlitterFactoryBase *> Blitters;
+
+	static Blitters &GetBlitters()
+	{
+		static Blitters &s_blitters = *new Blitters();
+		return s_blitters;
+	}
+
+	static Blitter **GetActiveBlitter()
+	{
+		static Blitter *s_blitter = NULL;
+		return &s_blitter;
+	}
+
+protected:
+	/**
+	 * Register a blitter internally, based on his name.
+	 * @param name the name of the blitter.
+	 * @note an assert() will be trigger if 2 blitters with the same name try to register.
+	 */
+	void RegisterBlitter(const char *name)
+	{
+		/* Don't register nameless Blitters */
+		if (name == NULL) return;
+
+		this->name = strdup(name);
+		std::pair<Blitters::iterator, bool> P = GetBlitters().insert(Blitters::value_type(name, this));
+		assert(P.second);
+	}
+
+public:
+	BlitterFactoryBase() :
+		name(NULL)
+	{}
+
+	virtual ~BlitterFactoryBase() { if (this->name != NULL) GetBlitters().erase(this->name); free(this->name); }
+
+	/**
+	 * Find the requested blitter and return his class.
+	 * @param name the blitter to select.
+	 * @post Sets the blitter so GetCurrentBlitter() returns it too.
+	 */
+	static Blitter *SelectBlitter(const char *name)
+	{
+		if (GetBlitters().size() == 0) return NULL;
+
+		Blitters::iterator it = GetBlitters().begin();
+		for (; it != GetBlitters().end(); it++) {
+			BlitterFactoryBase *b = (*it).second;
+			if (strcasecmp(name, b->name) == 0) {
+				Blitter *newb = b->CreateInstance();
+				*GetActiveBlitter() = newb;
+				return newb;
+			}
+		}
+		return NULL;
+	}
+
+	/**
+	 * Get the current active blitter (always set by calling SelectBlitter).
+	 */
+	static Blitter *GetCurrentBlitter()
+	{
+		return *GetActiveBlitter();
+	}
+
+
+	static char *GetBlittersInfo(char *p, const char *last)
+	{
+		p += snprintf(p, last - p, "List of blitters:\n");
+		Blitters::iterator it = GetBlitters().begin();
+		for (; it != GetBlitters().end(); it++) {
+			BlitterFactoryBase *b = (*it).second;
+			p += snprintf(p, last - p, "%18s: %s\n", b->name, b->GetDescription());
+		}
+		p += snprintf(p, last - p, "\n");
+
+		return p;
+	}
+
+	/**
+	 * Get a nice description of the blitter-class.
+	 */
+	virtual const char *GetDescription() = 0;
+
+	/**
+	 * Create an instance of this Blitter-class.
+	 */
+	virtual Blitter *CreateInstance() = 0;
+};
+
+/**
+ * A template factory, so ->GetName() works correctly. This because else some compiler will complain.
+ */
+template <class T>
+class BlitterFactory: public BlitterFactoryBase {
+public:
+	BlitterFactory() { this->RegisterBlitter(((T *)this)->GetName()); }
+
+	/**
+	 * Get the long, human readable, name for the Blitter-class.
+	 */
+	const char *GetName();
+};
+
+#endif /* BLITTER_FACTORY_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/null.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,18 @@
+#include "../stdafx.h"
+#include "../variables.h"
+#include "null.hpp"
+
+static FBlitter_Null iFBlitter_Null;
+
+Sprite *Blitter_Null::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite));
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/null.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,34 @@
+/* $Id$ */
+
+/** @file null.hpp */
+
+#ifndef BLITTER_NULL_HPP
+#define BLITTER_NULL_HPP
+
+#include "base.hpp"
+#include "factory.hpp"
+
+class Blitter_Null : public Blitter {
+public:
+	/* virtual */ uint8 GetScreenDepth() { return 0; }
+	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) {};
+	/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal) {};
+	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+	/* virtual */ void *MoveTo(const void *video, int x, int y) { return NULL; };
+	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color) {};
+	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color) {};
+	/* virtual */ void SetHorizontalLine(void *video, int width, uint8 color) {};
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch) {};
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) {};
+	/* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height) {};
+	/* virtual */ int BufferSize(int width, int height) { return 0; };
+};
+
+class FBlitter_Null: public BlitterFactory<FBlitter_Null> {
+public:
+	/* virtual */ const char *GetName() { return "null"; }
+	/* virtual */ const char *GetDescription() { return "Null Blitter (does nothing)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_Null(); }
+};
+
+#endif /* BLITTER_NULL_HPP */
--- a/src/console_cmds.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/console_cmds.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -19,6 +19,7 @@
 #include "command.h"
 #include "settings.h"
 #include "fios.h"
+#include "fileio.h"
 #include "vehicle.h"
 #include "station.h"
 #include "strings.h"
@@ -173,7 +174,6 @@
 	return false;
 }
 
-extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
 extern void BuildFileList();
 extern void SetFiosType(const byte fiostype);
 
@@ -186,16 +186,15 @@
 	}
 
 	if (argc == 2) {
-		char buf[200];
-
-		snprintf(buf, lengthof(buf), "%s%s%s.sav", _paths.save_dir, PATHSEP, argv[1]);
+		char *filename = str_fmt("%s.sav", argv[1]);
 		IConsolePrint(_icolour_def, "Saving map...");
 
-		if (SaveOrLoad(buf, SL_SAVE) != SL_OK) {
-			IConsolePrint(_icolour_err, "SaveMap failed");
+		if (SaveOrLoad(filename, SL_SAVE, SAVE_DIR) != SL_OK) {
+			IConsolePrint(_icolour_err, "Saving map failed");
 		} else {
-			IConsolePrintF(_icolour_def, "Map sucessfully saved to %s", buf);
+			IConsolePrintF(_icolour_def, "Map sucessfully saved to %s", filename);
 		}
+		free(filename);
 		return true;
 	}
 
@@ -941,6 +940,20 @@
 	return true;
 }
 
+DEF_CONSOLE_CMD(ConGetDate)
+{
+	if (argc == 0) {
+		IConsoleHelp("Returns the current date (day-month-year) of the game. Usage: 'getdate'");
+		return true;
+	}
+
+	YearMonthDay ymd;
+	ConvertDateToYMD(_date, &ymd);
+	IConsolePrintF(_icolour_def, "Date: %d-%d-%d", ymd.day, ymd.month + 1, ymd.year);
+	return true;
+}
+
+
 DEF_CONSOLE_CMD(ConAlias)
 {
 	IConsoleAlias *alias;
@@ -1496,6 +1509,7 @@
 	IConsoleCmdRegister("newgame",      ConNewGame);
 	IConsoleCmdRegister("restart",      ConRestart);
 	IConsoleCmdRegister("getseed",      ConGetSeed);
+	IConsoleCmdRegister("getdate",      ConGetDate);
 	IConsoleCmdRegister("quit",         ConExit);
 	IConsoleCmdRegister("resetengines", ConResetEngines);
 	IConsoleCmdRegister("return",       ConReturn);
--- a/src/economy.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/economy.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -67,10 +67,7 @@
 		uint num = 0;
 
 		FOR_ALL_STATIONS(st) {
-			if (st->owner == owner) {
-				uint facil = st->facilities;
-				do num += (facil&1); while (facil >>= 1);
-			}
+			if (st->owner == owner) num += CountBitsSet(st->facilities);
 		}
 
 		value = num * _price.station_value * 25;
@@ -144,10 +141,7 @@
 		const Station* st;
 
 		FOR_ALL_STATIONS(st) {
-			if (st->owner == owner) {
-				int facil = st->facilities;
-				do num += facil&1; while (facil>>=1);
-			}
+			if (st->owner == owner) num += CountBitsSet(st->facilities);
 		}
 		_score_part[owner][SCORE_STATIONS] = num;
 	}
@@ -196,9 +190,7 @@
 
 /* Generate score for variety of cargo */
 	{
-		uint cargo = p->cargo_types;
-		uint num = 0;
-		do num += cargo&1; while (cargo>>=1);
+		uint num = CountBitsSet(p->cargo_types);
 		_score_part[owner][SCORE_CARGO] = num;
 		if (update) p->cargo_types = 0;
 	}
@@ -1402,9 +1394,11 @@
 		/* No cargo to unload */
 		if (v->cargo_cap == 0 || v->cargo_count == 0) continue;
 
-		SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 		/* All cargo has already been paid for, no need to pay again */
-		if (v->cargo_count == v->cargo_paid_for) continue;
+		if (v->cargo_count == v->cargo_paid_for) {
+			SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
+			continue;
+		}
 
 		GoodsEntry *ge = &st->goods[v->cargo_type];
 
@@ -1423,6 +1417,8 @@
 
 			v->cargo_feeder_share = 0;   // clear transfer cost per vehicle
 			result |= 1;
+
+			SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 		} else if (front_v->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
 			if ((front_v->current_order.flags & OF_TRANSFER) != 0) {
 				virtual_profit = GetTransportedGoodsIncome(
@@ -1444,6 +1440,8 @@
 				v->cargo_paid_for = v->cargo_count;       // record how much of the cargo has been paid for to eliminate double counting
 			}
 			result |= 2;
+
+			SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 		}
 	}
 
--- a/src/fileio.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/fileio.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -11,7 +11,9 @@
 #include "variables.h"
 #include "debug.h"
 #include "fios.h"
-#ifndef WIN32
+#ifdef WIN32
+#include <windows.h>
+#else
 #include <pwd.h>
 #include <unistd.h>
 #include <sys/stat.h>
@@ -28,11 +30,12 @@
 	byte *buffer, *buffer_end;          ///< position pointer in local buffer and last valid byte of buffer
 	uint32 pos;                         ///< current (system) position in file
 	FILE *cur_fh;                       ///< current file handle
+	const char *filename;               ///< current filename
 	FILE *handles[MAX_HANDLES];         ///< array of file handles we can have open
 	byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file
+	const char *filenames[MAX_HANDLES]; ///< array of filenames we (should) have open
 #if defined(LIMITED_FDS)
 	uint open_handles;                  ///< current amount of open handles
-	const char *filename[MAX_HANDLES];  ///< array of filenames we (should) have open
 	uint usage_count[MAX_HANDLES];      ///< count how many times this file has been opened
 #endif /* LIMITED_FDS */
 };
@@ -45,6 +48,11 @@
 	return _fio.pos + (_fio.buffer - _fio.buffer_start) - FIO_BUFFER_SIZE;
 }
 
+const char *FioGetFilename()
+{
+	return _fio.filename;
+}
+
 void FioSeekTo(uint32 pos, int mode)
 {
 	if (mode == SEEK_CUR) pos += FioGetPos();
@@ -76,6 +84,7 @@
 	f = _fio.handles[pos >> 24];
 	assert(f != NULL);
 	_fio.cur_fh = f;
+	_fio.filename = _fio.filenames[pos >> 24];
 	FioSeekTo(GB(pos, 0, 24), SEEK_SET);
 }
 
@@ -174,60 +183,130 @@
 
 	FioCloseFile(slot); // if file was opened before, close it
 	_fio.handles[slot] = f;
+	_fio.filenames[slot] = filename;
 #if defined(LIMITED_FDS)
-	_fio.filename[slot] = filename;
 	_fio.usage_count[slot] = 0;
 	_fio.open_handles++;
 #endif /* LIMITED_FDS */
 	FioSeekToFile(slot << 24);
 }
 
+const char *_subdirs[NUM_SUBDIRS] = {
+	"",
+	"save" PATHSEP,
+	"save" PATHSEP "autosave" PATHSEP,
+	"scenario" PATHSEP,
+	"scenario" PATHSEP "heightmap" PATHSEP,
+	"gm" PATHSEP,
+	"data" PATHSEP,
+	"lang" PATHSEP
+};
+
+const char *_searchpaths[NUM_SEARCHPATHS];
+
 /**
  * Check whether the given file exists
  * @param filename the file to try for existance
+ * @param subdir the subdirectory to look in
  * @return true if and only if the file can be opened
  */
-bool FioCheckFileExists(const char *filename)
+bool FioCheckFileExists(const char *filename, Subdirectory subdir)
 {
-	FILE *f = FioFOpenFile(filename);
+	FILE *f = FioFOpenFile(filename, "rb", subdir);
 	if (f == NULL) return false;
 
 	fclose(f);
 	return true;
 }
 
-/**
- * Opens the file with the given name
- * @param filename the file to open (in either data_dir or second_data_dir)
- * @return the opened file or NULL when it failed.
- */
-FILE *FioFOpenFile(const char *filename)
+char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename)
 {
-	FILE *f;
-	char buf[MAX_PATH];
+	assert(subdir < NUM_SUBDIRS);
+	assert(sp < NUM_SEARCHPATHS);
 
-	if (filename[0] == PATHSEPCHAR || filename[1] == ':') {
-		ttd_strlcpy(buf, filename, lengthof(buf));
-	} else {
-		snprintf(buf, lengthof(buf), "%s%s", _paths.data_dir, filename);
+	snprintf(buf, buflen, "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
+	return buf;
+}
+
+char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename)
+{
+	Searchpath sp;
+	assert(subdir < NUM_SUBDIRS);
+
+	FOR_ALL_SEARCHPATHS(sp) {
+		FioGetFullPath(buf, buflen, sp, subdir, filename);
+		if (FileExists(buf)) break;
 	}
 
-	f = fopen(buf, "rb");
+	return buf;
+}
+
+char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir)
+{
+	assert(subdir < NUM_SUBDIRS);
+	assert(sp < NUM_SEARCHPATHS);
+
+	snprintf(buf, buflen, "%s%s", _searchpaths[sp], _subdirs[subdir]);
+	return buf;
+}
+
+char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir)
+{
+	Searchpath sp;
+
+	/* Find and return the first valid directory */
+	FOR_ALL_SEARCHPATHS(sp) {
+		char *ret = FioAppendDirectory(buf, buflen, sp, subdir);
+		if (FileExists(buf)) return ret;
+	}
+
+	/* Could not find the directory, fall back to a base path */
+	ttd_strlcpy(buf, _personal_dir, buflen);
+
+	return buf;
+}
+
+FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir)
+{
+#if defined(WIN32) && defined(UNICODE)
+	/* fopen is implemented as a define with ellipses for
+	 * Unicode support (prepend an L). As we are not sending
+	 * a string, but a variable, it 'renames' the variable,
+	 * so make that variable to makes it compile happily */
+	wchar_t Lmode[5];
+	MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, lengthof(Lmode));
+#endif
+	FILE *f = NULL;
+	char buf[MAX_PATH];
+
+	if (subdir == NO_DIRECTORY) {
+		ttd_strlcpy(buf, filename, lengthof(buf));
+	} else {
+		snprintf(buf, lengthof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
+	}
+
+	f = fopen(buf, mode);
 #if !defined(WIN32)
 	if (f == NULL) {
-		strtolower(strrchr(buf, PATHSEPCHAR));
-		f = fopen(buf, "rb");
-
-#if defined SECOND_DATA_DIR
-		/* tries in the 2nd data directory */
-		if (f == NULL) {
-			snprintf(buf, lengthof(buf), "%s%s", _paths.second_data_dir, filename);
-			strtolower(buf + strlen(_paths.second_data_dir) - 1);
-			f = fopen(buf, "rb");
-		}
-#endif
+		strtolower(buf + strlen(_searchpaths[sp]) - 1);
+		f = fopen(buf, mode);
 	}
 #endif
+	return f;
+}
+
+/** Opens OpenTTD files somewhere in a personal or global directory */
+FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir)
+{
+	FILE *f = NULL;
+	Searchpath sp;
+
+	assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
+
+	FOR_ALL_SEARCHPATHS(sp) {
+		f = FioFOpenFileSp(filename, mode, sp, subdir);
+		if (f != NULL || subdir == NO_DIRECTORY) break;
+	}
 
 	return f;
 }
@@ -292,7 +371,8 @@
 #if defined(WIN32) || defined(WINCE)
 /**
  * Determine the base (personal dir and game data dir) paths
- * @param exe the path to the executable
+ * @param exe the path from the current path to the executable
+ * @note defined in the OS related files (os2.cpp, win32.cpp, unix.cpp etc)
  */
 extern void DetermineBasePaths(const char *exe);
 #else /* defined(WIN32) || defined(WINCE) */
@@ -329,70 +409,108 @@
  */
 void DetermineBasePaths(const char *exe)
 {
-	/* Change the working directory to enable doubleclicking in UIs */
-	ChangeWorkingDirectory(exe);
-
-	_paths.game_data_dir = BuildWithFullPath(GAME_DATA_DIR);
-#if defined(SECOND_DATA_DIR)
-	_paths.second_data_dir = BuildWithFullPath(SECOND_DATA_DIR);
-#else
-	_paths.second_data_dir = NULL;
-#endif
-
-#if defined(USE_HOMEDIR)
+	char tmp[MAX_PATH];
+#ifdef WITH_PERSONAL_DIR
 	const char *homedir = getenv("HOME");
 
 	if (homedir == NULL) {
 		const struct passwd *pw = getpwuid(getuid());
-		if (pw != NULL) homedir = pw->pw_dir;
+		homedir = (pw == NULL) ? "" : pw->pw_dir;
 	}
 
-	_paths.personal_dir = str_fmt("%s" PATHSEP "%s", homedir, PERSONAL_DIR);
-	AppendPathSeparator(_paths.personal_dir, MAX_PATH);
-#else /* not defined(USE_HOMEDIR) */
-	_paths.personal_dir = BuildWithFullPath(PERSONAL_DIR);
-#endif /* defined(USE_HOMEDIR) */
+	snprintf(tmp, MAX_PATH, "%s" PATHSEP "%s", homedir, PERSONAL_DIR);
+	AppendPathSeparator(tmp, MAX_PATH);
+
+	_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
+#else
+	_searchpaths[SP_PERSONAL_DIR] = NULL;
+#endif
+	_searchpaths[SP_SHARED_DIR] = NULL;
+
+	getcwd(tmp, MAX_PATH);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_WORKING_DIR] = strdup(tmp);
+
+	/* Change the working directory to that one of the executable */
+	ChangeWorkingDirectory((char*)exe);
+	getcwd(tmp, MAX_PATH);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_BINARY_DIR] = strdup(tmp);
+
+	snprintf(tmp, MAX_PATH, "%s", GLOBAL_DATA_DIR);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_INSTALLATION_DIR] = strdup(tmp);
+#ifdef WITH_COCOA
+extern void cocoaSetApplicationBundleDir();
+	cocoaSetApplicationBundleDir();
+#else
+	_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
+#endif
 }
 #endif /* defined(WIN32) || defined(WINCE) */
 
+char *_personal_dir;
+
 /**
  * Acquire the base paths (personal dir and game data dir),
  * fill all other paths (save dir, autosave dir etc) and
  * make the save and scenario directories.
- * @param exe the path to the executable
- * @todo for save_dir, autosave_dir, scenario_dir and heightmap_dir the
- *       assumption is that there is no path separator, however for gm_dir
- *       lang_dir and data_dir that assumption is made.
- *       This inconsistency should be resolved.
+ * @param exe the path from the current path to the executable
  */
 void DeterminePaths(const char *exe)
 {
 	DetermineBasePaths(exe);
 
-	_paths.save_dir      = str_fmt("%ssave" PATHSEP, _paths.personal_dir);
-	_paths.autosave_dir  = str_fmt("%s" PATHSEP "autosave" PATHSEP, _paths.save_dir);
-	_paths.scenario_dir  = str_fmt("%sscenario" PATHSEP, _paths.personal_dir);
-	_paths.heightmap_dir = str_fmt("%s" PATHSEP "heightmap" PATHSEP, _paths.scenario_dir);
-	_paths.gm_dir        = str_fmt("%sgm" PATHSEP, _paths.game_data_dir);
-	_paths.data_dir      = str_fmt("%sdata" PATHSEP, _paths.game_data_dir);
-#if defined(CUSTOM_LANG_DIR)
-	_paths.lang_dir = BuildWithFullPath(CUSTOM_LANG_DIR);
-#else
-	_paths.lang_dir = str_fmt("%slang" PATHSEP, _paths.game_data_dir);
-#endif
+	Searchpath sp;
+	FOR_ALL_SEARCHPATHS(sp) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
 
-	if (_config_file == NULL) {
-		_config_file = str_fmt("%sopenttd.cfg", _paths.personal_dir);
+	if (_config_file != NULL) {
+		_personal_dir = strdup(_config_file);
+		char *end = strrchr(_personal_dir , PATHSEPCHAR);
+		if (end == NULL) {
+			_personal_dir[0] = '\0';
+		} else {
+			end[1] = '\0';
+		}
+	} else {
+		char personal_dir[MAX_PATH];
+		FioFindFullPath(personal_dir, lengthof(personal_dir), BASE_DIR, "openttd.cfg");
+
+		if (FileExists(personal_dir)) {
+			char *end = strrchr(personal_dir, PATHSEPCHAR);
+			if (end != NULL) end[1] = '\0';
+			_personal_dir = strdup(personal_dir);
+			_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
+		} else {
+			static const Searchpath new_openttd_cfg_order[] = {
+					SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
+				};
+
+			for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
+				if (IsValidSearchPath(new_openttd_cfg_order[i])) {
+					_personal_dir = strdup(_searchpaths[new_openttd_cfg_order[i]]);
+					_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
+					break;
+				}
+			}
+		}
 	}
 
-	_highscore_file = str_fmt("%shs.dat", _paths.personal_dir);
-	_log_file = str_fmt("%sopenttd.log",  _paths.personal_dir);
+	DEBUG(misc, 3, "%s found as personal directory", _personal_dir);
 
-	/* Make (auto)save and scenario folder */
-	FioCreateDirectory(_paths.save_dir);
-	FioCreateDirectory(_paths.autosave_dir);
-	FioCreateDirectory(_paths.scenario_dir);
-	FioCreateDirectory(_paths.heightmap_dir);
+	_highscore_file = str_fmt("%shs.dat", _personal_dir);
+	_log_file = str_fmt("%sopenttd.log",  _personal_dir);
+
+	char *save_dir     = str_fmt("%s%s", _personal_dir, FioGetSubdirectory(SAVE_DIR));
+	char *autosave_dir = str_fmt("%s%s", _personal_dir, FioGetSubdirectory(AUTOSAVE_DIR));
+
+	/* Make the necessary folders */
+	FioCreateDirectory(_personal_dir);
+	FioCreateDirectory(save_dir);
+	FioCreateDirectory(autosave_dir);
+
+	free(save_dir);
+	free(autosave_dir);
 }
 
 /**
--- a/src/fileio.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/fileio.h	Sun Jun 17 21:31:00 2007 +0000
@@ -5,9 +5,12 @@
 #ifndef FILEIO_H
 #define FILEIO_H
 
+#include "helpers.hpp"
+
 void FioSeekTo(uint32 pos, int mode);
 void FioSeekToFile(uint32 pos);
 uint32 FioGetPos();
+const char *FioGetFilename();
 byte FioReadByte();
 uint16 FioReadWord();
 uint32 FioReadDword();
@@ -15,13 +18,78 @@
 void FioOpenFile(int slot, const char *filename);
 void FioReadBlock(void *ptr, uint size);
 void FioSkipBytes(int n);
+void FioCreateDirectory(const char *filename);
 
-FILE *FioFOpenFile(const char *filename);
-bool FioCheckFileExists(const char *filename);
-void FioCreateDirectory(const char *filename);
+/**
+ * The different kinds of subdirectories OpenTTD uses
+ */
+enum Subdirectory {
+	BASE_DIR,      ///< Base directory for all subdirectories
+	SAVE_DIR,      ///< Base directory for all savegames
+	AUTOSAVE_DIR,  ///< Subdirectory of save for autosaves
+	SCENARIO_DIR,  ///< Base directory for all scenarios
+	HEIGHTMAP_DIR, ///< Subdirectory of scenario for heightmaps
+	GM_DIR,        ///< Subdirectory for all music
+	DATA_DIR,      ///< Subdirectory for all data (GRFs, sample.cat, intro game)
+	LANG_DIR,      ///< Subdirectory for all translation files
+	NUM_SUBDIRS,   ///< Number of subdirectories
+	NO_DIRECTORY,  ///< A path without any base directory
+};
+
+/**
+ * Types of searchpaths OpenTTD might use
+ */
+enum Searchpath {
+	SP_WORKING_DIR,            ///< Search in the working directory
+	SP_PERSONAL_DIR,           ///< Search in the personal directory
+	SP_SHARED_DIR,             ///< Search in the shared directory, like 'Shared Files' under Windows
+	SP_BINARY_DIR,             ///< Search in the directory where the binary resides
+	SP_INSTALLATION_DIR,       ///< Search in the installation directory
+	SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle
+	NUM_SEARCHPATHS
+};
+
+DECLARE_POSTFIX_INCREMENT(Searchpath);
+
+/**
+ * The searchpaths OpenTTD could search through.
+ * At least one of the slots has to be filled with a path.
+ * NULL paths tell that there is no such path for the
+ * current operating system.
+ */
+extern const char *_searchpaths[NUM_SEARCHPATHS];
+
+/**
+ * Checks whether the given search path is a valid search path
+ * @param sp the search path to check
+ * @return true if the search path is valid
+ */
+static inline bool IsValidSearchPath(Searchpath sp)
+{
+	return sp < NUM_SEARCHPATHS && _searchpaths[sp] != NULL;
+}
+
+/** Iterator for all the search paths */
+#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_PERSONAL_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
+
+FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR);
+bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR);
+char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename);
+char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename);
+char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir);
+char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir);
+
+static inline const char *FioGetSubdirectory(Subdirectory subdir)
+{
+	extern const char *_subdirs[NUM_SUBDIRS];
+	assert(subdir < NUM_SUBDIRS);
+	return _subdirs[subdir];
+}
 
 void SanitizeFilename(char *filename);
 void AppendPathSeparator(char *buf, size_t buflen);
 void DeterminePaths(const char *exe);
 
+extern char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc.
+
 #endif /* FILEIO_H */
--- a/src/fios.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/fios.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -14,6 +14,7 @@
 #include "helpers.hpp"
 #include "table/strings.h"
 #include "fios.h"
+#include "fileio.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -334,7 +335,7 @@
 
 	if (_fios_save_path == NULL) {
 		_fios_save_path = MallocT<char>(MAX_PATH);
-		ttd_strlcpy(_fios_save_path, _paths.save_dir, MAX_PATH);
+		FioGetDirectory(_fios_save_path, MAX_PATH, SAVE_DIR);
 	}
 
 	_fios_path = _fios_save_path;
@@ -380,9 +381,10 @@
 {
 	static char *_fios_scn_path = NULL;
 
+	/* Copy the default path on first run or on 'New Game' */
 	if (_fios_scn_path == NULL) {
 		_fios_scn_path = MallocT<char>(MAX_PATH);
-		ttd_strlcpy(_fios_scn_path, _paths.scenario_dir, MAX_PATH);
+		FioGetDirectory(_fios_scn_path, MAX_PATH, SCENARIO_DIR);
 	}
 
 	_fios_path = _fios_scn_path;
@@ -413,7 +415,7 @@
 
 	if (_fios_hmap_path == NULL) {
 		_fios_hmap_path = MallocT<char>(MAX_PATH);
-		strcpy(_fios_hmap_path, _paths.heightmap_dir);
+		FioGetDirectory(_fios_hmap_path, MAX_PATH, HEIGHTMAP_DIR);
 	}
 
 	_fios_path = _fios_hmap_path;
--- a/src/fontcache.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/fontcache.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -15,7 +15,7 @@
 #include "fontcache.h"
 #include "helpers.hpp"
 #include "spriteloader/spriteloader.hpp"
-#include "blitter/blitter.hpp"
+#include "blitter/factory.hpp"
 
 #ifdef WITH_FREETYPE
 
@@ -369,6 +369,21 @@
 }
 
 
+/* Check if a glyph should be rendered with antialiasing */
+static bool GetFontAAState(FontSize size)
+{
+	/* AA is only supported for 32 bpp */
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 32) return false;
+
+	switch (size) {
+		default: NOT_REACHED();
+		case FS_NORMAL: return _freetype.medium_aa;
+		case FS_SMALL:  return _freetype.small_aa;
+		case FS_LARGE:  return _freetype.large_aa;
+	}
+}
+
+
 const Sprite *GetGlyph(FontSize size, WChar key)
 {
 	FT_Face face = GetFontFace(size);
@@ -397,8 +412,10 @@
 
 	slot = face->glyph;
 
+	bool aa = GetFontAAState(size);
+
 	FT_Load_Char(face, key, FT_LOAD_DEFAULT);
-	FT_Render_Glyph(face->glyph, FT_RENDER_MODE_MONO);
+	FT_Render_Glyph(face->glyph, aa ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO);
 
 	/* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel */
 	width  = max(1, slot->bitmap.width + (size == FS_NORMAL));
@@ -417,8 +434,9 @@
 	if (size == FS_NORMAL) {
 		for (y = 0; y < slot->bitmap.rows; y++) {
 			for (x = 0; x < slot->bitmap.width; x++) {
-				if (HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
+				if (aa ? (slot->bitmap.buffer[x + y * slot->bitmap.pitch] > 0) : HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
 					sprite.data[1 + x + (1 + y) * sprite.width].m = SHADOW_COLOUR;
+					sprite.data[1 + x + (1 + y) * sprite.width].a = aa ? slot->bitmap.buffer[x + y * slot->bitmap.pitch] : 0xFF;
 				}
 			}
 		}
@@ -426,8 +444,9 @@
 
 	for (y = 0; y < slot->bitmap.rows; y++) {
 		for (x = 0; x < slot->bitmap.width; x++) {
-			if (HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
+			if (aa ? (slot->bitmap.buffer[x + y * slot->bitmap.pitch] > 0) : HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
 				sprite.data[x + y * sprite.width].m = FACE_COLOUR;
+				sprite.data[x + y * sprite.width].a = aa ? slot->bitmap.buffer[x + y * slot->bitmap.pitch] : 0xFF;
 			}
 		}
 	}
--- a/src/fontcache.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/fontcache.h	Sun Jun 17 21:31:00 2007 +0000
@@ -21,6 +21,9 @@
 	uint small_size;
 	uint medium_size;
 	uint large_size;
+	bool small_aa;
+	bool medium_aa;
+	bool large_aa;
 };
 
 extern FreeTypeSettings _freetype;
--- a/src/functions.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/functions.h	Sun Jun 17 21:31:00 2007 +0000
@@ -147,8 +147,10 @@
 void ChangeTownRating(Town *t, int add, int max);
 
 uint GetTownRadiusGroup(const Town* t, TileIndex tile);
+void ShowHighscoreTable(int difficulty, int8 rank);
+
 int FindFirstBit(uint32 x);
-void ShowHighscoreTable(int difficulty, int8 rank);
+int CountBitsSet(uint32 value);
 
 void AfterLoadTown();
 void UpdatePatches();
--- a/src/gfx.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/gfx.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -19,7 +19,7 @@
 #include "genworld.h"
 #include "debug.h"
 #include "zoom.hpp"
-#include "blitter/blitter.hpp"
+#include "blitter/factory.hpp"
 
 #ifdef _DEBUG
 bool _dbg_screen_rect;
@@ -50,7 +50,7 @@
 
 FontSize _cur_fontsize;
 static FontSize _last_fontsize;
-static Pixel _cursor_backup[64 * 64];
+static uint8 _cursor_backup[64 * 64 * 4];
 static Rect _invalid_rect;
 static const byte *_color_remap_ptr;
 static byte _string_colorremap[3];
@@ -58,37 +58,21 @@
 #define DIRTY_BYTES_PER_LINE (MAX_SCREEN_WIDTH / 64)
 static byte _dirty_blocks[DIRTY_BYTES_PER_LINE * MAX_SCREEN_HEIGHT / 8];
 
-void memcpy_pitch(void *dst, void *src, int w, int h, int srcpitch, int dstpitch)
-{
-	Pixel *dstp = (Pixel *)dst;
-	Pixel *srcp = (Pixel *)src;
-
-	assert(h >= 0);
-	for (; h != 0; --h) {
-		memcpy(dstp, srcp, w * sizeof(Pixel));
-		dstp += dstpitch;
-		srcp += srcpitch;
-	}
-}
-
 void GfxScroll(int left, int top, int width, int height, int xo, int yo)
 {
-	const Pixel *src;
-	Pixel *dst;
-	int p;
-	int ht;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	const void *src;
+	void *dst;
 
 	if (xo == 0 && yo == 0) return;
 
 	if (_cursor.visible) UndrawMouseCursor();
 	UndrawTextMessage();
 
-	p = _screen.pitch;
-
 	if (yo > 0) {
 		/*Calculate pointers */
-		dst = _screen.dst_ptr + (top + height - 1) * p + left;
-		src = dst - yo * p;
+		dst = blitter->MoveTo(_screen.dst_ptr, left, top + height - 1);
+		src = blitter->MoveTo(dst, 0, -yo);
 
 		/* Decrease height and increase top */
 		top += yo;
@@ -97,23 +81,20 @@
 
 		/* Adjust left & width */
 		if (xo >= 0) {
-			dst += xo;
+			dst = blitter->MoveTo(dst, xo, 0);
 			left += xo;
 			width -= xo;
 		} else {
-			src -= xo;
+			src = blitter->MoveTo(src, -xo, 0);
 			width += xo;
 		}
 
-		for (ht = height; ht > 0; --ht) {
-			memcpy(dst, src, width * sizeof(Pixel));
-			src -= p;
-			dst -= p;
-		}
+		/* Negative height as we want to copy from bottom to top */
+		blitter->CopyFromBuffer(dst, src, width, -height, _screen.pitch);
 	} else {
 		/* Calculate pointers */
-		dst = _screen.dst_ptr + top * p + left;
-		src = dst - yo * p;
+		dst = blitter->MoveTo(_screen.dst_ptr, left, top);
+		src = blitter->MoveTo(dst, 0, -yo);
 
 		/* Decrese height. (yo is <=0). */
 		height += yo;
@@ -121,21 +102,17 @@
 
 		/* Adjust left & width */
 		if (xo >= 0) {
-			dst += xo;
+			dst = blitter->MoveTo(dst, xo, 0);
 			left += xo;
 			width -= xo;
 		} else {
-			src -= xo;
+			src = blitter->MoveTo(src, -xo, 0);
 			width += xo;
 		}
 
 		/* the y-displacement may be 0 therefore we have to use memmove,
 		 * because source and destination may overlap */
-		for (ht = height; ht > 0; --ht) {
-			memmove(dst, src, width * sizeof(Pixel));
-			src += p;
-			dst += p;
-		}
+		blitter->MoveBuffer(dst, src, width, height);
 	}
 	/* This part of the screen is now dirty. */
 	_video_driver->make_dirty(left, top, width, height);
@@ -144,8 +121,9 @@
 
 void GfxFillRect(int left, int top, int right, int bottom, int color)
 {
-	const DrawPixelInfo* dpi = _cur_dpi;
-	Pixel *dst;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	const DrawPixelInfo *dpi = _cur_dpi;
+	void *dst;
 	const int otop = top;
 	const int oleft = left;
 
@@ -166,40 +144,33 @@
 	bottom -= top;
 	assert(bottom > 0);
 
-	dst = dpi->dst_ptr + top * dpi->pitch + left;
+	dst = blitter->MoveTo(dpi->dst_ptr, left, top);
 
 	if (!HASBIT(color, PALETTE_MODIFIER_GREYOUT)) {
 		if (!HASBIT(color, USE_COLORTABLE)) {
 			do {
-				memset(dst, color, right * sizeof(Pixel));
-				dst += dpi->pitch;
+				blitter->SetHorizontalLine(dst, right, (uint8)color);
+				dst = blitter->MoveTo(dst, 0, 1);
 			} while (--bottom);
 		} else {
-			/* use colortable mode */
-			const byte* ctab = GetNonSprite(GB(color, 0, PALETTE_WIDTH)) + 1;
-
-			do {
-				int i;
-				for (i = 0; i != right; i++) dst[i] = ctab[dst[i]];
-				dst += dpi->pitch;
-			} while (--bottom);
+			blitter->DrawColorMappingRect(dst, right, bottom, GB(color, 0, PALETTE_WIDTH));
 		}
 	} else {
 		byte bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
 		do {
-			int i;
-			for (i = (bo ^= 1); i < right; i += 2) dst[i] = (byte)color;
-			dst += dpi->pitch;
+			for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, (uint8)color);
+			dst = blitter->MoveTo(dst, 0, 1);
 		} while (--bottom > 0);
 	}
 }
 
 static void GfxSetPixel(int x, int y, int color)
 {
-	const DrawPixelInfo* dpi = _cur_dpi;
-	if ((x -= dpi->left) < 0 || x >= dpi->width || (y -= dpi->top)<0 || y >= dpi->height)
-		return;
-	dpi->dst_ptr[y * dpi->pitch + x] = color;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	const DrawPixelInfo *dpi = _cur_dpi;
+
+	if ((x -= dpi->left) < 0 || x >= dpi->width || (y -= dpi->top) < 0 || y >= dpi->height) return;
+	blitter->SetPixel(dpi->dst_ptr, x, y, color);
 }
 
 void GfxDrawLine(int x, int y, int x2, int y2, int color)
@@ -817,6 +788,13 @@
 	Colour old_val[38]; // max(38, 28)
 	uint i;
 	uint j;
+	int old_tc = _timer_counter;
+
+	/* We can only update the palette in 8bpp for now */
+	/* TODO -- We need support for other bpps too! */
+	if (BlitterFactoryBase::GetCurrentBlitter() != NULL && BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) {
+		_timer_counter = 0;
+	}
 
 	d = &_cur_palette[217];
 	memcpy(old_val, d, c * sizeof(*old_val));
@@ -913,6 +891,8 @@
 		if (_pal_first_dirty > 217) _pal_first_dirty = 217;
 		if (_pal_last_dirty < 217 + c) _pal_last_dirty = 217 + c;
 	}
+
+	if (old_tc != _timer_counter) _timer_counter = old_tc;
 }
 
 
@@ -958,18 +938,16 @@
 void UndrawMouseCursor()
 {
 	if (_cursor.visible) {
+		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 		_cursor.visible = false;
-		memcpy_pitch(
-			_screen.dst_ptr + _cursor.draw_pos.x + _cursor.draw_pos.y * _screen.pitch,
-			_cursor_backup,
-			_cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x, _screen.pitch);
-
+		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x);
 		_video_driver->make_dirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
 	}
 }
 
 void DrawMouseCursor()
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	int x;
 	int y;
 	int w;
@@ -1006,13 +984,10 @@
 	_cursor.draw_pos.y = y;
 	_cursor.draw_size.y = h;
 
-	assert(w * h < (int)sizeof(_cursor_backup));
+	assert(blitter->BufferSize(w, h) < (int)sizeof(_cursor_backup));
 
 	/* Make backup of stuff below cursor */
-	memcpy_pitch(
-		_cursor_backup,
-		_screen.dst_ptr + _cursor.draw_pos.x + _cursor.draw_pos.y * _screen.pitch,
-		_cursor.draw_size.x, _cursor.draw_size.y, _screen.pitch, _cursor.draw_size.x);
+	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x);
 
 	/* Draw cursor on screen */
 	_cur_dpi = &_screen;
@@ -1202,6 +1177,7 @@
  * get some nasty results */
 bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height)
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	const DrawPixelInfo *o = _cur_dpi;
 
 	n->zoom = ZOOM_LVL_NORMAL;
@@ -1233,7 +1209,8 @@
 		n->top = 0;
 	}
 
-	n->dst_ptr = o->dst_ptr + left + top * (n->pitch = o->pitch);
+	n->dst_ptr = blitter->MoveTo(o->dst_ptr, left, top);
+	n->pitch = o->pitch;
 
 	if (height > o->height - top) {
 		height = o->height - top;
--- a/src/gfx.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/gfx.h	Sun Jun 17 21:31:00 2007 +0000
@@ -93,7 +93,6 @@
 void CreateConsole();
 
 typedef int32 CursorID;
-typedef byte Pixel;
 
 struct Point {
 	int x,y;
@@ -134,7 +133,7 @@
 };
 
 struct DrawPixelInfo {
-	Pixel *dst_ptr;
+	void *dst_ptr;
 	int left, top, width, height;
 	int pitch;
 	ZoomLevel zoom;
--- a/src/gfxinit.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/gfxinit.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -53,13 +53,15 @@
 static uint LoadGrfFile(const char* filename, uint load_index, int file_index)
 {
 	uint load_index_org = load_index;
+	uint sprite_id = 0;
 
 	FioOpenFile(file_index, filename);
 
 	DEBUG(sprite, 2, "Reading grf-file '%s'", filename);
 
-	while (LoadNextSprite(load_index, file_index)) {
+	while (LoadNextSprite(load_index, file_index, sprite_id)) {
 		load_index++;
+		sprite_id++;
 		if (load_index >= MAX_SPRITES) {
 			error("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files.");
 		}
@@ -73,6 +75,7 @@
 static void LoadGrfIndexed(const char* filename, const SpriteID* index_tbl, int file_index)
 {
 	uint start;
+	uint sprite_id = 0;
 
 	FioOpenFile(file_index, filename);
 
@@ -83,14 +86,16 @@
 
 		if (start == SKIP) { // skip sprites (amount in second var)
 			SkipSprites(end);
+			sprite_id += end;
 		} else { // load sprites and use indexes from start to end
 			do {
 			#ifdef NDEBUG
-				LoadNextSprite(start, file_index);
+				LoadNextSprite(start, file_index, sprite_id);
 			#else
-				bool b = LoadNextSprite(start, file_index);
+				bool b = LoadNextSprite(start, file_index, sprite_id);
 				assert(b);
 			#endif
+				sprite_id++;
 			} while (++start <= end);
 		}
 	}
@@ -109,33 +114,7 @@
  * returns true if the checksum is correct */
 static bool FileMD5(const MD5File file, bool warn)
 {
-	FILE *f;
-	char buf[MAX_PATH];
-
-	/* open file */
-	snprintf(buf, lengthof(buf), "%s%s", _paths.data_dir, file.filename);
-	f = fopen(buf, "rb");
-
-#if !defined(WIN32)
-	if (f == NULL) {
-		strtolower(buf + strlen(_paths.data_dir) - 1);
-		f = fopen(buf, "rb");
-	}
-#endif
-
-#if defined SECOND_DATA_DIR
-	/* If we failed to find the file in the first data directory, we will try the other one */
-
-	if (f == NULL) {
-		snprintf(buf, lengthof(buf), "%s%s", _paths.second_data_dir, file.filename);
-		f = fopen(buf, "rb");
-
-		if (f == NULL) {
-			strtolower(buf + strlen(_paths.second_data_dir) - 1);
-			f = fopen(buf, "rb");
-		}
-	}
-#endif
+	FILE *f = FioFOpenFile(file.filename);
 
 	if (f != NULL) {
 		md5_state_t filemd5state;
@@ -147,7 +126,7 @@
 		while ((len = fread(buffer, 1, sizeof(buffer), f)) != 0)
 			md5_append(&filemd5state, buffer, len);
 
-		if (ferror(f) && warn) ShowInfoF("Error Reading from %s \n", buf);
+		if (ferror(f) && warn) ShowInfoF("Error Reading from %s \n", file.filename);
 		fclose(f);
 
 		md5_finish(&filemd5state, digest);
--- a/src/industry_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/industry_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -280,6 +280,8 @@
 		if (HASBIT(_transparent_opt, TO_INDUSTRIES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
+		} else if (HASBIT(image, PALETTE_MODIFIER_COLOR) && dits->building.pal == PAL_NONE) {
+			pal = GENERAL_SPRITE_COLOR(ind->random_color);
 		} else {
 			pal = dits->building.pal;
 		}
@@ -1131,6 +1133,8 @@
 			}
 		} else {
 			if (!EnsureNoVehicle(cur_tile)) return false;
+			if (MayHaveBridgeAbove(cur_tile) && IsBridgeAbove(cur_tile)) return false;
+
 			IndustyBehaviour ind_behav = GetIndustrySpec(type)->behaviour;
 
 			if (ind_behav & INDUSTRYBEH_BUILT_ONWATER) {
--- a/src/intro_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/intro_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -64,9 +64,11 @@
 		break;
 
 	case WE_CLICK:
+#ifdef ENABLE_NETWORK
 		/* Do not create a network server when you (just) have closed one of the game
 		 * creation/load windows for the network server. */
 		if (2 <= e->we.click.widget && e->we.click.widget <= 6) _is_network_server = false;
+#endif /* ENABLE_NETWORK */
 
 		switch (e->we.click.widget) {
 		case 2: ShowGenerateLandscape(); break;
--- a/src/lang/bulgarian.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/bulgarian.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -2688,7 +2688,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Капацитет на влаковата композиция
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Общ капацитет на влака, разбит по типове товар
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Пътен лист - натиснете върху назначение за маркиране. CTRL + натискане - центрира върху станцията
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Изтриване на избраното назначение
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Преминавай през избраното назначение без спиране
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Добавяне на назначение преди избраната или в края на списъка
--- a/src/lang/catalan.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/catalan.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -2776,6 +2776,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Llista de selecció de Vehicles - clica en un vehicle per informació
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construeix l'automòbil seleccionat
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cost: {CURRENCY}{}Velocitat: {VELOCITY}{}Cost de circulació: {CURRENCY}/any{}Capacitat: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacitat: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Anomena automòbil
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}No es pot anomenar l'automòbil...
--- a/src/lang/dutch.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/dutch.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -2776,6 +2776,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Wegvoertuig selectie lijst - klik op voertuig voor informatie
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Bouw het geselecteerde wegvoertuig
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Prijs: {CURRENCY}{}Snelheid: {VELOCITY}{}Brandstofkosten: {CURRENCY}/jr{}Capaciteit: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capaciteit: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Hernoem wegvoertuig
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan wegvoertuig niet hernoemen...
--- a/src/lang/esperanto.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/esperanto.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -4,6 +4,8 @@
 ##plural 0
 ##case n
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}For de la mapo
@@ -1047,6 +1049,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nova ĝenerala vojtrovado (NPF, superas NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Pezpliigo pro ŝarĝo por imiti pezajn trajnojn: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permesu trairaj bushaltejoj sur vojoj urboposedataj: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Permesu konstrui staciojn apude: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Ĉiam permesu malgrandajn flughavenojn: {ORANGE}{STRING}
 
@@ -2013,6 +2016,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helikopterejo
 STR_SV_STNAME_FOREST                                            :Arbaro de {STRING}
 
+
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -3187,3 +3191,11 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}(Ne)travideblu konstrueblaĵoj kiel stacidomoj, deponejoj, trairejoj kaj kondukdratoj
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}(Ne)travideblu la pontoj
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}(Ne)travideblu aĵoj kiel lumturoj kaj antenoj, kaj eble estonte vidĝuaĵoj
+
+##### Mass Order
+
+
+
+
+
+########
--- a/src/lang/norwegian_bokmal.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -1394,6 +1394,23 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engelsk
 STR_NETWORK_LANG_GERMAN                                         :Tysk
 STR_NETWORK_LANG_FRENCH                                         :Fransk
+STR_NETWORK_LANG_FINNISH                                        :Finsk
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarsk
+STR_NETWORK_LANG_ICELANDIC                                      :Islandsk
+STR_NETWORK_LANG_ITALIAN                                        :Italiensk
+STR_NETWORK_LANG_JAPANESE                                       :Japanesisk
+STR_NETWORK_LANG_KOREAN                                         :Koreansk
+STR_NETWORK_LANG_NORWEGIAN                                      :Norsk
+STR_NETWORK_LANG_POLISH                                         :Polsk
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugisisk
+STR_NETWORK_LANG_ROMANIAN                                       :Romensk
+STR_NETWORK_LANG_RUSSIAN                                        :Russisk
+STR_NETWORK_LANG_SLOVAK                                         :Slovakisk
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovensk
+STR_NETWORK_LANG_SPANISH                                        :Spansk
+STR_NETWORK_LANG_SWEDISH                                        :Svensk
+STR_NETWORK_LANG_TURKISH                                        :Tyrkisk
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainsk
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Flerspillere spill lobby
@@ -1587,6 +1604,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Jernbanespor med for-signaler
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Jernbanespor med forlat-signaler
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Jernbanespor med kombinerte signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Togbane med normale og pre-signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Togbane med normale og utgangs-signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Togbane med normale og kombinasjons-signaler
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Togbane med pre- og utgangs-signaler
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Togbane med pre- og kombinasjons-signaler
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Togbane med utgangs- og kombinasjons-signaler
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Må fjerne togbanestasjon først
 
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lang/piglatin.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,3301 @@
+##name Pig latin
+##ownname Igpay atinlay
+##isocode xx_PL
+##plural 0
+
+#
+
+##id 0x0000
+STR_NULL                                                        :
+STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Offway edgeway ofway apmay
+STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Ootay oseclay otay edgeway ofway apmay
+STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Otnay enoughway ashcay - equiresray {CURRENCY}
+STR_0004                                                        :{WHITE}{CURRENCY64}
+STR_0005                                                        :{RED}{CURRENCY64}
+STR_EMPTY                                                       :
+STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Atflay andlay equiredray
+STR_0008_WAITING                                                :{BLACK}Aitingway: {WHITE}{STRING}
+STR_0009                                                        :{WHITE}{CARGO}
+STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (enway-outeray omfray
+STR_000B                                                        :{YELLOW}{STATION})
+STR_000C_ACCEPTS                                                :{BLACK}Acceptsway: {WHITE}
+STR_000D_ACCEPTS                                                :{BLACK}Acceptsway: {GOLD}
+STR_000E                                                        :
+STR_000F_PASSENGERS                                             :Assengerspay
+STR_0010_COAL                                                   :Oalcay
+STR_0011_MAIL                                                   :Ailmay
+STR_0012_OIL                                                    :Oilway
+STR_0013_LIVESTOCK                                              :Ivestocklay
+STR_0014_GOODS                                                  :Oodsgay
+STR_0015_GRAIN                                                  :Aingray
+STR_0016_WOOD                                                   :Oodway
+STR_0017_IRON_ORE                                               :Ironway Oreway
+STR_0018_STEEL                                                  :Eelstay
+STR_0019_VALUABLES                                              :Aluablesvay
+STR_001A_COPPER_ORE                                             :Oppercay Oreway
+STR_001B_MAIZE                                                  :Aizemay
+STR_001C_FRUIT                                                  :Uitfray
+STR_001D_DIAMONDS                                               :Iamondsday
+STR_001E_FOOD                                                   :Oodfay
+STR_001F_PAPER                                                  :Aperpay
+STR_0020_GOLD                                                   :Oldgay
+STR_0021_WATER                                                  :Aterway
+STR_0022_WHEAT                                                  :Eatwhay
+STR_0023_RUBBER                                                 :Ubberray
+STR_0024_SUGAR                                                  :Ugarsay
+STR_0025_TOYS                                                   :Oystay
+STR_0026_CANDY                                                  :Eetssway
+STR_0027_COLA                                                   :Olacay
+STR_0028_COTTON_CANDY                                           :Andyflosscay
+STR_0029_BUBBLES                                                :Ubblesbay
+STR_002A_TOFFEE                                                 :Offeetay
+STR_002B_BATTERIES                                              :Atteriesbay
+STR_002C_PLASTIC                                                :Asticplay
+STR_002D_FIZZY_DRINKS                                           :Izzyfay Inksdray
+STR_002E                                                        :
+STR_002F_PASSENGER                                              :Assengerpay
+STR_0030_COAL                                                   :Oalcay
+STR_0031_MAIL                                                   :Ailmay
+STR_0032_OIL                                                    :Oilway
+STR_0033_LIVESTOCK                                              :Ivestocklay
+STR_0034_GOODS                                                  :Oodsgay
+STR_0035_GRAIN                                                  :Aingray
+STR_0036_WOOD                                                   :Oodway
+STR_0037_IRON_ORE                                               :Ironway Oreway
+STR_0038_STEEL                                                  :Eelstay
+STR_0039_VALUABLES                                              :Aluablesvay
+STR_003A_COPPER_ORE                                             :Oppercay Oreway
+STR_003B_MAIZE                                                  :Aizemay
+STR_003C_FRUIT                                                  :Uitfray
+STR_003D_DIAMOND                                                :Iamondday
+STR_003E_FOOD                                                   :Oodfay
+STR_003F_PAPER                                                  :Aperpay
+STR_0040_GOLD                                                   :Oldgay
+STR_0041_WATER                                                  :Aterway
+STR_0042_WHEAT                                                  :Eatwhay
+STR_0043_RUBBER                                                 :Ubberray
+STR_0044_SUGAR                                                  :Ugarsay
+STR_0045_TOY                                                    :Oytay
+STR_0046_CANDY                                                  :Eetsway
+STR_0047_COLA                                                   :Olacay
+STR_0048_COTTON_CANDY                                           :Andyflosscay
+STR_0049_BUBBLE                                                 :Ubblebay
+STR_004A_TOFFEE                                                 :Offeetay
+STR_004B_BATTERY                                                :Atterybay
+STR_004C_PLASTIC                                                :Asticplay
+STR_004D_FIZZY_DRINK                                            :Izzyfay Inkdray
+STR_QUANTITY_NOTHING                                            :
+STR_QUANTITY_PASSENGERS                                         :{COMMA} assenger{P "" s}pay
+STR_QUANTITY_COAL                                               :{WEIGHT} ofway oalcay
+STR_QUANTITY_MAIL                                               :{COMMA} ag{P "" s}bay ofway ailmay
+STR_QUANTITY_OIL                                                :{VOLUME} ofway oilway
+STR_QUANTITY_LIVESTOCK                                          :{COMMA} item{P "" s}WAY ofway ivestocklay
+STR_QUANTITY_GOODS                                              :{COMMA} ate{P "" s}cray ofway oodsgay
+STR_QUANTITY_GRAIN                                              :{WEIGHT} ofway aingray
+STR_QUANTITY_WOOD                                               :{WEIGHT} ofway oodway
+STR_QUANTITY_IRON_ORE                                           :{WEIGHT} ofway ironway oreway
+STR_QUANTITY_STEEL                                              :{WEIGHT} ofway eelstay
+STR_QUANTITY_VALUABLES                                          :{COMMA} ag{P "" s}bay ofway aluablesvay
+STR_QUANTITY_COPPER_ORE                                         :{WEIGHT} ofway oppercay oreway
+STR_QUANTITY_MAIZE                                              :{WEIGHT} ofway aizemay
+STR_QUANTITY_FRUIT                                              :{WEIGHT} ofway uitfray
+STR_QUANTITY_DIAMONDS                                           :{COMMA} ag{P "" s}bay ofway iamondsday
+STR_QUANTITY_FOOD                                               :{WEIGHT} ofway oodfay
+STR_QUANTITY_PAPER                                              :{WEIGHT} ofway aperpay
+STR_QUANTITY_GOLD                                               :{COMMA} ag{P "" s}bay ofway oldgay
+STR_QUANTITY_WATER                                              :{VOLUME} ofway aterway
+STR_QUANTITY_WHEAT                                              :{WEIGHT} ofway eatwhay
+STR_QUANTITY_RUBBER                                             :{VOLUME} ofway ubberray
+STR_QUANTITY_SUGAR                                              :{WEIGHT} ofway ugarsay
+STR_QUANTITY_TOYS                                               :{COMMA} oy{P "" s}tay
+STR_QUANTITY_SWEETS                                             :{COMMA} ag{P "" s}bay ofway eetssway
+STR_QUANTITY_COLA                                               :{VOLUME} ofway olacay
+STR_QUANTITY_CANDYFLOSS                                         :{WEIGHT} ofway andyflosscay
+STR_QUANTITY_BUBBLES                                            :{COMMA} ubble{P "" s}bay
+STR_QUANTITY_TOFFEE                                             :{WEIGHT} ofway offeetay
+STR_QUANTITY_BATTERIES                                          :{COMMA} atter{P y ies}bay
+STR_QUANTITY_PLASTIC                                            :{VOLUME} ofway asticplay
+STR_QUANTITY_FIZZY_DRINKS                                       :{COMMA} izzyfay ink{P "" s}dray
+STR_ABBREV_NOTHING                                              :
+STR_ABBREV_PASSENGERS                                           :{TINYFONT}PSay
+STR_ABBREV_COAL                                                 :{TINYFONT}CLay
+STR_ABBREV_MAIL                                                 :{TINYFONT}MLay
+STR_ABBREV_OIL                                                  :{TINYFONT}OLWAY
+STR_ABBREV_LIVESTOCK                                            :{TINYFONT}LVay
+STR_ABBREV_GOODS                                                :{TINYFONT}GDay
+STR_ABBREV_GRAIN                                                :{TINYFONT}GRay
+STR_ABBREV_WOOD                                                 :{TINYFONT}WDay
+STR_ABBREV_IRON_ORE                                             :{TINYFONT}ORWAY
+STR_ABBREV_STEEL                                                :{TINYFONT}STay
+STR_ABBREV_VALUABLES                                            :{TINYFONT}VLay
+STR_ABBREV_COPPER_ORE                                           :{TINYFONT}OCay
+STR_ABBREV_MAIZE                                                :{TINYFONT}MZay
+STR_ABBREV_FRUIT                                                :{TINYFONT}FTay
+STR_ABBREV_DIAMONDS                                             :{TINYFONT}DMay
+STR_ABBREV_FOOD                                                 :{TINYFONT}FDay
+STR_ABBREV_PAPER                                                :{TINYFONT}PRay
+STR_ABBREV_GOLD                                                 :{TINYFONT}GDay
+STR_ABBREV_WATER                                                :{TINYFONT}WRay
+STR_ABBREV_WHEAT                                                :{TINYFONT}WHay
+STR_ABBREV_RUBBER                                               :{TINYFONT}RBay
+STR_ABBREV_SUGAR                                                :{TINYFONT}SGay
+STR_ABBREV_TOYS                                                 :{TINYFONT}YTay
+STR_ABBREV_SWEETS                                               :{TINYFONT}SWay
+STR_ABBREV_COLA                                                 :{TINYFONT}CLay
+STR_ABBREV_CANDYFLOSS                                           :{TINYFONT}CFay
+STR_ABBREV_BUBBLES                                              :{TINYFONT}UBay
+STR_ABBREV_TOFFEE                                               :{TINYFONT}TFay
+STR_ABBREV_BATTERIES                                            :{TINYFONT}BAay
+STR_ABBREV_PLASTIC                                              :{TINYFONT}PLay
+STR_ABBREV_FIZZY_DRINKS                                         :{TINYFONT}FZay
+STR_ABBREV_NONE                                                 :{TINYFONT}ONay
+STR_ABBREV_ALL                                                  :{TINYFONT}ALLWAY
+STR_00AE                                                        :{WHITE}{DATE_SHORT}
+STR_00AF                                                        :{WHITE}{DATE_LONG}
+STR_00B0_MAP                                                    :{WHITE}Apmay - {STRING}
+STR_00B1_GAME_OPTIONS                                           :{WHITE}Amegay Optionsway
+STR_00B2_MESSAGE                                                :{YELLOW}Essagemay
+STR_00B3_MESSAGE_FROM                                           :{YELLOW}Essagemay omfray {STRING}
+STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Autioncay!
+STR_00B4_CAN_T_DO_THIS                                          :{WHITE}An'tcay oday isthay....
+STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}An'tcay earclay isthay areaway....
+STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Originalway opyrightcay {COPYRIGHT} 1995 Ischray Awyersay, Allway ightsray eservedray
+STR_00B7_VERSION                                                :{BLACK}OpenTTDWAY ersionvay {REV}
+STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTDWAY {COPYRIGHT}2002-2007 Ethay OpenTTDWAY eamtay
+STR_TRANSLATED_BY                                               :{BLACK}  Anslatortray(say) -
+
+STR_00C5                                                        :{BLACK}{CROSS}
+STR_00C6                                                        :{SILVER}{CROSS}
+STR_00C7_QUIT                                                   :{WHITE}Itquay
+STR_00C8_YES                                                    :{BLACK}Esyay
+STR_00C9_NO                                                     :{BLACK}Onay
+STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Areway ouyay uresay ouyay antway otay abandonway isthay amegay andway eturnray otay {STRING}?
+STR_00CB_1                                                      :{BLACK}1
+STR_00CC_2                                                      :{BLACK}2
+STR_00CD_3                                                      :{BLACK}3
+STR_00CE_4                                                      :{BLACK}4
+STR_00CF_5                                                      :{BLACK}5
+STR_00D0_NOTHING                                                :Othingnay
+STR_00D1_DARK_BLUE                                              :Arkday Ueblay
+STR_00D2_PALE_GREEN                                             :Alepay Eengray
+STR_00D3_PINK                                                   :Inkpay
+STR_00D4_YELLOW                                                 :Ellowyay
+STR_00D5_RED                                                    :Edray
+STR_00D6_LIGHT_BLUE                                             :Ightlay Ueblay
+STR_00D7_GREEN                                                  :Eengray
+STR_00D8_DARK_GREEN                                             :Arkday Eengray
+STR_00D9_BLUE                                                   :Ueblay
+STR_00DA_CREAM                                                  :Eamcray
+STR_00DB_MAUVE                                                  :Auvemay
+STR_00DC_PURPLE                                                 :Urplepay
+STR_00DD_ORANGE                                                 :Orangeway
+STR_00DE_BROWN                                                  :Ownbray
+STR_00DF_GREY                                                   :Eygray
+STR_00E0_WHITE                                                  :Itewhay
+STR_00E1_TOO_MANY_VEHICLES_IN_GAME                              :{WHITE}Ootay anymay ehiclesvay inway amegay
+STR_00E2                                                        :{BLACK}{COMMA}
+STR_00E3                                                        :{RED}{COMMA}
+STR_00E4_LOCATION                                               :{BLACK}Ocationlay
+STR_00E5_CONTOURS                                               :Ontourscay
+STR_00E6_VEHICLES                                               :Ehiclesvay
+STR_00E7_INDUSTRIES                                             :Industriesway
+STR_00E8_ROUTES                                                 :Outesray
+STR_00E9_VEGETATION                                             :Egetationvay
+STR_00EA_OWNERS                                                 :Ownersway
+STR_00EB_ROADS                                                  :{BLACK}{TINYFONT}Oadsray
+STR_00EC_RAILROADS                                              :{BLACK}{TINYFONT}Ailwaysray
+STR_00ED_STATIONS_AIRPORTS_DOCKS                                :{BLACK}{TINYFONT}Ationsstay/Airportsway/Ocksday
+STR_00EE_BUILDINGS_INDUSTRIES                                   :{BLACK}{TINYFONT}Uildingsbay/Industriesway
+STR_00EF_VEHICLES                                               :{BLACK}{TINYFONT}Ehiclesvay
+STR_00F0_100M                                                   :{BLACK}{TINYFONT}100may
+STR_00F1_200M                                                   :{BLACK}{TINYFONT}200may
+STR_00F2_300M                                                   :{BLACK}{TINYFONT}300may
+STR_00F3_400M                                                   :{BLACK}{TINYFONT}400may
+STR_00F4_500M                                                   :{BLACK}{TINYFONT}500may
+STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Ainstray
+STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Oadray Ehiclesvay
+STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Ipsshay
+STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Aircraftway
+STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Ansporttray Outesray
+STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Oalcay Inemay
+STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Owerpay Ationstay
+STR_00FC_FOREST                                                 :{BLACK}{TINYFONT}Orestfay
+STR_00FD_SAWMILL                                                :{BLACK}{TINYFONT}Awmillsay
+STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Oilway Efineryray
+STR_00FF_FARM                                                   :{BLACK}{TINYFONT}Armfay
+STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Actoryfay
+STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Intingpray Orksway
+STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Oilway Ellsway
+STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Ironway Oreway Inemay
+STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Eelstay Illmay
+STR_0105_BANK                                                   :{BLACK}{TINYFONT}Ankbay
+STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Aperpay Illmay
+STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Oldgay Inemay
+STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Oodfay Ocessingpray Antplay
+STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Iamondday Inemay
+STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Oppercay Oreway Inemay
+STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Uitfray Antationplay
+STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Ubberray Antationplay
+STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Aterway Upplysay
+STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Aterway Owertay
+STR_010F_LUMBER_MILL                                            :{BLACK}{TINYFONT}Umberlay Illmay
+STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Andyflosscay Orestfay
+STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Eetsway Actoryfay
+STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Atterybay Armfay
+STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Olacay Ellsway
+STR_0114_TOY_SHOP                                               :{BLACK}{TINYFONT}Oytay Opshay
+STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}Oytay Actoryfay
+STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}Asticplay Ountainsfay
+STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}Izzyfay Inkdray Actoryfay
+STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}Ubblebay Eneratorgay
+STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}Offeetay Arryquay
+STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}Ugarsay Inemay
+STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Ailwayray Ationstay
+STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Orrylay Oadinglay Aybay
+STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Usbay Ationstay
+STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Airportway/Eliporthay
+STR_011F_DOCK                                                   :{BLACK}{TINYFONT}Ockday
+STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Oughray Andlay
+STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Assgray Andlay
+STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Arebay Andlay
+STR_0123_FIELDS                                                 :{BLACK}{TINYFONT}Ieldsfay
+STR_0124_TREES                                                  :{BLACK}{TINYFONT}Eestray
+STR_0125_ROCKS                                                  :{BLACK}{TINYFONT}Ocksray
+STR_0126_WATER                                                  :{BLACK}{TINYFONT}Aterway
+STR_0127_NO_OWNER                                               :{BLACK}{TINYFONT}Onay Ownerway
+STR_0128_TOWNS                                                  :{BLACK}{TINYFONT}Ownstay
+STR_0129_INDUSTRIES                                             :{BLACK}{TINYFONT}Industriesway
+STR_012A_DESERT                                                 :{BLACK}{TINYFONT}Esertday
+STR_012B_SNOW                                                   :{BLACK}{TINYFONT}Owsnay
+STR_012C_MESSAGE                                                :{WHITE}Essagemay
+STR_012D                                                        :{WHITE}{STRING}
+STR_012E_CANCEL                                                 :{BLACK}Ancelcay
+STR_012F_OK                                                     :{BLACK}OKWAY
+STR_0130_RENAME                                                 :{BLACK}Enameray
+STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Ootay anymay amesnay efinedday
+STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Osenchay amenay alreadyway inway useway
+
+STR_0133_WINDOWS                                                :Indowsway
+STR_0134_UNIX                                                   :Unixway
+STR_0135_OSX                                                    :OSWAY Xay
+STR_OSNAME_BEOS                                                 :EOSbay
+STR_OSNAME_MORPHOS                                              :OrphOSmay
+STR_OSNAME_AMIGAOS                                              :AmigaOSWAY
+STR_OSNAME_OS2                                                  :OSWAY/2
+STR_OSNAME_SUNOS                                                :UnOSsay
+
+STR_013B_OWNED_BY                                               :{WHITE}...ownedway ybay {STRING}
+STR_013C_CARGO                                                  :{BLACK}Argocay
+STR_013D_INFORMATION                                            :{BLACK}Informationway
+STR_013E_CAPACITIES                                             :{BLACK}Apacitiescay
+STR_013E_TOTAL_CARGO                                            :{BLACK}Otaltay Argocay
+STR_013F_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO} (xay{NUM})
+STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Otaltay argocay apacitycay ofway isthay aintray:
+STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
+STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (xay{NUM})
+STR_0140_NEW_GAME                                               :{BLACK}Ewnay Amegay
+STR_0141_LOAD_GAME                                              :{BLACK}Oadlay Amegay
+STR_SINGLE_PLAYER                                               :{BLACK}Inglesay ayerplay
+STR_MULTIPLAYER                                                 :{BLACK}Ultiplayermay
+STR_SCENARIO_EDITOR                                             :{BLACK}Enarioscay Editorway
+
+STR_64                                                          :64
+STR_128                                                         :128
+STR_256                                                         :256
+STR_512                                                         :512
+STR_1024                                                        :1024
+STR_2048                                                        :2048
+STR_MAPSIZE                                                     :{BLACK}Apmay izesay:
+STR_BY                                                          :{BLACK}*
+STR_0148_GAME_OPTIONS                                           :{BLACK}Amegay Optionsway
+
+STR_0150_SOMEONE                                                :omeonesay{SKIP}{SKIP}
+STR_0151_MAP_OF_WORLD                                           :Apmay ofway orldway
+STR_0152_TOWN_DIRECTORY                                         :Owntay irectoryday
+STR_0153_SUBSIDIES                                              :Ubsidiessay
+
+STR_UNITS_IMPERIAL                                              :Imperialway
+STR_UNITS_METRIC                                                :Etricmay
+STR_UNITS_SI                                                    :ISay
+
+STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} mphay
+STR_UNITS_VELOCITY_METRIC                                       :{COMMA} kmay/hay
+STR_UNITS_VELOCITY_SI                                           :{COMMA} may/say
+
+STR_UNITS_POWER_IMPERIAL                                        :{COMMA}hpay
+STR_UNITS_POWER_METRIC                                          :{COMMA}hpay
+STR_UNITS_POWER_SI                                              :{COMMA}kWay
+
+STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}tay
+STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}tay
+STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kgay
+
+STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} on{P "" s}tay
+STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} onne{P "" s}tay
+STR_UNITS_WEIGHT_LONG_SI                                        :{COMMA} kgay
+
+STR_UNITS_VOLUME_SHORT_IMPERIAL                                 :{COMMA}algay
+STR_UNITS_VOLUME_SHORT_METRIC                                   :{COMMA}lay
+STR_UNITS_VOLUME_SHORT_SI                                       :{COMMA}may³
+
+STR_UNITS_VOLUME_LONG_IMPERIAL                                  :{COMMA} allon{P "" s}gay
+STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} itre{P "" s}lay
+STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} may³
+
+STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}xay10³ lbfay
+STR_UNITS_FORCE_METRIC                                          :{COMMA} ontay orcefay
+STR_UNITS_FORCE_SI                                              :{COMMA} kNay
+
+############ range for menu starts
+STR_0154_OPERATING_PROFIT_GRAPH                                 :Operatingway ofitpray aphgray
+STR_0155_INCOME_GRAPH                                           :Incomeway aphgray
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Eliveredday argocay aphgray
+STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Erformancepay istoryhay aphgray
+STR_0158_COMPANY_VALUE_GRAPH                                    :Ompanycay aluevay aphgray
+STR_0159_CARGO_PAYMENT_RATES                                    :Argocay aymentpay atesray
+STR_015A_COMPANY_LEAGUE_TABLE                                   :Ompanycay eaguelay abletay
+STR_PERFORMANCE_DETAIL_MENU                                     :Etailedday erformancepay atingray
+############ range for menu ends
+
+STR_015B_OPENTTD                                                :{WHITE}Aboutway OpenTTDWAY
+STR_015C_SAVE_GAME                                              :Avesay amegay
+STR_015D_LOAD_GAME                                              :Oadlay amegay
+STR_015E_QUIT_GAME                                              :Abandonway amegay
+STR_015F_QUIT                                                   :Exitway
+STR_ABANDON_GAME_QUERY                                          :{YELLOW}Areway ouyay uresay ouyay antway otay abandonway isthay amegay?
+STR_0161_QUIT_GAME                                              :{WHITE}Abandonway Amegay
+STR_SORT_ORDER_TIP                                              :{BLACK}Electsay ortingsay orderway (escendingday/ascendingway)
+STR_SORT_CRITERIA_TIP                                           :{BLACK}Electsay ortingsay iteriacray
+STR_SORT_BY                                                     :{BLACK}Ortsay ybay
+
+STR_SORT_BY_POPULATION                                          :{BLACK}Opulationpay
+STR_SORT_BY_PRODUCTION                                          :{BLACK}Oductionpray
+STR_SORT_BY_TYPE                                                :{BLACK}Ypetay
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Ansportedtray
+STR_SORT_BY_NAME                                                :{BLACK}Amenay
+STR_SORT_BY_DROPDOWN_NAME                                       :Amenay
+STR_SORT_BY_DATE                                                :{BLACK}Ateday
+STR_SORT_BY_NUMBER                                              :Umbernay
+STR_SORT_BY_PROFIT_LAST_YEAR                                    :Ofitpray astlay earyay
+STR_SORT_BY_PROFIT_THIS_YEAR                                    :Ofitpray isthay earyay
+STR_SORT_BY_AGE                                                 :Ageway
+STR_SORT_BY_RELIABILITY                                         :Eliabilityray
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Otaltay apacitycay erpay argocay ypetay
+STR_SORT_BY_MAX_SPEED                                           :Aximummay eedspay
+STR_SORT_BY_MODEL                                               :Odelmay
+STR_SORT_BY_VALUE                                               :Aluevay
+STR_SORT_BY_FACILITY                                            :Ationstay ypetay
+STR_SORT_BY_WAITING                                             :Aitingway argocay aluevay
+STR_SORT_BY_RATING_MAX                                          :Argocay atingray
+STR_ENGINE_SORT_ENGINE_ID                                       :EngineIDWAY (assicclay ortsay)
+STR_ENGINE_SORT_COST                                            :Ostcay
+STR_ENGINE_SORT_POWER                                           :Owerpay
+STR_ENGINE_SORT_INTRO_DATE                                      :Introductionway Ateday
+STR_ENGINE_SORT_RUNNING_COST                                    :Unningray Ostcay
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Owerpay/Unningray Ostcay
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Argocay Apacitycay
+STR_NO_WAITING_CARGO                                            :{BLACK}Onay argocay ofway anyway ypetay isway aitingway
+STR_SELECT_ALL_FACILITIES                                       :{BLACK}Electsay allway acilitiesfay
+STR_SELECT_ALL_TYPES                                            :{BLACK}Electsay allway argocay ypestay (includingway onay aitingway argocay)
+STR_AVAILABLE_TRAINS                                            :{BLACK}Availableway Ainstray
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Availableway Ehiclesvay
+STR_AVAILABLE_SHIPS                                             :{BLACK}Availableway Ipsshay
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Availableway Aircraftway
+STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Eesay away istlay ofway availableway engineway esignsday orfay isthay ehiclevay ypetay.
+STR_MANAGE_LIST                                                 :{BLACK}Anagemay istlay
+STR_MANAGE_LIST_TIP                                             :{BLACK}Endsay instructionsway otay allway ehiclesvay inway isthay istlay
+STR_REPLACE_VEHICLES                                            :Eplaceray ehiclesvay
+STR_SEND_TRAIN_TO_DEPOT                                         :Endsay otay Epotday
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Endsay otay Epotday
+STR_SEND_SHIP_TO_DEPOT                                          :Endsay otay Epotday
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Endsay otay Angarhay
+STR_SEND_FOR_SERVICING                                          :Endsay orfay Ervicingsay
+
+############ range for months starts
+STR_0162_JAN                                                    :Anjay
+STR_0163_FEB                                                    :Ebfay
+STR_0164_MAR                                                    :Armay
+STR_0165_APR                                                    :Aprway
+STR_0166_MAY                                                    :Aymay
+STR_0167_JUN                                                    :Unjay
+STR_0168_JUL                                                    :Uljay
+STR_0169_AUG                                                    :Augway
+STR_016A_SEP                                                    :Epsay
+STR_016B_OCT                                                    :Octway
+STR_016C_NOV                                                    :Ovnay
+STR_016D_DEC                                                    :Ecday
+############ range for months ends
+
+STR_016E                                                        :{TINYFONT}{STRING}{} {STRING}
+STR_016F                                                        :{TINYFONT}{STRING}{} {STRING}{}{NUM}
+STR_0170                                                        :{TINYFONT}{STRING}-
+STR_0171_PAUSE_GAME                                             :{BLACK}Ausepay amegay
+STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}Avesay amegay, abandonway amegay, itquay
+STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay ationsstay
+STR_0174_DISPLAY_MAP                                            :{BLACK}Isplayday apmay
+STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}Isplayday apmay, owntay irectoryday
+STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}Isplayday owntay irectoryday
+STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}Isplayday ompanycay inancesfay informationway
+STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}Isplayday eneralgay ompanycay informationway
+STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Isplayday aphsgray
+STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Isplayday ompanycay eaguelay abletay
+STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay ainstray
+STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay oadray ehiclesvay
+STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay ipsshay
+STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay aircraftway
+STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Oomzay ethay iewvay inway
+STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Oomzay ethay iewvay outway
+STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Uildbay ailwayray acktray
+STR_0182_BUILD_ROADS                                            :{BLACK}Uildbay oadsray
+STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}Uildbay ipshay ocksday
+STR_0184_BUILD_AIRPORTS                                         :{BLACK}Uildbay airportsway
+STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Antplay eestray, aceplay ignssay etcway.
+STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Andlay areaway informationway
+STR_0187_OPTIONS                                                :{BLACK}Optionsway
+STR_0188                                                        :{BLACK}{SMALLUPARROW}
+STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
+STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}An'tcay angechay ervicingsay intervalway...
+STR_018B_CLOSE_WINDOW                                           :{BLACK}Oseclay indowway
+STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Indowway itletay - agdray isthay otay ovemay indowway
+STR_STICKY_BUTTON                                               :{BLACK}Arkmay isthay indowway asway uncloseableway ybay ethay 'Oseclay Allway Indows'way eykay
+STR_RESIZE_BUTTON                                               :{BLACK}Ickclay andway agdray otay esizeray isthay indowway
+STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Ickclay erehay otay umpjay otay ethay urrentcay efaultday avesay/oadlay irectoryday
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Emolishday uildingsbay etcway. onway away aresquay ofway andlay
+STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Owerlay away ornercay ofway andlay
+STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Aiseray away ornercay ofway andlay
+STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Ollscray arbay - ollsscray istlay upway/ownday
+STR_HSCROLL_BAR_SCROLLS_LIST                                    :{BLACK}Ollscray arbay - ollsscray istlay eftlay/ightray
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}Owshay andlay ontourscay onway apmay
+STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}Owshay ehiclesvay onway apmay
+STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}Owshay industriesway onway apmay
+STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Owshay ansporttray outesray onway apmay
+STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Owshay egetationvay onway apmay
+STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Owshay andlay ownersway onway apmay
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Oggletay owntay amesnay onway/offway onway apmay
+STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}Ofitpray isthay earyay: {CURRENCY} (astlay earyay: {CURRENCY})
+
+############ range for service numbers starts
+STR_AGE                                                         :{COMMA} ear{P "" s}yay ({COMMA})
+STR_AGE_RED                                                     :{RED}{COMMA} ear{P "" s}yay ({COMMA})
+############ range for service numbers ends
+
+STR_019C_ROAD_VEHICLE                                           :Oadray ehiclevay
+STR_019D_AIRCRAFT                                               :Aircraftway
+STR_019E_SHIP                                                   :Ipshay
+STR_019F_TRAIN                                                  :Aintray
+STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} isway ettinggay oldway
+STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} isway ettinggay eryvay oldway
+STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} isway ettinggay eryvay oldway andway urgentlyway eedsnay eplacingray
+STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Andlay Areaway Informationway
+STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Ostcay otay earclay: {LTBLUE}Nay/Away
+STR_01A5_COST_TO_CLEAR                                          :{BLACK}Ostcay otay earclay: {LTBLUE}{CURRENCY}
+STR_01A6_N_A                                                    :Nay/Away
+STR_01A7_OWNER                                                  :{BLACK}Ownerway: {LTBLUE}{STRING}
+STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Ocallay authorityway: {LTBLUE}{STRING}
+STR_01A9_NONE                                                   :Onenay
+STR_01AA_NAME                                                   :{BLACK}Amenay
+STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+
+############ range for days starts
+STR_01AC_1ST                                                    :1stay
+STR_01AD_2ND                                                    :2nday
+STR_01AE_3RD                                                    :3rday
+STR_01AF_4TH                                                    :4thay
+STR_01B0_5TH                                                    :5thay
+STR_01B1_6TH                                                    :6thay
+STR_01B2_7TH                                                    :7thay
+STR_01B3_8TH                                                    :8thay
+STR_01B4_9TH                                                    :9thay
+STR_01B5_10TH                                                   :10thay
+STR_01B6_11TH                                                   :11thay
+STR_01B7_12TH                                                   :12thay
+STR_01B8_13TH                                                   :13thay
+STR_01B9_14TH                                                   :14thay
+STR_01BA_15TH                                                   :15thay
+STR_01BB_16TH                                                   :16thay
+STR_01BC_17TH                                                   :17thay
+STR_01BD_18TH                                                   :18thay
+STR_01BE_19TH                                                   :19thay
+STR_01BF_20TH                                                   :20thay
+STR_01C0_21ST                                                   :21stay
+STR_01C1_22ND                                                   :22nday
+STR_01C2_23RD                                                   :23rday
+STR_01C3_24TH                                                   :24thay
+STR_01C4_25TH                                                   :25thay
+STR_01C5_26TH                                                   :26thay
+STR_01C6_27TH                                                   :27thay
+STR_01C7_28TH                                                   :28thay
+STR_01C8_29TH                                                   :29thay
+STR_01C9_30TH                                                   :30thay
+STR_01CA_31ST                                                   :31stay
+############ range for days ends
+
+STR_01CB                                                        :{TINYFONT}{COMMA}
+
+STR_01CE_CARGO_ACCEPTED                                         :{BLACK}Argocay acceptedway: {LTBLUE}
+
+STR_01D1_8                                                      :({COMMA}/8 {STRING})
+STR_01D2_JAZZ_JUKEBOX                                           :{WHITE}Azzjay Ukeboxjay
+STR_01D3_SOUND_MUSIC                                            :Oundsay/usicmay
+STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Owshay oundsay/usicmay indowway
+STR_01D5_ALL                                                    :{TINYFONT}Allway
+STR_01D6_OLD_STYLE                                              :{TINYFONT}Oldway Ylestay
+STR_01D7_NEW_STYLE                                              :{TINYFONT}Ewnay Ylestay
+STR_01D8_EZY_STREET                                             :{TINYFONT}Ezyway Eetstray
+STR_01D9_CUSTOM_1                                               :{TINYFONT}Ustomcay 1
+STR_01DA_CUSTOM_2                                               :{TINYFONT}Ustomcay 2
+STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Usicmay Olumevay
+STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Effectsway Olumevay
+STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}INMay  '  '  ' '  '  '  MAXay
+STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Ipskay otay eviouspray acktray inway electionsay
+STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Ipskay otay extnay acktray inway electionsay
+STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Opstay ayingplay usicmay
+STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Artstay ayingplay usicmay
+STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Agdray idersslay otay etsay usicmay andway oundsay effectway olumesvay
+STR_01E3                                                        :{DKGREEN}{TINYFONT}--
+STR_01E4_0                                                      :{DKGREEN}{TINYFONT}0{COMMA}
+STR_01E5                                                        :{DKGREEN}{TINYFONT}{COMMA}
+STR_01E6                                                        :{DKGREEN}{TINYFONT}------
+STR_01E7                                                        :{DKGREEN}{TINYFONT}"{STRING}"
+STR_01E8_TRACK_XTITLE                                           :{BLACK}{TINYFONT}Acktray{SETX 88}Itletay
+STR_01E9_SHUFFLE                                                :{TINYFONT}Uffleshay
+STR_01EA_PROGRAM                                                :{TINYFONT}{BLACK}Ogrammepray
+STR_01EB_MUSIC_PROGRAM_SELECTION                                :{WHITE}Usicmay Ogrammepray Electionsay
+STR_01EC_0                                                      :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
+STR_01ED                                                        :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
+STR_01EE_TRACK_INDEX                                            :{TINYFONT}{BLACK}Acktray Indexway
+STR_01EF_PROGRAM                                                :{TINYFONT}{BLACK}Ogrammepray - '{STRING}'
+STR_01F0_CLEAR                                                  :{TINYFONT}{BLACK}Earclay
+STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Avesay
+STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Urrentcay ogrammepray ofway usicmay ackstray
+STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Electsay 'allway acks'tray ogrammepray
+STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Electsay 'oldway ylestay usic'may ogrammepray
+STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Electsay 'ewnay ylestay usic'may ogrammepray
+STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Electsay 'Ustomcay 1' (userway-efinedday) ogrammepray
+STR_01F7_SELECT_CUSTOM_2_USER_DEFINED                           :{BLACK}Electsay 'Ustomcay 2' (userway-efinedday) ogrammepray
+STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Earclay urrentcay ogrammepray (Ustomcay1 orway Ustomcay2 onlyway)
+STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Avesay usicmay ettingssay
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Ickclay onway usicmay acktray otay addway otay urrentcay ogrammepray (Ustomcay1 orway Ustomcay2 onlyway)
+STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Ickclay onway usicmay acktray otay emoveray itway omfray urrentcay ogrammepray (Ustomcay1 orway Ustomcay2 onlyway)
+STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Oggletay ogrammepray uffleshay onway/offway
+STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Owshay usicmay acktray electionsay indowway
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Ickclay onway ervicesay otay entrecay iewvay onway industryway/owntay
+STR_01FE_DIFFICULTY                                             :{BLACK}Ifficultyday ({STRING})
+STR_01FF                                                        :{TINYFONT}{BLACK}{DATE_LONG}
+STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Astlay essagemay/ewsnay eportray
+STR_0201_MESSAGE_SETTINGS                                       :Essagemay ettingssay
+STR_MESSAGE_HISTORY_MENU                                        :Essagemay Istoryhay
+STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}Owshay astlay essagemay/ewsnay eportray, owshay essagemay optionsway
+STR_0204_MESSAGE_OPTIONS                                        :{WHITE}Essagemay Optionsway
+STR_0205_MESSAGE_TYPES                                          :{BLACK}Essagemay ypestay:
+STR_0206_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivalway ofway irstfay ehiclevay atway ayer'splay ationstay
+STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivalway ofway irstfay ehiclevay atway ompetitor'scay ationstay
+STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Accidentsway / isastersday
+STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Ompanycay informationway
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Openway / oseclay ofway industriesway
+STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Economyway angeschay
+STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Adviceway / informationway onway ayer'splay ehiclesvay
+STR_020C_NEW_VEHICLES                                           :{YELLOW}Ewnay ehiclesvay
+STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}Angeschay otay argocay acceptanceway
+STR_020E_SUBSIDIES                                              :{YELLOW}Ubsidiessay
+STR_020F_GENERAL_INFORMATION                                    :{YELLOW}Eneralgay informationway
+STR_MESSAGES_ALL                                                :{YELLOW}Etsay allway essagemay ypestay otay: Offway / Ummarysay/ Ullfay
+STR_MESSAGE_SOUND                                               :{YELLOW}Ayplay oundsay orfay ummarisedsay ewsnay essagesmay
+STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...ootay arfay omfray eviouspray estinationday
+STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Optay ompaniescay owhay eachedray {NUM}{}({STRING} Evellay)
+STR_TOP_COMPANIES_NETWORK_GAME                                  :{BIGFONT}{BLACK}Ompanycay Eaguelay Abletay inway {NUM}
+STR_0212                                                        :{BIGFONT}{COMMA}.
+STR_0213_BUSINESSMAN                                            :Usinessmanbay
+STR_0214_ENTREPRENEUR                                           :Entrepreneurway
+STR_0215_INDUSTRIALIST                                          :Industrialistway
+STR_0216_CAPITALIST                                             :Apitalistcay
+STR_0217_MAGNATE                                                :Agnatemay
+STR_0218_MOGUL                                                  :Ogulmay
+STR_0219_TYCOON_OF_THE_CENTURY                                  :Ycoontay ofway ethay Enturycay
+STR_HIGHSCORE_NAME                                              :{BIGFONT}{PLAYERNAME}, {COMPANY}
+STR_HIGHSCORE_STATS                                             :{BIGFONT}'{STRING}'   ({COMMA})
+STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} achievesway '{STRING}' atusstay!
+STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} ofway {COMPANY} achievesway '{STRING}' atusstay!
+STR_021F                                                        :{BLUE}{COMMA}
+STR_0221_OPENTTD                                                :{YELLOW}OpenTTDWAY
+STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Enarioscay Editorway
+STR_0223_LAND_GENERATION                                        :{WHITE}Andlay Enerationgay
+STR_0224                                                        :{BLACK}{UPARROW}
+STR_0225                                                        :{BLACK}{DOWNARROW}
+STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Increaseway areaway ofway andlay otay owerlay/aiseray
+STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Ecreaseday areaway ofway andlay otay owerlay/aiseray
+STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Enerategay andomray andlay
+STR_022B_RESET_LANDSCAPE                                        :{BLACK}Esetray andscapelay
+STR_022C_RESET_LANDSCAPE                                        :{WHITE}Esetray Andscapelay
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Emoveray allway ayerplay-ownedway opertypray omfray ethay apmay
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Areway ouyay uresay ouyay antway otay emoveray allway ayerplay-ownedway opertypray?
+STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Andscapelay enerationgay
+STR_022F_TOWN_GENERATION                                        :{BLACK}Owntay enerationgay
+STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Industryway enerationgay
+STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Oadray onstructioncay
+STR_0233_TOWN_GENERATION                                        :{WHITE}Owntay Enerationgay
+STR_0234_NEW_TOWN                                               :{BLACK}Ewnay Owntay
+STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Onstructcay ewnay owntay
+STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}An'tcay uildbay owntay erehay...
+STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}...ootay oseclay otay edgeway ofway apmay
+STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN                              :{WHITE}...ootay oseclay otay anotherway owntay
+STR_0239_SITE_UNSUITABLE                                        :{WHITE}...itesay unsuitableway
+STR_023A_TOO_MANY_TOWNS                                         :{WHITE}...ootay anymay ownstay
+STR_CANNOT_GENERATE_TOWN                                        :{WHITE}An'tcay uildbay anyway ownstay
+STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...erethay isway onay oremay acespay onway ethay apmay
+STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Increaseway izesay ofway owntay
+STR_023C_EXPAND                                                 :{BLACK}Expandway
+STR_023D_RANDOM_TOWN                                            :{BLACK}Andomray Owntay
+STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION                          :{BLACK}Uildbay owntay inway andomray ocationlay
+STR_023F_INDUSTRY_GENERATION                                    :{WHITE}Industryway Enerationgay
+STR_0240_COAL_MINE                                              :{BLACK}Oalcay Inemay
+STR_0241_POWER_STATION                                          :{BLACK}Owerpay Ationstay
+STR_0242_SAWMILL                                                :{BLACK}Awmillsay
+STR_0243_FOREST                                                 :{BLACK}Orestfay
+STR_0244_OIL_REFINERY                                           :{BLACK}Oilway Efineryray
+STR_0245_OIL_RIG                                                :{BLACK}Oilway Igray
+STR_0246_FACTORY                                                :{BLACK}Actoryfay
+STR_0247_STEEL_MILL                                             :{BLACK}Eelstay Illmay
+STR_0248_FARM                                                   :{BLACK}Armfay
+STR_0249_IRON_ORE_MINE                                          :{BLACK}Ironway Oreway Inemay
+STR_024A_OIL_WELLS                                              :{BLACK}Oilway Ellsway
+STR_024B_BANK                                                   :{BLACK}Ankbay
+STR_024C_PAPER_MILL                                             :{BLACK}Aperpay Illmay
+STR_024D_FOOD_PROCESSING_PLANT                                  :{BLACK}Oodfay Ocessingpray Antplay
+STR_024E_PRINTING_WORKS                                         :{BLACK}Intingpray Orksway
+STR_024F_GOLD_MINE                                              :{BLACK}Oldgay Inemay
+STR_0250_LUMBER_MILL                                            :{BLACK}Umberlay Illmay
+STR_0251_FRUIT_PLANTATION                                       :{BLACK}Uitfray Antationplay
+STR_0252_RUBBER_PLANTATION                                      :{BLACK}Ubberray Antationplay
+STR_0253_WATER_SUPPLY                                           :{BLACK}Aterway Upplysay
+STR_0254_WATER_TOWER                                            :{BLACK}Aterway Owertay
+STR_0255_DIAMOND_MINE                                           :{BLACK}Iamondday Inemay
+STR_0256_COPPER_ORE_MINE                                        :{BLACK}Oppercay Oreway Inemay
+STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Andyflosscay Orestfay
+STR_0258_CANDY_FACTORY                                          :{BLACK}Eetsway Actoryfay
+STR_0259_BATTERY_FARM                                           :{BLACK}Atterybay Armfay
+STR_025A_COLA_WELLS                                             :{BLACK}Olacay Ellsway
+STR_025B_TOY_SHOP                                               :{BLACK}Oytay Opshay
+STR_025C_TOY_FACTORY                                            :{BLACK}Oytay Actoryfay
+STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}Asticplay Ountainsfay
+STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}Izzyfay Inkdray Actoryfay
+STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Ubblebay Eneratorgay
+STR_0260_TOFFEE_QUARRY                                          :{BLACK}Offeetay Arryquay
+STR_0261_SUGAR_MINE                                             :{BLACK}Ugarsay Inemay
+STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Onstructcay Oalcay Inemay
+STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Onstructcay Owerpay Ationstay
+STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Onstructcay Awmillsay
+STR_0265_PLANT_FOREST                                           :{BLACK}Antplay Orestfay
+STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Onstructcay Oilway Efineryray
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Onstructcay Oilway Igray (Ancay onlyway ebay uiltbay earnay ethay edgesway ofway ethay apmay)
+STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Onstructcay Actoryfay
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Onstructcay Eelstay Illmay
+STR_026A_CONSTRUCT_FARM                                         :{BLACK}Onstructcay Armfay
+STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Onstructcay Ironway Oreway Inemay
+STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Onstructcay Oilway Ellsway
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Onstructcay Ankbay (Ancay onlyway ebay uiltbay inway ownstay ithway away opulationpay eatergray anthay 1200)
+STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Onstructcay Aperpay Illmay
+STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Onstructcay Oodfay Ocessingpray Antplay
+STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Onstructcay Intingpray Orksway
+STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Onstructcay Oldgay Inemay
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Onstructcay Ankbay (Ancay onlyway ebay uiltbay inway ownstay)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Onstructcay Umberlay Illmay (otay earclay ainforestray andway oducepray Oodway)
+STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Antplay Uitfray Antationplay
+STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Antplay Ubberray Antationplay
+STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Onstructcay Aterway Upplysay
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Onstructcay Aterway Owertay (Ancay onlyway ebay uiltbay inway ownstay)
+STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Onstructcay Iamondday Inemay
+STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Onstructcay Oppercay Oreway Inemay
+STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Antplay Andyflosscay Orestfay
+STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Onstructcay Eetsway Actoryfay
+STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Onstructcay Atterybay Armfay
+STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Onstructcay Olacay Ellsway
+STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Onstructcay Oytay Opshay
+STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Onstructcay Oytay Actoryfay
+STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Onstructcay Asticplay Ountainsfay
+STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Onstructcay Izzyfay Inkdray Actoryfay
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Onstructcay Ubblebay Eneratorgay
+STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Onstructcay Offeetay Arryquay
+STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Onstructcay Ugarsay Inemay
+STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}An'tcay uildbay {STRING} erehay...
+STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...ustmay uildbay owntay irstfay
+STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...onlyway oneway allowedway erpay owntay
+STR_0288_PLANT_TREES                                            :{BLACK}Antplay eestray
+STR_0289_PLACE_SIGN                                             :{BLACK}Aceplay ignsay
+STR_028A_RANDOM_TREES                                           :{BLACK}Andomray Eestray
+STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Antplay eestray andomlyray overway andscapelay
+STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}Aceplay ockyray areasway onway andscapelay
+STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Aceplay ighthouselay
+STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Aceplay ansmittertray
+STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Efineday esertday areaway.{}Esspray andway oldhay CTRLay otay emoveray itway
+STR_CREATE_LAKE                                                 :{BLACK}Efineday aterway areaway.{}Akemay away analcay, unlessway CTRLay isway eldhay ownday atway easay evellay, enwhay itway illway oodflay ethay urroundingssay insteadway
+STR_0290_DELETE                                                 :{BLACK}Eleteday
+STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Eleteday isthay owntay ompletelycay
+STR_0292_SAVE_SCENARIO                                          :Avesay enarioscay
+STR_0293_LOAD_SCENARIO                                          :Oadlay enarioscay
+STR_LOAD_HEIGHTMAP                                              :Oadlay eightmaphay
+STR_0294_QUIT_EDITOR                                            :Itquay editorway
+STR_0295                                                        :
+STR_0296_QUIT                                                   :Itquay
+STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Avesay enarioscay, oadlay enarioscay, abandonway enarioscay editorway, itquay
+STR_0298_LOAD_SCENARIO                                          :{WHITE}Oadlay Enarioscay
+STR_0299_SAVE_SCENARIO                                          :{WHITE}Avesay Enarioscay
+STR_029A_PLAY_SCENARIO                                          :{BLACK}Ayplay Enarioscay
+STR_PLAY_HEIGHTMAP                                              :{BLACK}Ayplay Eightmaphay
+STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Artstay away ewnay amegay, usingway away eightmaphay asway andscapelay
+STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Areway ouyay uresay ouyay antway otay itquay isthay enarioscay ?
+STR_029C_QUIT_EDITOR                                            :{WHITE}Itquay Editorway
+STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...ancay onlyway ebay uiltbay inway ownstay ithway away opulationpay ofway atway eastlay 1200
+STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Ovemay ethay artingstay ateday ackwardbay 1 earyay
+STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Ovemay ethay artingstay ateday orwardfay 1 earyay
+STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...endsway ofway idgebray ustmay othbay ebay onway andlay
+STR_02A1_SMALL                                                  :{BLACK}Allsmay
+STR_02A2_MEDIUM                                                 :{BLACK}Ediummay
+STR_02A3_LARGE                                                  :{BLACK}Argelay
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Itycay
+STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Electsay owntay izesay
+STR_02A5_TOWN_SIZE                                              :{YELLOW}Owntay izesay:
+
+STR_02B6                                                        :{STRING}  -  {STRING}
+STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Owshay astlay essagemay orway ewsnay eportray
+STR_OFF                                                         :Offway
+STR_SUMMARY                                                     :Ummarysay
+STR_FULL                                                        :Ullfay
+STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
+STR_02BB_TOWN_DIRECTORY                                         :Owntay irectoryday
+STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Ehiclevay esignday amesnay
+STR_02BD                                                        :{BLACK}{STRING}
+STR_02BE_DEFAULT                                                :Efaultday
+STR_02BF_CUSTOM                                                 :Ustomcay
+STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Avesay ustomcay amesnay
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Ehiclevay esignday amesnay electionsay
+STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Avesay ustomisedcay ehiclevay esignday amesnay
+
+STR_CHECKMARK                                                   :{CHECKMARK}
+############ range for menu starts
+STR_02C3_GAME_OPTIONS                                           :Amegay optionsway
+STR_02C5_DIFFICULTY_SETTINGS                                    :Ifficultyday ettingssay
+STR_02C7_CONFIG_PATCHES                                         :Onfigurecay atchespay
+STR_NEWGRF_SETTINGS                                             :EwGRFnay ettingssay
+STR_GAMEOPTMENU_0A                                              :
+STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Owntay amesnay isplayedday
+STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Ationstay amesnay isplayedday
+STR_02CE_SIGNS_DISPLAYED                                        :{SETX 12}Ignssay isplayedday
+STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Aypointsway isplayedday
+STR_02D0_FULL_ANIMATION                                         :{SETX 12}Ullfay animationway
+STR_02D2_FULL_DETAIL                                            :{SETX 12}Ullfay etailday
+STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Ansparenttray uildingsbay
+STR_TRANSPARENT_SIGNS                                           :{SETX 12}Ansparenttray ationstay ignssay
+############ range ends here
+
+############ range for menu starts
+STR_02D5_LAND_BLOCK_INFO                                        :Andlay areaway informationway
+STR_02D6                                                        :
+STR_CONSOLE_SETTING                                             :Oggletay Onsolecay
+STR_02D7_SCREENSHOT_CTRL_S                                      :Eenshotscray (Ctrlay-Say)
+STR_02D8_GIANT_SCREENSHOT_CTRL_G                                :Iantgay Eenshotscray (Ctrlay-Gay)
+STR_02D9_ABOUT_OPENTTD                                          :Aboutway 'OpenTTD'WAY
+############ range ends here
+
+STR_02DB_OFF                                                    :{BLACK}Offway
+STR_02DA_ON                                                     :{BLACK}Onway
+STR_02DC_DISPLAY_SUBSIDIES                                      :{BLACK}Isplayday ubsidiessay
+STR_02DD_SUBSIDIES                                              :Ubsidiessay
+STR_02DE_MAP_OF_WORLD                                           :Apmay ofway orldway
+STR_EXTRA_VIEW_PORT                                             :Extraway iewportvay
+STR_SIGN_LIST                                                   :Ignsay istlay
+STR_TRANSPARENCY_OPTIONS                                        :Ansparencytray optionsway
+STR_02DF_TOWN_DIRECTORY                                         :Owntay irectoryday
+STR_TOWN_POPULATION                                             :{BLACK}Orldway opulationpay: {COMMA}
+STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Iewportvay {COMMA}
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Opycay otay iewportvay
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Opycay ethay ocationlay ofway ethay obalglay iewvay otay isthay iewportvay
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Astepay omfray iewportvay
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Astepay ethay ocationlay ofway isthay iewportvay otay ethay obalglay iewvay
+
+STR_02E0_CURRENCY_UNITS                                         :{BLACK}Urrencycay unitsway
+STR_02E1                                                        :{BLACK}{SKIP}{STRING}
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Urrencycay unitsway electionsay
+STR_MEASURING_UNITS                                             :{BLACK}Easuringmay unitsway
+STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Easuringmay unitsway electionsay
+STR_02E6_ROAD_VEHICLES                                          :{BLACK}Oadray ehiclesvay
+STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Electsay idesay ofway oadray orfay ehiclesvay otay ivedray onway
+STR_02E9_DRIVE_ON_LEFT                                          :Ivedray onway eftlay
+STR_02EA_DRIVE_ON_RIGHT                                         :Ivedray onway ightray
+STR_02EB_TOWN_NAMES                                             :{BLACK}Owntay amesnay
+STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Electsay ylestay ofway owntay amesnay
+
+STR_02F4_AUTOSAVE                                               :{BLACK}Autosaveway
+STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Electsay intervalway etweenbay automaticway amegay avessay
+STR_02F7_OFF                                                    :Offway
+STR_02F8_EVERY_3_MONTHS                                         :Everyway 3 onthsmay
+STR_02F9_EVERY_6_MONTHS                                         :Everyway 6 onthsmay
+STR_02FA_EVERY_12_MONTHS                                        :Everyway 12 onthsmay
+STR_02FB_START_A_NEW_GAME                                       :{BLACK}Artstay away ewnay amegay
+STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}Oadlay away avedsay amegay
+STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}Eatecray away ustomisedcay amegay orldway/enarioscay
+STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}Electsay inglesay-ayerplay amegay
+STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}Electsay ultiplayermay amegay ofway 2-8 ayersplay
+STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Isplayday amegay optionsway
+STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Isplayday ifficultyday optionsway
+STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Artstay away ewnay amegay, usingway away ustomisedcay enarioscay
+STR_0304_QUIT                                                   :{BLACK}Itquay
+STR_0305_QUIT_OPENTTD                                           :{BLACK}Itquay 'OpenTTD'WAY
+STR_0307_OPENTTD                                                :{WHITE}OpenTTDWAY {REV}
+STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...ancay onlyway ebay uiltbay inway ownstay
+STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Electsay 'emperate'tay andscapelay ylestay
+STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Electsay 'ubsay-arctic'WAY andscapelay ylestay
+STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Electsay 'ubsay-opical'tray andscapelay ylestay
+STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Electsay 'oyland'tay andscapelay ylestay
+STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Undfay onstructioncay ofway ewnay industryway
+
+############ range for menu starts
+STR_INDUSTRY_DIR                                                :Industryway Irectoryday
+STR_0313_FUND_NEW_INDUSTRY                                      :Undfay ewnay industryway
+############ range ends here
+
+STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Undfay ewnay industryway
+STR_JUST_STRING                                                 :{STRING}
+STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...ancay onlyway ebay uiltbay inway ownstay
+STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...ancay onlyway ebay uiltbay inway ainforestray areasway
+STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT                            :{WHITE}...ancay onlyway ebay uiltbay inway esertday areasway
+STR_0319_PAUSED                                                 :{YELLOW}* *  USEDPAay  *  *
+
+STR_031B_SCREENSHOT_SUCCESSFULLY                                :{WHITE}Eenshotscray uccessfullysay avedsay asway '{STRING}'
+STR_031C_SCREENSHOT_FAILED                                      :{WHITE}Eenshotscray ailedfay!
+
+STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Urchasepay andlay orfay uturefay useway
+STR_032F_AUTOSAVE                                               :{RED}AUTOSAVEWAY
+STR_SAVING_GAME                                                 :{RED}*  *  INGSAVay EGAMay  *  *
+STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Avingsay illstay inway ogresspray,{}easeplay aitway untilway itway isway inishedfay!
+STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Electsay 'Ezyway Eetstray ylestay usic'may ogrammepray
+
+STR_0335_6                                                      :{BLACK}6
+STR_0336_7                                                      :{BLACK}7
+
+############ start of townname region
+STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Englishway (Originalway)
+STR_TOWNNAME_FRENCH                                             :Enchfray
+STR_TOWNNAME_GERMAN                                             :Ermangay
+STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Englishway (Additionalway)
+STR_TOWNNAME_LATIN_AMERICAN                                     :Atinlay-Americanway
+STR_TOWNNAME_SILLY                                              :Illysay
+STR_TOWNNAME_SWEDISH                                            :Edishsway
+STR_TOWNNAME_DUTCH                                              :Utchday
+STR_TOWNNAME_FINNISH                                            :Innishfay
+STR_TOWNNAME_POLISH                                             :Olishpay
+STR_TOWNNAME_SLOVAKISH                                          :Ovakishslay
+STR_TOWNNAME_NORWEGIAN                                          :Orwegiannay
+STR_TOWNNAME_HUNGARIAN                                          :Ungarianhay
+STR_TOWNNAME_AUSTRIAN                                           :Austrianway
+STR_TOWNNAME_ROMANIAN                                           :Omanianray
+STR_TOWNNAME_CZECH                                              :Echczay
+STR_TOWNNAME_SWISS                                              :Isssway
+STR_TOWNNAME_DANISH                                             :Anishday
+STR_TOWNNAME_TURKISH                                            :Urkishtay
+STR_TOWNNAME_ITALIAN                                            :Italianway
+STR_TOWNNAME_CATALAN                                            :Atalancay
+############ end of townname region
+
+STR_CURR_GBP                                                    :Oundspay (£)
+STR_CURR_USD                                                    :Ollarsday ($)
+STR_CURR_EUR                                                    :Euroway (€)
+STR_CURR_YEN                                                    :Enyay (¥)
+STR_CURR_ATS                                                    :Austrianway Illingshay (ATSWAY)
+STR_CURR_BEF                                                    :Elgianbay Ancfray (EFBay)
+STR_CURR_CHF                                                    :Isssway Ancfray (CHFay)
+STR_CURR_CZK                                                    :Echczay Orunakay (CZKay)
+STR_CURR_DEM                                                    :Eutschmarkday (EMDay)
+STR_CURR_DKK                                                    :Anishday Onekray (DKKay)
+STR_CURR_ESP                                                    :Esetapay (ESPWAY)
+STR_CURR_FIM                                                    :Innishfay Arkkamay (IMFay)
+STR_CURR_FRF                                                    :Ancfray (FRFay)
+STR_CURR_GRD                                                    :Eekgray Achmadray (GRDay)
+STR_CURR_HUF                                                    :Ungarianhay Orintfay (UFHay)
+STR_CURR_ISK                                                    :Icelandicway Onakray (ISKWAY)
+STR_CURR_ITL                                                    :Italianway Iralay (ITLWAY)
+STR_CURR_NLG                                                    :Utchday Uildergay (NLGay)
+STR_CURR_NOK                                                    :Orwegiannay Onekray (OKNay)
+STR_CURR_PLN                                                    :Olishpay Otyzlay (PLNay)
+STR_CURR_ROL                                                    :Omanianray Eulay (OLRay)
+STR_CURR_RUR                                                    :Ussianray Ublesray (URRay)
+STR_CURR_SIT                                                    :Ovenianslay Olartay (ITSay)
+STR_CURR_SEK                                                    :Edishsway Onakray (EKSay)
+STR_CURR_YTL                                                    :Urkishtay Iralay (YTLay)
+STR_CURR_SKK                                                    :Ovakslay Orunakay (SKKay)
+STR_CURR_BRR                                                    :Azilianbray Ealray (BRLay)
+
+STR_CURR_CUSTOM                                                 :Ustomcay...
+
+STR_OPTIONS_LANG                                                :{BLACK}Anguagelay
+STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_LANG_TIP                                            :{BLACK}Electsay ethay interfaceway anguagelay otay useway
+
+STR_OPTIONS_FULLSCREEN                                          :{BLACK}Ullscreenfay
+STR_OPTIONS_FULLSCREEN_TIP                                      :{BLACK}Eckchay isthay oxbay otay ayplay OpenTTDWAY ullscreenfay odemay
+
+STR_OPTIONS_RES                                                 :{BLACK}Eenscray esolutionray
+STR_OPTIONS_RES_CBO                                             :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_RES_TIP                                             :{BLACK}Electsay ethay eenscray esolutionray otay useway
+
+STR_OPTIONS_SCREENSHOT_FORMAT                                   :{BLACK}Eenshotscray ormatfay
+STR_OPTIONS_SCREENSHOT_FORMAT_CBO                               :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Electsay ethay eenshotscray ormatfay otay useway
+
+STR_AUTOSAVE_1_MONTH                                            :Everyway onthmay
+STR_AUTOSAVE_FAILED                                             :{WHITE}Autosaveway ailedfay
+
+STR_MONTH_JAN                                                   :Anuaryjay
+STR_MONTH_FEB                                                   :Ebruaryfay
+STR_MONTH_MAR                                                   :Archmay
+STR_MONTH_APR                                                   :Aprilway
+STR_MONTH_MAY                                                   :Aymay
+STR_MONTH_JUN                                                   :Unejay
+STR_MONTH_JUL                                                   :Ulyjay
+STR_MONTH_AUG                                                   :Augustway
+STR_MONTH_SEP                                                   :Eptembersay
+STR_MONTH_OCT                                                   :Octoberway
+STR_MONTH_NOV                                                   :Ovembernay
+STR_MONTH_DEC                                                   :Ecemberday
+
+STR_HEADING_FOR_STATION                                         :{LTBLUE}Eadinghay orfay {STATION}
+STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}Eadinghay orfay {STATION}, {VELOCITY}
+STR_NO_ORDERS                                                   :{LTBLUE}Onay ordersway
+STR_NO_ORDERS_VEL                                               :{LTBLUE}Onay ordersway, {VELOCITY}
+
+STR_PASSENGERS                                                  :assengerspay
+STR_BAGS                                                        :agsbay
+STR_TONS                                                        :onnestay
+STR_LITERS                                                      :itreslay
+STR_ITEMS                                                       :itemsway
+STR_CRATES                                                      :atescray
+STR_RES_OTHER                                                   :otherway
+STR_NOTHING                                                     :
+
+STR_SMALL_RIGHT_ARROW                                           :{TINYFONT}{RIGHTARROW}
+
+STR_CANT_SHARE_ORDER_LIST                                       :{WHITE}An'tcay areshay orderway istlay...
+STR_CANT_COPY_ORDER_LIST                                        :{WHITE}An'tcay opycay orderway istlay...
+STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Endway ofway Aredshay Ordersway - -
+
+STR_TRAIN_IS_LOST                                               :{WHITE}Aintray {COMMA} isway ostlay.
+STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Aintray {COMMA}'say ofitpray astlay earyay asway {CURRENCY}
+STR_EURO_INTRODUCE                                              :{BLACK}{BIGFONT}Europeanway Onetarymay Unionway!{}{}Ethay Euroway isway introducedway asway ethay olesay urrencycay orfay everydayway ansactionstray inway ouryay ountrycay!
+
+# Start of order review system.
+# DON'T ADD OR REMOVE LINES HERE
+STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Aintray {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Aintray {COMMA} ashay away oidvay orderway
+STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Aintray {COMMA} ashay uplicateday ordersway
+STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Aintray {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Oadray Ehiclevay {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Oadray Ehiclevay {COMMA} ashay away oidvay orderway
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Oadray Ehiclevay {COMMA} ashay uplicateday ordersway
+STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Oadray Ehiclevay {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+STR_SHIP_HAS_TOO_FEW_ORDERS                                     :{WHITE}Ipshay {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Ipshay {COMMA} ashay away oidvay orderway
+STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Ipshay {COMMA} ashay uplicateday ordersway
+STR_SHIP_HAS_INVALID_ENTRY                                      :{WHITE}Ipshay {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Aircraftway {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Aircraftway {COMMA} ashay away oidvay orderway
+STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}Aircraftway {COMMA} ashay uplicateday ordersway
+STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Aircraftway {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+# end of order system
+
+STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Autorenewway ailedfay onway aintray {COMMA} (oneymay imitlay)
+STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Autorenewway ailedfay onway oadray ehiclevay {COMMA} (oneymay imitlay)
+STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Autorenewway ailedfay onway ipshay {COMMA} (oneymay imitlay)
+STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Autorenewway ailedfay onway aircraftway {COMMA} (oneymay imitlay)
+STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}Aintray {COMMA} isway ootay onglay afterway eplacementray
+
+STR_CONFIG_PATCHES                                              :{BLACK}Onfigurecay Atchespay
+STR_CONFIG_PATCHES_TIP                                          :{BLACK}Onfigurecay ethay atchespay
+STR_CONFIG_PATCHES_CAPTION                                      :{WHITE}Onfigurecay Atchespay
+
+STR_CONFIG_PATCHES_OFF                                          :Offway
+STR_CONFIG_PATCHES_ON                                           :Onway
+STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Owshay ehiclevay eedspay inway atusstay arbay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Allowway uildingbay onway opesslay andway oastscay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Allowway oremay ealisticallyray izedsay atchmentcay areasway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Allowway emovalray ofway oremay owntay-ownedway oadsray, idgesbray, etcway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Enableway uildingbay eryvay onglay ainstray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Enableway ealisticray accelerationway orfay ainstray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Orbidfay ainstray andway ipsshay otay akemay 90 egday urnstay: {ORANGE}{STRING} {LTBLUE} (equiresray NPFay)
+STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Oinjay aintray ationsstay uiltbay extnay otay eachway otherway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Eavelay ationstay enwhay anyway argocay isway ullfay, ifway 'ullfay oad'lay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Useway improvedway oadinglay algorithmway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Oadlay ehiclesvay aduallygray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Inflationway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Eliverday argocay otay away ationstay onlyway enwhay erethay isway away emandday: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Allowway uildingbay eryvay onglay idgesbray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Allowway otogay epotday ordersway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Allowway onstructingcay awray aterialmay oducingpray industriesway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Allowway ultiplemay imilarsay industriesway erpay owntay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industriesway ofway ethay amesay ypetay ancay ebay uiltbay oseclay otay eachway otherway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Alwaysway owshay onglay ateday inway ethay atusstay arbay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Owshay ignalssay onway ethay ivedray idesay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Owshay inancesfay indowway atway ethay endway ofway ethay earyay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}AtchtTDPay ompatiblecay onstopnay andlinghay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Oadray ehiclevay eueingquay (ithway antumquay effectsway): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Anpay indowway enwhay ousemay isway atway ethay edgeway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Allowway ibingbray ofway ethay ocallay authorityway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Onuniformnay ationsstay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Ewnay obalglay athfindingpay (NPFay, overridesway NTPay): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Eightway ultipliermay orfay eightfray otay imulatesay eavyhay ainstray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Allowway ivedray-oughthray oadray opsstay onway owntay ownedway oadsray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Allowway uildingbay adjacentway ationsstay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Alwaysway allowway allsmay airportsway: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Arnway ifway aintray isway ostlay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Eviewray ehicles'vay ordersway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :onay
+STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :esyay, utbay excludeway oppedstay ehiclesvay
+STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :ofway allway ehiclesvay
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Arnway ifway away ain'stray incomeway isway egativenay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Ehiclesvay evernay expireway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Autorenewway ehiclevay enwhay itway etsgay oldway
+STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Autorenewway enwhay ehicevay isway {ORANGE}{STRING}{LTBLUE} onthsmay eforebay/afterway axmay ageway
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Autorenewway inimummay eedednay oneymay orfay enewray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Urationday ofway errorway essagemay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Owshay owntay opulationpay inway ethay owntay amenay abellay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Invisibleway eestray (ithway ansparenttray uildingsbay): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Andlay eneratorgay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Originalway
+STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :ErraGenesistay
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Axmay istanceday omfray edgeway orfay Oilway Efineriesray {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Owsnay inelay eighthay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Oughnessray ofway erraintay (ErraGenesistay onlyway) : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Eryvay Oothsmay
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :Oothsmay
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :Oughray
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Eryvay Oughray
+STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Eetray acerplay algorithmway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Onenay
+STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Originalway
+STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Improvedway
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}Eightmaphay otationray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Ountercay ockwiseclay
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :Ockwiseclay
+STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Ethay eighthay evellay away atflay enarioscay apmay etsgay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Axmay ationstay eadspray: {ORANGE}{STRING} {RED}Arningway: Ighhay ettingsay owsslay amegay
+STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Ervicesay elicoptershay atway elipadshay automaticallyway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Inklay andscapelay oolbartay otay ailray/oadray/aterway/airportway oolbarstay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Everseray ollscray irectionday: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Oothsmay iewportvay ollingscray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Owshay away easurementmay ooltiptay enwhay usingway ariousvay uildbay-oolstay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Owshay ompanycay iverieslay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES_NONE                                :Onenay
+STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Ownway ompanycay
+STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Allway ompaniescay
+STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Eferpray eamtay atchay ithway <ENTERWAY>: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Unctionfay ofway ollwheelscray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Oomzay apmay
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Ollscray apmay
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Offway
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Apmay ollwheelscray eedspay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaticallyway ausepay enwhay artingstay away ewnay amegay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Useway ethay advancedway ehiclevay istlay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Axmay ainstray erpay ayerplay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Axmay oadray ehiclesvay erpay ayerplay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Axmay aircraftway erpay ayerplay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Axmay ipsshay erpay ayerplay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Isableday ainstray orfay omputercay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Isableday oadray ehiclesvay orfay omputercay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Isableday aircraftway orfay omputercay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Isableday ipsshay orfay omputercay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Enableway ewnay AIWAY (alphaway): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Allowway AIsway inway ultiplayermay (experimentalway): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Efaultday ervicesay intervalway orfay ainstray: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Efaultday ervicesay intervalway orfay ainstray: {ORANGE}isabledday
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Efaultday ervicesay intervalway orfay oadray ehiclesvay: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Efaultday ervicesay intervalway orfay oadray ehiclesvay: {ORANGE}isabledday
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Efaultday ervicesay intervalway orfay aircraftway: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Efaultday ervicesay intervalway orfay aircraftway: {ORANGE}isabledday
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Efaultday ervicesay intervalway orfay ipsshay: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Efaultday ervicesay intervalway orfay ipsshay: {ORANGE}isabledday
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Isableday ervicingsay enwhay eakdownsbray etsay otay onenay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Enableway agonway eedspay imitslay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Isableday electricway ailsray: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Olouredcay ewsnay appearsway inway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Artingstay earyay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Endway amegay inway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Enableway oothsmay economyway (oremay, allersmay angeschay)
+STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Allowway uyingbay aresshay omfray otherway ompaniescay
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Enwhay aggingdray, aceplay ignalssay everyway: {ORANGE}{STRING} iletay(say)
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automaticallyway uildbay emaphoressay eforebay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Ethay owntay ayoutlay "onay oremay oadsray" isn'tway alidvay inway ethay enarioscay editorway
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Electsay owntay-oadray ayoutlay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :onay oremay oadsray
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :efaultday
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :etterbay oadsray
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2xay2 idgray
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3xay3 idgray
+
+STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Ositionpay ofway ainmay oolbartay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Eftlay
+STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Entrecay
+STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Ightray
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Indowway apsnay adiusray: {ORANGE}{STRING} pxay
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Indowway apsnay adiusray: {ORANGE}isabledday
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Owntay owthgray eedspay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Onenay
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Owslay
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Ormalnay
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Astfay
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Eryvay astfay
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Oportionpray ofway ownstay atthay illway ecomebay itiescay: {ORANGE}1 inway {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Oportionpray ofway ownstay atthay illway ecomebay itiescay: {ORANGE}Onenay
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Initialway itycay izesay ultipliermay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfaceway
+STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Onstructioncay
+STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}Ehiclesvay
+STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}Ationsstay
+STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}Economyway
+STR_CONFIG_PATCHES_AI                                           :{BLACK}Ompetitorscay
+
+STR_CONFIG_PATCHES_DISABLED                                     :isabledday
+STR_CONFIG_PATCHES_INT32                                        :{NUM}
+STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
+
+STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Angechay ettingsay aluevay
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Omesay orway allway ofway ethay efaultday ervicesay intervalway(say) elowbay areway incompatibleway ithway ethay osenchay ettingsay! 5-90% andway 30-800 aysday areway alidvay
+STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Useway YAPFay orfay ipsshay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Useway YAPFay orfay oadvehsray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Useway YAPFay orfay ainstray: {ORANGE}{STRING}
+
+STR_TEMPERATE_LANDSCAPE                                         :Emperatetay andscapelay
+STR_SUB_ARCTIC_LANDSCAPE                                        :Ubsay-arcticway andscapelay
+STR_SUB_TROPICAL_LANDSCAPE                                      :Ubsay-opicaltray andscapelay
+STR_TOYLAND_LANDSCAPE                                           :Oylandtay andscapelay
+
+STR_CHEATS                                                      :{WHITE}Eatschay
+STR_CHEATS_TIP                                                  :{BLACK}Eckboxeschay indicateway ifway ouyay avehay usedway isthay eatchay eforebay
+STR_CHEATS_WARNING                                              :{BLACK}Arningway! Ouyay areway aboutway otay etraybay ouryay ellowfay ompetitorscay. Eepkay inway indmay atthay uchsay away isgraceday illway ebay ememberedray orfay eternityway.
+STR_CHEAT_MONEY                                                 :{LTBLUE}Increaseway oneymay ybay {CURRENCY64}
+STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Ayingplay asway ayerplay: {ORANGE}{COMMA}
+STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Agicmay ulldozerbay (emoveray industriesway, unmovablesway): {ORANGE}{STRING}
+STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Unnelstay aymay osscray eachway otherway: {ORANGE}{STRING}
+STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Uildbay ilewhay inway ausepay odemay: {ORANGE}{STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Etplanesjay illway otnay ashcray (equentlyfray) onway allsmay airportsway: {ORANGE} {STRING}
+STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Itchsway imateclay: {ORANGE} {STRING}
+STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Angechay ateday: {ORANGE} {DATE_SHORT}
+STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Enableway odifyingmay oductionpray aluesvay: {ORANGE}{STRING}
+
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Eadinghay orfay {WAYPOINT}
+STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Eadinghay orfay {WAYPOINT}, {VELOCITY}
+
+STR_GO_TO_WAYPOINT                                              :Ogay iavay {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT                                     :Ogay onnay-opstay iavay {WAYPOINT}
+
+STR_WAYPOINTNAME_CITY                                           :Aypointway {TOWN}
+STR_WAYPOINTNAME_CITY_SERIAL                                    :Aypointway {TOWN} #{COMMA}
+STR_LANDINFO_WAYPOINT                                           :Aypointway
+
+STR_WAYPOINT                                                    :{WHITE}Aypointway
+STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Electsay aypointway ypetay
+
+STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
+STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
+STR_WAYPOINT_RAW                                                :{WAYPOINT}
+STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Editway aypointway amenay
+
+STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}An'tcay angechay aypointway amenay...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Onvertcay ailray otay aypointway
+STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}An'tcay uildbay aintray aypointway erehay...
+STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}An'tcay emoveray aintray aypointway erehay...
+
+STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Uildbay ailwayray acktray usingway ethay Autorailway odemay
+
+STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...erethay isway onay owntay inway isthay enarioscay
+
+STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Areway ouyay uresay ouyay antway otay eatecray away andomray andscapelay?
+STR_MANY_RANDOM_TOWNS                                           :{BLACK}Anymay andomray ownstay
+STR_RANDOM_TOWNS_TIP                                            :{BLACK}Overcay ethay apmay ithway andomlyray acedplay ownstay
+STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Anymay andomray industriesway
+STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Overcay ethay apmay ithway andomlyray acedplay industriesway
+STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}An'tcay enerategay industriesway...
+
+STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Openway ethay andscapinglay oolbartay otay aiseray/owerlay andlay, antplay eestray, etcway.
+STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Andscapinglay
+STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Evellay andlay
+
+
+STR_TREES_RANDOM_TYPE                                           :{BLACK}Eestray ofway andomray ypetay
+STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Aceplay eestray ofway andomray ypetay
+
+STR_CANT_BUILD_CANALS                                           :{WHITE}An'tcay uildbay analscay erehay...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Uildbay analscay.
+STR_LANDINFO_CANAL                                              :Analcay
+
+STR_CANT_BUILD_LOCKS                                            :{WHITE}An'tcay uildbay ockslay erehay...
+STR_BUILD_LOCKS_TIP                                             :{BLACK}Uildbay ockslay
+STR_LANDINFO_LOCK                                               :Ocklay
+
+STR_BUOY_IS_IN_USE                                              :{WHITE}...uoybay isway inway useway!
+
+STR_LANDINFO_COORDS                                             :{BLACK}Oordinatescay: {LTBLUE}{NUM}xay{NUM} ({STRING})
+
+STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}An'tcay emoveray artpay ofway ationstay...
+STR_CANT_CONVERT_RAIL                                           :{WHITE}An'tcay onvertcay ailtyperay erehay...
+STR_CONVERT_RAIL_TIP                                            :{BLACK}Onvertcay/Upgradeway ethay ypetay ofway ailray
+
+STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Agdray aintray engineway erehay otay ellsay ethay olewhay aintray
+
+STR_DRAG_DROP                                                   :{BLACK}Agdray & Opdray
+STR_STATION_DRAG_DROP                                           :{BLACK}Uildbay away ationstay usingway agdray & opdray
+STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Electsay away ationstay assclay otay isplayday
+STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Electsay ethay ationstay ypetay otay uildbay
+
+STR_FAST_FORWARD                                                :{BLACK}Astfay orwardfay ethay amegay
+STR_MESSAGE_HISTORY                                             :{WHITE}Essagemay Istoryhay
+STR_MESSAGE_HISTORY_TIP                                         :{BLACK}Away istlay ofway ethay ecentray ewsnay essagesmay
+STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Isableday allway
+STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Enableway allway
+
+STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Onstructcay Oalcay Inemay
+STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Antplay Orestfay
+STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Onstructcay Oilway Igray
+STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Undfay Armfay
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Onstructcay Oppercay Oreway Inemay
+STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Illdray orfay Oilway
+STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Onstructcay Oldgay Inemay
+STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Onstructcay Iamondday Inemay
+STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Onstructcay Ironway Oreway Inemay
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Undfay Uitfray Antationplay
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Undfay Ubberray Antationplay
+STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Undfay Aterway Upplysay
+STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Antplay Andyflosscay Orestfay
+STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Undfay Atterybay Armfay
+STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Illdray orfay Olacay
+STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Undfay Asticplay Ountainsfay
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Onstructcay Ubblebay Eneratorgay
+STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Undfay Offeetay Arryquay
+STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Onstructcay Ugarsay Inemay
+
+STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Industriesway
+STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% ansportedtray)
+STR_INDUSTRYDIR_ITEM_TWO                                        :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% ansportedtray)
+STR_INDUSTRYDIR_ITEM_NOPROD                                     :{ORANGE}{INDUSTRY}
+
+STR_INDUSTRY_TOO_CLOSE                                          :{WHITE}...ootay oseclay otay anotherway industryway
+
+STR_RAIL_REFIT_VEHICLE_TO_CARRY                                 :{BLACK}Efitray aintray otay arrycay away ifferentday argocay ypetay
+STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Efitray aintray
+STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay aintray otay arrycay
+STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Efitray aintray otay arrycay ighlightedhay argocay ypetay
+STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}An'tcay efitray aintray...
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Ervicesay intervalsway areway inway ercentspay: {ORANGE}{STRING}
+STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Angechay oductionpray
+
+TEMP_AI_IN_PROGRESS                                             :{WHITE}Elcomeway otay ethay ewnay AIWAY underway evelopmentday. Ifway ouyay encounterway oblemspray, aketay away eenshotscray andway ostpay itway inway ethay orumfay.
+TEMP_AI_ACTIVATED                                               :{WHITE}Arningway: isthay ewnay AIWAY isway illstay alphaway! Urrentlycay, onlyway uckstray andway ussesbay orkway!
+TEMP_AI_MULTIPLAYER                                             :{WHITE}Arningway: implementationway isway illstay experimentalway (usingway ewnay AIWAY). Easeplay eportray anyway oblemspray otay uelighttray@openttdway.orgway.
+
+############ network gui strings
+
+STR_NETWORK_MULTIPLAYER                                         :{WHITE}Ultiplayermay
+
+STR_NETWORK_PLAYER_NAME                                         :{BLACK}Ayerplay amenay:
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Isthay isway ethay amenay otherway ayersplay illway identifyway ouyay ybay
+STR_NETWORK_CONNECTION                                          :{BLACK}Onnectioncay:
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Oosechay etweenbay anway internetway amegay orway away Ocallay Areaway Etworknay (LANay) amegay
+
+STR_NETWORK_START_SERVER                                        :{BLACK}Artstay erversay
+STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Artstay ouryay ownway erversay
+
+STR_NETWORK_GAME_NAME                                           :{BLACK}Amenay
+STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Amenay ofway ethay amegay
+STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Anguagelay, erversay ersionvay, etcway.
+STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Ickclay away amegay omfray ethay istlay otay electsay itway
+
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Indfay erversay
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Earchsay etworknay orfay away erversay
+STR_NETWORK_ADD_SERVER                                          :{BLACK}Addway erversay
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Addsway away erversay otay ethay istlay ichwhay illway alwaysway ebay eckedchay orfay unningray amesgay.
+STR_NETWORK_ENTER_IP                                            :{BLACK}Enterway ethay addressway ofway ethay osthay
+
+STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
+STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Ientsclay
+STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Ientsclay onlineway / ientsclay axmay{}Ompaniescay onlineway / ompaniescay axmay
+STR_NETWORK_GAME_INFO                                           :{SILVER}EGAMay INFOWAY
+STR_ORANGE                                                      :{ORANGE}{STRING}
+STR_NETWORK_CLIENTS                                             :{SILVER}Ientsclay:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_LANGUAGE                                            :{SILVER}Anguagelay:  {WHITE}{STRING}
+STR_NETWORK_TILESET                                             :{SILVER}Ilesettay:  {WHITE}{STRING}
+STR_NETWORK_MAP_SIZE                                            :{SILVER}Apmay izesay:  {WHITE}{COMMA}xay{COMMA}
+STR_NETWORK_SERVER_VERSION                                      :{SILVER}Erversay ersionvay:  {WHITE}{STRING}
+STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Erversay addressway:  {WHITE}{STRING} : {NUM}
+STR_NETWORK_START_DATE                                          :{SILVER}Artstay ateday:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}Urrentcay ateday:  {WHITE}{DATE_SHORT}
+STR_NETWORK_PASSWORD                                            :{SILVER}Asswordpay otectedpray!
+STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}ERVERSay OFFLINEWAY
+STR_NETWORK_SERVER_FULL                                         :{SILVER}ERVERSay ULLFay
+STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}ERSIONVay ISMATCHMay
+STR_NETWORK_GRF_MISMATCH                                        :{SILVER}EWGRFNay ISMATCHMay
+
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Oinjay amegay
+
+
+STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Artstay ewnay ultiplayermay amegay
+
+STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Amegay amenay:
+STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}Ethay amegay amenay illway ebay isplayedday otay otherway ayersplay inway ethay ultiplayermay amegay electionsay enumay
+STR_NETWORK_SET_PASSWORD                                        :{BLACK}Etsay asswordpay
+STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Otectpray ouryay amegay ithway away asswordpay ifway ouyay on'tday antway itway otay ebay ubliclypay accessibleway
+STR_NETWORK_SELECT_MAP                                          :{BLACK}Electsay away apmay:
+STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Ichwhay apmay oday ouyay antway otay ayplay?
+STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Axmay ientsclay:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Oosechay ethay aximummay umbernay ofway ientsclay. Otnay allway otsslay eednay otay ebay illedfay
+STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN                                                 :LANay
+STR_NETWORK_INTERNET                                            :Internetway
+STR_NETWORK_LAN_INTERNET                                        :LANay / Internetway
+STR_NETWORK_INTERNET_ADVERTISE                                  :Internetway (advertiseway)
+STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_0_PLAYERS                                           :0 ayersplay
+STR_NETWORK_1_PLAYERS                                           :1 ayerplay
+STR_NETWORK_2_PLAYERS                                           :2 ayersplay
+STR_NETWORK_3_PLAYERS                                           :3 ayersplay
+STR_NETWORK_4_PLAYERS                                           :4 ayersplay
+STR_NETWORK_5_PLAYERS                                           :5 ayersplay
+STR_NETWORK_6_PLAYERS                                           :6 ayersplay
+STR_NETWORK_7_PLAYERS                                           :7 ayersplay
+STR_NETWORK_8_PLAYERS                                           :8 ayersplay
+STR_NETWORK_9_PLAYERS                                           :9 ayersplay
+STR_NETWORK_10_PLAYERS                                          :10 ayersplay
+STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Axmay ompaniescay:
+STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ompaniescay
+STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Axmay ectatorsspay:
+STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ectatorsspay
+STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Anguagelay okenspay:
+STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Otherway ayersplay illway owknay ichwhay anguagelay isway okenspay onway ethay erversay
+STR_NETWORK_COMBO5                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_START_GAME                                          :{BLACK}Artstay Amegay
+STR_NETWORK_START_GAME_TIP                                      :{BLACK}Artstay away ewnay etworknay amegay omfray away andomray apmay, orway enarioscay
+STR_NETWORK_LOAD_GAME                                           :{BLACK}Oadlay Amegay
+STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Esumeray anway earlierway avedsay ultiplayermay amegay (ebay uresay otay onnectcay asway ethay orrectcay ayerplay)
+
+############ Leave those lines in this order!!
+STR_NETWORK_LANG_ANY                                            :Anyway
+STR_NETWORK_LANG_ENGLISH                                        :Englishway
+STR_NETWORK_LANG_GERMAN                                         :Ermangay
+STR_NETWORK_LANG_FRENCH                                         :Enchfray
+STR_NETWORK_LANG_BRAZILIAN                                      :Azilianbray
+STR_NETWORK_LANG_BULGARIAN                                      :Ulgarianbay
+STR_NETWORK_LANG_CHINESE                                        :Inesechay
+STR_NETWORK_LANG_CZECH                                          :Echczay
+STR_NETWORK_LANG_DANISH                                         :Anishday
+STR_NETWORK_LANG_DUTCH                                          :Utchday
+STR_NETWORK_LANG_ESPERANTO                                      :Esperantoway
+STR_NETWORK_LANG_FINNISH                                        :Innishfay
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarianhay
+STR_NETWORK_LANG_ICELANDIC                                      :Icelandicway
+STR_NETWORK_LANG_ITALIAN                                        :Italianway
+STR_NETWORK_LANG_JAPANESE                                       :Apanesejay
+STR_NETWORK_LANG_KOREAN                                         :Oreankay
+STR_NETWORK_LANG_LITHUANIAN                                     :Ithuanianlay
+STR_NETWORK_LANG_NORWEGIAN                                      :Orwegiannay
+STR_NETWORK_LANG_POLISH                                         :Olishpay
+STR_NETWORK_LANG_PORTUGUESE                                     :Ortuguesepay
+STR_NETWORK_LANG_ROMANIAN                                       :Omanianray
+STR_NETWORK_LANG_RUSSIAN                                        :Ussianray
+STR_NETWORK_LANG_SLOVAK                                         :Ovakslay
+STR_NETWORK_LANG_SLOVENIAN                                      :Ovenianslay
+STR_NETWORK_LANG_SPANISH                                        :Anishspay
+STR_NETWORK_LANG_SWEDISH                                        :Edishsway
+STR_NETWORK_LANG_TURKISH                                        :Urkishtay
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainianway
+############ End of leave-in-this-order
+
+STR_NETWORK_GAME_LOBBY                                          :{WHITE}Ultiplayermay amegay obbylay
+
+STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}Eparingpray otay oinjay:   {ORANGE}{STRING}
+STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}Away istlay ofway allway ompaniescay urrentlycay inway isthay amegay. Ouyay ancay eitherway oinjay oneway orway artstay away ewnay oneway ifway erethay isway away eefray ompanycay otslay
+STR_NETWORK_NEW_COMPANY                                         :{BLACK}Ewnay ompanycay
+STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Eatecray away ewnay ompanycay
+STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Ectatespay amegay
+STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Atchway ethay amegay asway away ectatorspay
+STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Oinjay ompanycay
+STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Elphay anagemay isthay ompanycay
+STR_NETWORK_REFRESH                                             :{BLACK}Efreshray erversay
+STR_NETWORK_REFRESH_TIP                                         :{BLACK}Efreshray ethay erversay infoway
+
+STR_NETWORK_COMPANY_INFO                                        :{SILVER}OMPANYCay INFOWAY
+
+STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ompanycay amenay:  {WHITE}{STRING}
+STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaugurationway:  {WHITE}{NUM}
+STR_NETWORK_VALUE                                               :{SILVER}Ompanycay aluevay:  {WHITE}{CURRENCY64}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Urrentcay alancebay:  {WHITE}{CURRENCY64}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Astlay ear'syay incomeway:  {WHITE}{CURRENCY64}
+STR_NETWORK_PERFORMANCE                                         :{SILVER}Erformancepay:  {WHITE}{NUM}
+
+STR_NETWORK_VEHICLES                                            :{SILVER}Ehiclesvay:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
+STR_NETWORK_STATIONS                                            :{SILVER}Ationsstay:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
+STR_NETWORK_PLAYERS                                             :{SILVER}Ayersplay:  {WHITE}{STRING}
+
+STR_NETWORK_CONNECTING                                          :{WHITE}Onnectingcay...
+
+############ Leave those lines in this order!!
+STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Onnectingcay..
+STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Authorisingway..
+STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Aitingway..
+STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Ownloadingday apmay..
+STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Ocessingpray ataday..
+STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Egisteringray..
+
+STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Etchingfay amegay infoway..
+STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Etchingfay ompanycay infoway..
+############ End of leave-in-this-order
+STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} ient{P "" s}clay inway ontfray ofway ouyay
+STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} yteskbay ownloadedday osay arfay
+
+STR_NETWORK_DISCONNECT                                          :{BLACK}Isconnectday
+
+STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Enterway ethay amountway ofway oneymay ouyay antway otay ivegay
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Erversay isway otectedpray. Enterway asswordpay
+STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Ompanycay isway otectedpray. Enterway asswordpay
+STR_NETWORK_CLIENT_LIST                                         :{WHITE}Ientclay Istlay
+
+STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE} Onay etworknay evicesday oundfay orway ompiledcay ithoutway ENABLEWAY_ETWORKNay
+STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Ouldcay otnay indfay anyway etworknay amesgay
+STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Ethay erversay idn'tday answerway ethay equestray
+STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Ouldcay otnay onnectcay ueday otay EwGRFnay ismatchmay
+STR_NETWORK_ERR_DESYNC                                          :{WHITE} Etworknay-Amegay ynchronisationsay ailedfay
+STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Etworknay-Amegay onnectioncay ostlay
+STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Ouldcay otnay oadlay avegamesay
+STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Ouldcay otnay artstay ethay erversay
+STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Ouldcay otnay onnectcay
+STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Onnectioncay #{NUM} imedtay outway
+STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE} Away otocolpray-errorway asway ademay andway ethay onnectioncay asway osedclay
+STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE} Ethay evisionray ofway isthay ientclay oesday otnay atchmay ethay erver'ssay evisionray
+STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE} Ongwray asswordpay
+STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE} Ethay erversay isway ullfay
+STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Ouyay areway annedbay omfray isthay erversay
+STR_NETWORK_ERR_KICKED                                          :{WHITE} Ouyay ereway ickedkay outway ofway ethay amegay
+STR_NETWORK_ERR_CHEATER                                         :{WHITE} Eatingchay isway otnay allowedway onway isthay erversay
+
+STR_NETWORK_ERR_LEFT                                            :ashay eftlay ethay amegay
+############ Leave those lines in this order!!
+STR_NETWORK_ERR_CLIENT_GENERAL                                  :eneralgay errorway
+STR_NETWORK_ERR_CLIENT_DESYNC                                   :esyncday errorway
+STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :ouldcay otnay oadlay apmay
+STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :onnectioncay ostlay
+STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :otocolpray errorway
+STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :EwGRFnay ismatchmay
+STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :otnay authorizedway
+STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :eceivedray angestray acketpay
+STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :ongwray evisionray
+STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :amenay alreadyway inway useway
+STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :ongwray asswordpay
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :ongwray ayerplay-idway inway OCommandday
+STR_NETWORK_ERR_CLIENT_KICKED                                   :ickedkay ybay erversay
+STR_NETWORK_ERR_CLIENT_CHEATER                                  :asway yingtray otay useway away eatchay
+STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :erversay ullfay
+############ End of leave-in-this-order
+STR_NETWORK_CLIENT_JOINED                                       :ashay oinedjay ethay amegay
+STR_NETWORK_GIVE_MONEY                                          :avegay ouryay ompanycay omesay oneymay ({CURRENCY})
+STR_NETWORK_GAVE_MONEY_AWAY                                     :ouyay avegay {STRING} omesay oneymay ({CURRENCY})
+STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Eamtay] :
+STR_NETWORK_CHAT_COMPANY                                        :[Eamtay] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_COMPANY                                     :[Eamtay] Otay {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[Ivatepray] :
+STR_NETWORK_CHAT_CLIENT                                         :[Ivatepray] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_CLIENT                                      :[Ivatepray] Otay {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_ALL_CAPTION                                    :[Allway] :
+STR_NETWORK_CHAT_ALL                                            :[Allway] {STRING}: {GRAY}{STRING}
+STR_NETWORK_NAME_CHANGE                                         :ashay angedchay ishay/erhay amenay otay
+STR_NETWORK_SERVER_SHUTDOWN                                     :{WHITE} Ethay erversay osedclay ethay essionsay
+STR_NETWORK_SERVER_REBOOT                                       :{WHITE} Ethay erversay isway estartingray...{}Easeplay aitway...
+
+STR_NETWORK_SERVER                                              :Erversay
+STR_NETWORK_CLIENT                                              :Ientclay
+STR_NETWORK_SPECTATORS                                          :Ectatorsspay
+
+STR_NETWORK_CLIENTLIST_NONE                                     :(onenay)
+STR_NETWORK_CLIENTLIST_KICK                                     :Ickkay
+STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Ivegay oneymay
+STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Eakspay otay allway
+STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Eakspay otay ompanycay
+STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Ivatepray essagemay
+
+
+STR_NETWORK_SEND                                                :{BLACK}Endsay
+
+############ end network gui strings
+
+
+STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}Xay-izesay ofway apmay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}Yay-izesay ofway apmay: {ORANGE}{STRING}
+
+
+##### PNG-MAP-Loader
+
+STR_PNGMAP_ERROR                                                :{WHITE}Annotcay oadlay andscapelay omfray PNGay...
+STR_PNGMAP_ERR_FILE_NOT_FOUND                                   :{WHITE}...ilefay otnay oundfay.
+STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ouldcay otnay onvertcay imageway ypetay. 8 orway 24-itbay PNGay imageway eedednay.
+STR_PNGMAP_ERR_MISC                                             :{WHITE}...omethingsay ustjay entway ongwray. Orrysay. (obablypray orruptedcay ilefay)
+
+STR_BMPMAP_ERROR                                                :{WHITE}Annotcay oadlay andscapelay omfray BMPay...
+STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ouldcay otnay onvertcay imageway ypetay.
+
+##id 0x0800
+STR_0800_COST                                                   :{TINYFONT}{RED}Ostcay: {CURRENCY}
+STR_0801_COST                                                   :{RED}Ostcay: {CURRENCY}
+STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Incomeway: {CURRENCY}
+STR_0803_INCOME                                                 :{GREEN}Incomeway: {CURRENCY}
+STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Ansfertray: {CURRENCY}
+STR_FEEDER                                                      :{YELLOW}Ansfertray: {CURRENCY}
+STR_0805_ESTIMATED_COST                                         :{WHITE}Estimatedway Ostcay: {CURRENCY}
+STR_0807_ESTIMATED_INCOME                                       :{WHITE}Estimatedway Incomeway: {CURRENCY}
+STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}An'tcay aiseray andlay erehay...
+STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}An'tcay owerlay andlay erehay...
+STR_080A_ROCKS                                                  :Ocksray
+STR_080B_ROUGH_LAND                                             :Oughray andlay
+STR_080C_BARE_LAND                                              :Arebay andlay
+STR_080D_GRASS                                                  :Assgray
+STR_080E_FIELDS                                                 :Ieldsfay
+STR_080F_SNOW_COVERED_LAND                                      :Owsnay-overedcay andlay
+STR_0810_DESERT                                                 :Esertday
+
+##id 0x1000
+STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Andlay opedslay inway ongwray irectionday
+STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Impossibleway acktray ombinationcay
+STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Excavationway ouldway amageday unneltay
+STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Alreadyway atway easay-evellay
+STR_1004_TOO_HIGH                                               :{WHITE}Ootay ighhay
+STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Onay uitablesay ailwayray acktray
+STR_1007_ALREADY_BUILT                                          :{WHITE}...alreadyway uiltbay
+STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Ustmay emoveray ailwayray acktray irstfay
+STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Ailwayray Onstructioncay
+STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Electrifiedway Ailwayray Onstructioncay
+STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Onorailmay Onstructioncay
+STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}AgLevmay Onstructioncay
+STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Electsay Ailray Idgebray
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}An'tcay uildbay aintray epotday erehay...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}An'tcay uildbay ailwayray ationstay erehay...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}An'tcay uildbay ignalssay erehay...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}An'tcay uildbay ailwayray acktray erehay...
+STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}An'tcay emoveray ailwayray acktray omfray erehay...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}An'tcay emoveray ignalssay omfray erehay...
+STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Aintray Epotday Orientationway
+STR_1015_RAILROAD_CONSTRUCTION                                  :Ailwayray onstructioncay
+STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Electrifiedway Ailwayray onstructioncay
+STR_1016_MONORAIL_CONSTRUCTION                                  :Onorailmay onstructioncay
+STR_1017_MAGLEV_CONSTRUCTION                                    :AgLevmay onstructioncay
+STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Uildbay ailwayray acktray
+STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Uildbay aintray epotday (orfay uildingbay andway ervicingsay ainstray)
+STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Uildbay ailwayray ationstay
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Uildbay ailwayray ignalssay
+STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Uildbay ailwayray idgebray
+STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Uildbay ailwayray unneltay
+STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Oggletay uildbay/emoveray orfay ailwayray acktray andway ignalssay
+STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Idgebray electionsay - ickclay onway ouryay eferedpray idgebray otay uildbay itway
+STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Electsay ailwayray epotday orientationway
+STR_1021_RAILROAD_TRACK                                         :Ailwayray acktray
+STR_1023_RAILROAD_TRAIN_DEPOT                                   :Ailwayray aintray epotday
+STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...areaway isway ownedway ybay anotherway ompanycay
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Ailwayray acktray ithway ormalnay ignalssay
+STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Ailwayray acktray ithway epray-ignalssay
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Ailwayray acktray ithway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Ailwayray acktray ithway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Ailwayray acktray ithway ormalnay andway epray-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Ailwayray acktray ithway ormalnay andway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Ailwayray acktray ithway ormalnay andway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Ailwayray acktray ithway epray- andway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Ailwayray acktray ithway epray- andway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Ailwayray acktray ithway exitway- andway ombocay-ignalssay
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Ustmay emoveray ailwayray ationstay irstfay
+
+
+
+##id 0x1800
+STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Ustmay emoveray oadray irstfay
+STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Oadray orksway inway ogresspray
+STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Oadray Onstructioncay
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Amwaytray Onstructioncay
+STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Electsay Oadray Idgebray
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... oneway ayway oadsray an'tcay avehay unctionsjay
+STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}An'tcay uildbay oadray erehay...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}An'tcay uildbay amwaytray erehay...
+STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}An'tcay emoveray oadray omfray erehay...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}An'tcay emoveray amwaytray omfray erehay...
+STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Oadray Epotday Orientationway
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Amtray Epotday Orientationway
+STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}An'tcay uildbay oadray ehiclevay epotday erehay...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}An'tcay uildbay amtray ehiclevay epotday erehay...
+STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}An'tcay uildbay usbay ationstay...
+STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}An'tcay uildbay orrylay ationstay...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}An'tcay uildbay assengerpay amtray ationstay...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}An'tcay uildbay eightfray amtray ationstay...
+STR_180A_ROAD_CONSTRUCTION                                      :Oadray onstructioncay
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Amwaytray onstructioncay
+STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Uildbay oadray ectionsay
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Uildbay amwaytray ectionsay
+STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Uildbay oadray ehiclevay epotday (orfay uildingbay andway ervicingsay ehiclesvay)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Uildbay amtray ehiclevay epotday (orfay uildingbay andway ervicingsay ehiclesvay)
+STR_180D_BUILD_BUS_STATION                                      :{BLACK}Uildbay usbay ationstay
+STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Uildbay orrylay oadinglay aybay
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Uildbay assengerpay amtray ationstay
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Uildbay eightfray amtray ationstay
+STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Uildbay oadray idgebray
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Uildbay amwaytray idgebray
+STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Uildbay oadray unneltay
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Uildbay amwaytray unneltay
+STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Oggletay uildbay/emoveray orfay oadray onstructioncay
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Oggletay uildbay/emoveray orfay amwaytray onstructioncay
+STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Electsay oadray ehiclevay epotday orientationway
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Electsay amtray ehiclevay epotday orientationway
+STR_1814_ROAD                                                   :Oadray
+STR_1815_ROAD_WITH_STREETLIGHTS                                 :Oadray ithway eetlightsstray
+STR_1816_TREE_LINED_ROAD                                        :Eetray-inedlay oadray
+STR_1817_ROAD_VEHICLE_DEPOT                                     :Oadray ehiclevay epotday
+STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Oadray/ailray evellay ossingcray
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}An'tcay emoveray usbay ationstay...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}An'tcay emoveray orrylay ationstay...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}An'tcay emoveray assengerpay amtray ationstay...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}An'tcay emoveray eightfray amtray ationstay...
+
+##id 0x2000
+STR_2000_TOWNS                                                  :{WHITE}Ownstay
+STR_TOWN_LABEL_POP                                              :{WHITE}{TOWN} ({COMMA})
+STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
+STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
+STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
+STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Uildingbay ustmay ebay emolishedday irstfay
+STR_2005                                                        :{WHITE}{TOWN}
+STR_2006_POPULATION                                             :{BLACK}Opulationpay: {ORANGE}{COMMA}{BLACK}  Ouseshay: {ORANGE}{COMMA}
+STR_2007_RENAME_TOWN                                            :Enameray Owntay
+STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}An'tcay enameray owntay...
+STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} ocallay authorityway efusesray otay allowway isthay
+STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Owntay amesnay - ickclay onway amenay otay entrecay iewvay onway owntay
+STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Entrecay ethay ainmay iewvay onway owntay ocationlay
+STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Angechay owntay amenay
+STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Assengerspay astlay onthmay: {ORANGE}{COMMA}{BLACK}  axmay: {ORANGE}{COMMA}
+STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Ailmay astlay onthmay: {ORANGE}{COMMA}{BLACK}  axmay: {ORANGE}{COMMA}
+STR_200F_TALL_OFFICE_BLOCK                                      :Alltay officeway ockblay
+STR_2010_OFFICE_BLOCK                                           :Officeway ockblay
+STR_2011_SMALL_BLOCK_OF_FLATS                                   :Allsmay ockblay ofway atsflay
+STR_2012_CHURCH                                                 :Urchchay
+STR_2013_LARGE_OFFICE_BLOCK                                     :Argelay officeway ockblay
+STR_2014_TOWN_HOUSES                                            :Owntay ouseshay
+STR_2015_HOTEL                                                  :Otelhay
+STR_2016_STATUE                                                 :Atuestay
+STR_2017_FOUNTAIN                                               :Ountainfay
+STR_2018_PARK                                                   :Arkpay
+STR_2019_OFFICE_BLOCK                                           :Officeway ockblay
+STR_201A_SHOPS_AND_OFFICES                                      :Opsshay andway officesway
+STR_201B_MODERN_OFFICE_BUILDING                                 :Odernmay officeway uildingbay
+STR_201C_WAREHOUSE                                              :Arehouseway
+STR_201D_OFFICE_BLOCK                                           :Officeway ockblay
+STR_201E_STADIUM                                                :Adiumstay
+STR_201F_OLD_HOUSES                                             :Oldway ouseshay
+STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Ocallay authorityway
+STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Owshay informationway onway ocallay authorityway
+STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} ocallay authorityway
+STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ansporttray ompanycay atingsray:
+STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2025_SUBSIDIES                                              :{WHITE}Ubsidiessay
+STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ubsidiessay onway offerway orfay ervicessay akingtay:
+STR_2027_FROM_TO                                                :{ORANGE}{STRING} omfray {STRING} otay {STRING}
+STR_2028_BY                                                     :{YELLOW} (ybay {DATE_SHORT})
+STR_202A_NONE                                                   :{ORANGE}Onenay
+STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Ervicessay alreadyway ubsidisedsay:
+STR_202C_FROM_TO                                                :{ORANGE}{STRING} omfray {STATION} otay {STATION}{YELLOW} ({COMPANY}
+STR_202D_UNTIL                                                  :{YELLOW}, untilway {DATE_SHORT})
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Offerway ofway ubsidysay expiredway:{}{}{STRING} omfray {STRING} otay {STRING} illway ownay otnay attractway away ubsidysay.
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Ubsidysay ithdrawnway:{}{}{STRING} ervicesay omfray {STATION} otay {STATION} isway onay ongerlay ubsidisedsay.
+STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay offeredway:{}{}Irstfay {STRING} ervicesay omfray {STRING} otay {STRING} illway attractway away ear'syay ubsidysay omfray ethay ocallay authorityway!
+STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay 50% extraway orfay ethay extnay earyay!
+STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay oubleday atesray orfay ethay extnay earyay!
+STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay ipletray atesray orfay ethay extnay earyay!
+STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay adruplequay atesray orfay ethay extnay earyay!
+STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} ocallay authorityway efusesray otay allowway anotherway airportway otay ebay uiltbay inway isthay owntay
+STR_2036_COTTAGES                                               :Ottagescay
+STR_2037_HOUSES                                                 :Ouseshay
+STR_2038_FLATS                                                  :Atsflay
+STR_2039_TALL_OFFICE_BLOCK                                      :Alltay officeway ockblay
+STR_203A_SHOPS_AND_OFFICES                                      :Opsshay andway officesway
+STR_203B_SHOPS_AND_OFFICES                                      :Opsshay andway officesway
+STR_203C_THEATER                                                :Eatrethay
+STR_203D_STADIUM                                                :Adiumstay
+STR_203E_OFFICES                                                :Officesway
+STR_203F_HOUSES                                                 :Ouseshay
+STR_2040_CINEMA                                                 :Inemacay
+STR_2041_SHOPPING_MALL                                          :Oppingshay allmay
+STR_2042_DO_IT                                                  :{BLACK}Oday itway
+STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Istlay ofway ingsthay otay oday atway isthay owntay - ickclay onway itemway orfay oremay etailsday
+STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Arrycay outway ethay ighlightedhay actionway inway ethay istlay aboveway
+STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Actionsway availableway:
+STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Allsmay advertisingway ampaigncay
+STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Ediummay advertisingway ampaigncay
+STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Argelay advertisingway ampaigncay
+STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Undfay ocallay oadray econstructionray
+STR_204A_BUILD_STATUE_OF_COMPANY                                :Uildbay atuestay ofway ompanycay ownerway
+STR_204B_FUND_NEW_BUILDINGS                                     :Undfay ewnay uildingsbay
+STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Uybay exclusiveway ansporttray ightsray
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Ibebray ethay ocallay authorityway
+STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Initiateway away allsmay ocallay advertisingway ampaigncay, otay attractway oremay assengerspay andway argocay otay ouryay ansporttray ervicessay.{}  Ostcay: {CURRENCY}
+STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Initiateway away ediummay ocallay advertisingway ampaigncay, otay attractway oremay assengerspay andway argocay otay ouryay ansporttray ervicessay.{}  Ostcay: {CURRENCY}
+STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Initiateway away argelay ocallay advertisingway ampaigncay, otay attractway oremay assengerspay andway argocay otay ouryay ansporttray ervicessay.{}  Ostcay: {CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Undfay ethay econstructionray ofway ethay urbanway oadray etworknay. Ausescay onsiderablecay isruptionday otay oadray affictray orfay upway otay 6 onthsmay.{}  Ostcay: {CURRENCY}
+STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Uildbay away atuestay inway onourhay ofway ouryay ompanycay.{} Ostcay: {CURRENCY}
+STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Undfay ethay onstructioncay ofway ewnay ommercialcay uildingsbay inway ethay owntay.{}  Ostcay: {CURRENCY}
+STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Uybay 1 ear'syay exclusiveway ansporttray ightsray inway owntay. Owntay authorityway illway onlyway allowway assengerspay andway argocay otay useway ouryay ompany'scay ationsstay.{} Ostcay: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Ibebray ethay ocallay authorityway otay increaseway ouryay atingray, atway ethay iskray ofway away everesay enaltypay ifway aughtcay.{}  Ostcay: {CURRENCY}
+STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Affictray aoschay inway {TOWN}!{}{}Oadray ebuildingray ogrammepray undedfay ybay {COMPANY} ingsbray 6 onthsmay ofway iserymay otay otoristsmay!
+STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
+STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (underway onstructioncay)
+STR_2059_IGLOO                                                  :Iglooway
+STR_205A_TEPEES                                                 :Epeestay
+STR_205B_TEAPOT_HOUSE                                           :Eapottay-Ousehay
+STR_205C_PIGGY_BANK                                             :Iggypay-Ankbay
+
+STR_INDUSTRY                                                    :{INDUSTRY}
+STR_TOWN                                                        :{TOWN}
+STR_INDUSTRY_FORMAT                                             :{TOWN} {STRING}
+STR_STATION                                                     :{STATION}
+
+##id 0x2800
+STR_LANDSCAPING                                                 :Andscapinglay
+STR_2800_PLANT_TREES                                            :Antplay eestray
+STR_2801_PLACE_SIGN                                             :Aceplay ignsay
+STR_2802_TREES                                                  :{WHITE}Eestray
+STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...eetray alreadyway erehay
+STR_2804_SITE_UNSUITABLE                                        :{WHITE}...itesay unsuitableway
+STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}An'tcay antplay eetray erehay...
+STR_2806                                                        :{WHITE}{STRING}
+STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...ootay anymay ignssay
+STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}An'tcay aceplay ignsay erehay...
+STR_280A_SIGN                                                   :Ignsay
+STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Editway ignsay exttay
+STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}An'tcay angechay ignsay amenay...
+STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Electsay eetray ypetay otay antplay
+STR_280E_TREES                                                  :Eestray
+STR_280F_RAINFOREST                                             :Ainforestray
+STR_2810_CACTUS_PLANTS                                          :Actuscay Antsplay
+
+##id 0x3000
+STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Ailray Ationstay Electionsay
+STR_3001_AIRPORT_SELECTION                                      :{WHITE}Airportway Electionsay
+STR_3002_ORIENTATION                                            :{BLACK}Orientationway
+STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Umbernay ofway ackstray
+STR_3004_PLATFORM_LENGTH                                        :{BLACK}Atformplay engthlay
+STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Ootay oseclay otay anotherway ailwayray ationstay
+STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Adjoinsway oremay anthay oneway existingway ationstay/oadinglay areaway
+STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Ootay anymay ationsstay/oadinglay areasway inway isthay owntay
+STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Ootay anymay ationsstay/oadinglay areasway
+STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Ootay anymay usbay opsstay
+STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Ootay anymay orrylay ationsstay
+STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Ootay oseclay otay anotherway ationstay/oadinglay areaway
+STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Ustmay emolishday ailwayray ationstay irstfay
+STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Ootay oseclay otay anotherway airportway
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Ustmay emolishday airportway irstfay
+
+STR_3030_RENAME_STATION_LOADING                                 :Enameray ationstay/oadinglay areaway
+STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}An'tcay enameray ationstay...
+STR_3032_RATINGS                                                :{BLACK}Atingsray
+STR_3033_ACCEPTS                                                :{BLACK}Acceptsway
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Ocallay atingray ofway ansporttray ervicesay:
+
+############ range for rating starts
+STR_3035_APPALLING                                              :Appallingway
+STR_3036_VERY_POOR                                              :Eryvay Oorpay
+STR_3037_POOR                                                   :Oorpay
+STR_3038_MEDIOCRE                                               :Ediocremay
+STR_3039_GOOD                                                   :Oodgay
+STR_303A_VERY_GOOD                                              :Eryvay Oodgay
+STR_303B_EXCELLENT                                              :Excellentway
+STR_303C_OUTSTANDING                                            :Outstandingway
+############ range for rating ends
+
+STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
+STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} onay ongerlay acceptsway {STRING}
+STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} onay ongerlay acceptsway {STRING} orway {STRING}
+STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} ownay acceptsway {STRING}
+STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} ownay acceptsway {STRING} andway {STRING}
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Usbay Ationstay Orientationway
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orrylay Ationstay Orientationway
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Assengerpay Amtray Orientationway
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Eightfray Amtray Orientationway
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Ustmay emolishday usbay ationstay irstfay
+STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Ustmay emolishday orrylay ationstay irstfay
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Ustmay emolishday assengerpay amtray ationstay irstfay
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Ustmay emolishday eightfray amtray ationstay irstfay
+STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Ation{P "" s}stay
+STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
+STR_304A_NONE                                                   :{YELLOW}- Onenay -
+STR_304B_SITE_UNSUITABLE                                        :{WHITE}...itesay unsuitableway
+STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Ootay oseclay otay anotherway ockday
+STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Ustmay emolishday ockday irstfay
+STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Electsay ailwayray ationstay orientationway
+STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Electsay umbernay ofway atformsplay orfay ailwayray ationstay
+STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Electsay engthlay ofway ailwayray ationstay
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Electsay usbay ationstay orientationway
+STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Electsay orrylay oadinglay aybay orientationway
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Electsay assengerpay amtray ationstay orientationway
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Electsay eightfray amtray ationstay orientationway
+STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Entrecay ainmay iewvay onway ationstay ocationlay
+STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Owshay ationstay atingsray
+STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Angechay amenay ofway ationstay
+STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Owshay istlay ofway acceptedway argocay
+STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Ationstay amesnay - ickclay onway amenay otay entrecay ainmay iewvay onway ationstay
+STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Electsay izesay/ypetay ofway airportway
+STR_305C_0                                                      :{STATION} {STATIONFEATURES}
+STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
+STR_305E_RAILROAD_STATION                                       :Ailwayray ationstay
+STR_305F_AIRCRAFT_HANGAR                                        :Aircraftway angarhay
+STR_3060_AIRPORT                                                :Airportway
+STR_3061_TRUCK_LOADING_AREA                                     :Orrylay oadinglay areaway
+STR_3062_BUS_STATION                                            :Usbay ationstay
+STR_3063_SHIP_DOCK                                              :Ipshay ockday
+STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Ighlighthay overagecay areaway ofway oposedpray itesay
+STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}On'tday ighlighthay overagecay areaway ofway oposedpray itesay
+STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}Overagecay areaway ighlighthay
+STR_3068_DOCK                                                   :{WHITE}Ockday
+STR_3069_BUOY                                                   :Uoybay
+STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...uoybay inway ethay ayway
+STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...ationstay ootay eadspray outway
+STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...onuniformnay ationsstay isabledday
+STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Oldhay ownday CTRLay otay electsay oremay anthay oneway itemway
+
+STR_UNDEFINED                                                   :(undefinedway ingstray)
+STR_STAT_CLASS_DFLT                                             :Efaultday ationstay
+STR_STAT_CLASS_WAYP                                             :Aypointsway
+
+##id 0x3800
+STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Ipshay Epotday Orientationway
+STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...ustmay ebay uiltbay onway aterway
+STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}An'tcay uildbay ipshay epotday erehay...
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Electsay ipshay epotday orientationway
+STR_3804_WATER                                                  :Aterway
+STR_3805_COAST_OR_RIVERBANK                                     :Oastcay orway iverbankray
+STR_3806_SHIP_DEPOT                                             :Ipshay epotday
+STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...An'tcay uildbay onway aterway
+
+##id 0x4000
+STR_4000_SAVE_GAME                                              :{WHITE}Avesay Amegay
+STR_4001_LOAD_GAME                                              :{WHITE}Oadlay Amegay
+STR_4002_SAVE                                                   :{BLACK}Avesay
+STR_4003_DELETE                                                 :{BLACK}Eleteday
+STR_4004                                                        :{COMPANY}, {DATE_LONG}
+STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} egabyte{P "" s}may eefray
+STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unableway otay eadray ivedray
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Amegay Avesay Ailedfay
+STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unableway otay eleteday ilefay
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Amegay Oadlay Ailedfay
+STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Istlay ofway ivesdray, irectoriesday andway avedsay-amegay ilesfay
+STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Urrentlycay electedsay amenay orfay avedsay-amegay
+STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eleteday ethay urrentlycay electedsay avedsay-amegay
+STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}Avesay ethay urrentcay amegay, usingway ethay electedsay amenay
+STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Electsay Ewnay Amegay Ypetay
+STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Electsay enarioscay (eengray), epray-etsay amegay (ueblay), orway andomray ewnay amegay
+STR_4010_GENERATE_RANDOM_NEW_GAME                               :Enerategay andomray ewnay amegay
+STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Oadlay Eightmaphay
+
+##id 0x4800
+STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} inway ethay ayway
+STR_4801                                                        :{WHITE}{INDUSTRY}
+STR_4802_COAL_MINE                                              :Oalcay Inemay
+STR_4803_POWER_STATION                                          :Owerpay Ationstay
+STR_4804_SAWMILL                                                :Awmillsay
+STR_4805_FOREST                                                 :Orestfay
+STR_4806_OIL_REFINERY                                           :Oilway Efineryray
+STR_4807_OIL_RIG                                                :Oilway Igray
+STR_4808_FACTORY                                                :Actoryfay
+STR_4809_PRINTING_WORKS                                         :Intingpray Orksway
+STR_480A_STEEL_MILL                                             :Eelstay Illmay
+STR_480B_FARM                                                   :Armfay
+STR_480C_COPPER_ORE_MINE                                        :Oppercay Oreway Inemay
+STR_480D_OIL_WELLS                                              :Oilway Ellsway
+STR_480E_BANK                                                   :Ankbay
+STR_480F_FOOD_PROCESSING_PLANT                                  :Oodfay Ocessingpray Antplay
+STR_4810_PAPER_MILL                                             :Aperpay Illmay
+STR_4811_GOLD_MINE                                              :Oldgay Inemay
+STR_4812_BANK                                                   :Ankbay
+STR_4813_DIAMOND_MINE                                           :Iamondday Inemay
+STR_4814_IRON_ORE_MINE                                          :Ironway Oreway Inemay
+STR_4815_FRUIT_PLANTATION                                       :Uitfray Antationplay
+STR_4816_RUBBER_PLANTATION                                      :Ubberray Antationplay
+STR_4817_WATER_SUPPLY                                           :Aterway Upplysay
+STR_4818_WATER_TOWER                                            :Aterway Owertay
+STR_4819_FACTORY                                                :Actoryfay
+STR_481A_FARM                                                   :Armfay
+STR_481B_LUMBER_MILL                                            :Umberlay Illmay
+STR_481C_COTTON_CANDY_FOREST                                    :Andyflosscay Orestfay
+STR_481D_CANDY_FACTORY                                          :Eetsway Actoryfay
+STR_481E_BATTERY_FARM                                           :Atterybay Armfay
+STR_481F_COLA_WELLS                                             :Olacay Ellsway
+STR_4820_TOY_SHOP                                               :Oytay Opshay
+STR_4821_TOY_FACTORY                                            :Oytay Actoryfay
+STR_4822_PLASTIC_FOUNTAINS                                      :Asticplay Ountainsfay
+STR_4823_FIZZY_DRINK_FACTORY                                    :Izzyfay Inkdray Actoryfay
+STR_4824_BUBBLE_GENERATOR                                       :Ubblebay Eneratorgay
+STR_4825_TOFFEE_QUARRY                                          :Offeetay Arryquay
+STR_4826_SUGAR_MINE                                             :Ugarsay Inemay
+
+############ range for requires starts
+STR_4827_REQUIRES                                               :{BLACK}Equiresray: {YELLOW}{STRING}
+STR_4828_REQUIRES                                               :{BLACK}Equiresray: {YELLOW}{STRING}, {STRING}
+STR_4829_REQUIRES                                               :{BLACK}Equiresray: {YELLOW}{STRING}, {STRING}, {STRING}
+############ range for requires ends
+
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Oductionpray astlay onthmay:
+STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% ansportedtray)
+STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Entrecay ethay ainmay iewvay onway industryway ocationlay
+STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Ewnay {STRING} underway onstructioncay earnay {TOWN}!
+STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Ewnay {STRING} eingbay antedplay earnay {TOWN}!
+STR_482F_COST                                                   :{BLACK}Ostcay: {YELLOW}{CURRENCY}
+STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}An'tcay onstructcay isthay industryway ypetay erehay...
+STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...orestfay ancay onlyway ebay antedplay aboveway owsnay-inelay
+STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} announcesway imminentway osureclay!
+STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Upplysay oblemspray ausecay {INDUSTRY} otay announceway imminentway osureclay!
+STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}Acklay ofway earbynay eestray ausescay {INDUSTRY} otay announceway imminentway osureclay!
+STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} increasesway oductionpray!
+STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}Ewnay oalcay eamsay oundfay atway {INDUSTRY}!{}Oductionpray isway expectedway otay oubleday!
+STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}Ewnay oilway eservesray oundfay atway {INDUSTRY}!{}Oductionpray isway expectedway otay oubleday!
+STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}Improvedway armingfay ethodsmay atway {INDUSTRY} areway expectedway otay oubleday oductionpray!
+STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY} oductionpray ownday ybay 50%
+STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}Insectway infestationway ausescay avochay atway {INDUSTRY}!{}Oductionpray ownday ybay 50%
+STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...ancay onlyway ebay ositionedpay earnay edgesway ofway apmay
+STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}{STRING} oductionpray atway {INDUSTRY} increasesway {COMMA}%!
+STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}{STRING} oductionpray atway {INDUSTRY} ecreasesday {COMMA}%!
+
+##id 0x5000
+STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Aintray inway unneltay
+STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Oadray ehiclevay inway unneltay
+STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Anotherway unneltay inway ethay ayway
+STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Unableway otay excavateway andlay orfay otherway endway ofway unneltay
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Ustmay emolishday unneltay irstfay
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Ustmay emolishday idgebray irstfay
+STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Annotcay artstay andway endway inway ethay amesay otspay
+STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Evellay andlay orway aterway equiredray underway idgebray
+STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Artstay andway endway ustmay ebay inway inelay
+STR_500B_SITE_UNSUITABLE_FOR_TUNNEL                             :{WHITE}Itesay unsuitableway orfay unneltay entranceway
+STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
+STR_500E_SUSPENSION_STEEL                                       :Uspensionsay, Eelstay
+STR_500F_GIRDER_STEEL                                           :Irdergay, Eelstay
+STR_5010_CANTILEVER_STEEL                                       :Antilevercay, Eelstay
+STR_5011_SUSPENSION_CONCRETE                                    :Uspensionsay, Oncretecay
+STR_5012_WOODEN                                                 :Oodenway
+STR_5013_CONCRETE                                               :Oncretecay
+STR_5014_TUBULAR_STEEL                                          :Ubulartay, Eelstay
+STR_BRIDGE_TUBULAR_SILICON                                      :Ubulartay, Iliconsay
+STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}An'tcay uildbay idgebray erehay...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}An'tcay uildbay unneltay erehay...
+STR_5017_RAILROAD_TUNNEL                                        :Ailwayray unneltay
+STR_5018_ROAD_TUNNEL                                            :Oadray unneltay
+STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Eelstay uspensionsay ailray idgebray
+STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Eelstay irdergay ailray idgebray
+STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Eelstay antilevercay ailray idgebray
+STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Einforcedray oncretecay uspensionsay ailray idgebray
+STR_501F_WOODEN_RAIL_BRIDGE                                     :Oodenway ailray idgebray
+STR_5020_CONCRETE_RAIL_BRIDGE                                   :Oncretecay ailray idgebray
+STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Eelstay uspensionsay oadray idgebray
+STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Eelstay irdergay oadray idgebray
+STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Eelstay antilevercay oadray idgebray
+STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Einforcedray oncretecay uspensionsay oadray idgebray
+STR_5025_WOODEN_ROAD_BRIDGE                                     :Oodenway oadray idgebray
+STR_5026_CONCRETE_ROAD_BRIDGE                                   :Oncretecay oadray idgebray
+STR_5027_TUBULAR_RAIL_BRIDGE                                    :Ubulartay ailray idgebray
+STR_5028_TUBULAR_ROAD_BRIDGE                                    :Ubulartay oadray idgebray
+
+##id 0x5800
+STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Objectway inway ethay ayway
+STR_5801_TRANSMITTER                                            :Ansmittertray
+STR_5802_LIGHTHOUSE                                             :Ighthouselay
+STR_5803_COMPANY_HEADQUARTERS                                   :Ompanycay Eadquartershay
+STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...ompanycay eadquartershay inway ethay ayway
+STR_5805_COMPANY_OWNED_LAND                                     :Ompanycay-ownedway andlay
+STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}An'tcay urchasepay isthay andlay areaway...
+STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...ouyay alreadyway ownway itway!
+
+
+############ WARNING, using range 0x6000 for strings that are stored in the savegame
+############ These strings may never get a new id, or savegames will break!
+##id 0x6000
+STR_SV_EMPTY                                                    :
+STR_SV_UNNAMED                                                  :Unnamedway
+STR_SV_TRAIN_NAME                                               :Aintray {COMMA}
+STR_SV_ROADVEH_NAME                                             :Oadray Ehiclevay {COMMA}
+STR_SV_SHIP_NAME                                                :Ipshay {COMMA}
+STR_SV_AIRCRAFT_NAME                                            :Aircraftway {COMMA}
+
+STR_SV_STNAME                                                   :{STRING}
+STR_SV_STNAME_NORTH                                             :{STRING} Orthnay
+STR_SV_STNAME_SOUTH                                             :{STRING} Outhsay
+STR_SV_STNAME_EAST                                              :{STRING} Eastway
+STR_SV_STNAME_WEST                                              :{STRING} Estway
+STR_SV_STNAME_CENTRAL                                           :{STRING} Entralcay
+STR_SV_STNAME_TRANSFER                                          :{STRING} Ansfertray
+STR_SV_STNAME_HALT                                              :{STRING} Althay
+STR_SV_STNAME_VALLEY                                            :{STRING} Alleyvay
+STR_SV_STNAME_HEIGHTS                                           :{STRING} Eightshay
+STR_SV_STNAME_WOODS                                             :{STRING} Oodsway
+STR_SV_STNAME_LAKESIDE                                          :{STRING} Akesidelay
+STR_SV_STNAME_EXCHANGE                                          :{STRING} Exchangeway
+STR_SV_STNAME_AIRPORT                                           :{STRING} Airportway
+STR_SV_STNAME_OILFIELD                                          :{STRING} Oilfieldway
+STR_SV_STNAME_MINES                                             :{STRING} Inesmay
+STR_SV_STNAME_DOCKS                                             :{STRING} Ocksday
+STR_SV_STNAME_BUOY_1                                            :{STRING} Uoybay 1
+STR_SV_STNAME_BUOY_2                                            :{STRING} Uoybay 2
+STR_SV_STNAME_BUOY_3                                            :{STRING} Uoybay 3
+STR_SV_STNAME_BUOY_4                                            :{STRING} Uoybay 4
+STR_SV_STNAME_BUOY_5                                            :{STRING} Uoybay 5
+STR_SV_STNAME_BUOY_6                                            :{STRING} Uoybay 6
+STR_SV_STNAME_BUOY_7                                            :{STRING} Uoybay 7
+STR_SV_STNAME_BUOY_8                                            :{STRING} Uoybay 8
+STR_SV_STNAME_BUOY_9                                            :{STRING} Uoybay 9
+STR_SV_STNAME_ANNEXE                                            :{STRING} Annexeway
+STR_SV_STNAME_SIDINGS                                           :{STRING} Idingssay
+STR_SV_STNAME_BRANCH                                            :{STRING} Anchbray
+STR_SV_STNAME_UPPER                                             :Upperway {STRING}
+STR_SV_STNAME_LOWER                                             :Owerlay {STRING}
+STR_SV_STNAME_HELIPORT                                          :{STRING} Eliporthay
+STR_SV_STNAME_FOREST                                            :{STRING} Orestfay
+
+STR_SV_GROUP_NAME                                               :{GROUP}
+
+############ end of savegame specific region!
+
+##id 0x6800
+STR_6800_DIFFICULTY_LEVEL                                       :{WHITE}Ifficultyday Evellay
+STR_OPTIONS_SAVE_CHANGES                                        :{BLACK}Avesay
+
+############ range for difficulty levels starts
+STR_6801_EASY                                                   :{BLACK}Easyway
+STR_6802_MEDIUM                                                 :{BLACK}Ediummay
+STR_6803_HARD                                                   :{BLACK}Ardhay
+STR_6804_CUSTOM                                                 :{BLACK}Ustomcay
+############ range for difficulty levels ends
+
+############ range for difficulty settings starts
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Aximummay onay. ompetitorscay: {ORANGE}{COMMA}
+STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Ompetitorcay artstay imetay: {ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Onay. ofway ownstay: {ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Onay. ofway industriesway: {ORANGE}{STRING}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Aximummay initialway oanlay: {ORANGE}{CURRENCY}
+STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Initialway interestway ateray: {ORANGE}{COMMA}%
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Ehiclevay unningray ostscay: {ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Onstructioncay eedspay ofway ompetitorscay: {ORANGE}{STRING}
+STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Intelligenceway ofway ompetitorscay: {ORANGE}{STRING}
+STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Ehiclevay eakdownsbray: {ORANGE}{STRING}
+STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Ubsidysay ultipliermay: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Ostcay ofway onstructioncay: {ORANGE}{STRING}
+STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Erraintay ypetay: {ORANGE}{STRING}
+STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Antityquay ofway easay/akeslay: {ORANGE}{STRING}
+STR_6813_ECONOMY                                                :{LTBLUE}Economyway: {ORANGE}{STRING}
+STR_6814_TRAIN_REVERSING                                        :{LTBLUE}Aintray eversingray: {ORANGE}{STRING}
+STR_6815_DISASTERS                                              :{LTBLUE}Isastersday: {ORANGE}{STRING}
+STR_16816_CITY_APPROVAL                                         :{LTBLUE}Itycay ouncil'scay attitudeway owardstay areaway estructuringray: {ORANGE}{STRING}
+############ range for difficulty settings ends
+
+STR_26816_NONE                                                  :Onenay
+STR_NUM_VERY_LOW                                                :Eryvay owlay
+STR_6816_LOW                                                    :Owlay
+STR_6817_NORMAL                                                 :Ormalnay
+STR_6818_HIGH                                                   :Ighhay
+STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
+STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
+STR_681B_VERY_SLOW                                              :Eryvay Owslay
+STR_681C_SLOW                                                   :Owslay
+STR_681D_MEDIUM                                                 :Ediummay
+STR_681E_FAST                                                   :Astfay
+STR_681F_VERY_FAST                                              :Eryvay Astfay
+STR_VERY_LOW                                                    :Eryvay Owlay
+STR_6820_LOW                                                    :Owlay
+STR_6821_MEDIUM                                                 :Ediummay
+STR_6822_HIGH                                                   :Ighhay
+STR_6823_NONE                                                   :Onenay
+STR_6824_REDUCED                                                :Educedray
+STR_6825_NORMAL                                                 :Ormalnay
+STR_6826_X1_5                                                   :xay1.5
+STR_6827_X2                                                     :xay2
+STR_6828_X3                                                     :xay3
+STR_6829_X4                                                     :xay4
+STR_682A_VERY_FLAT                                              :Eryvay Atflay
+STR_682B_FLAT                                                   :Atflay
+STR_682C_HILLY                                                  :Illyhay
+STR_682D_MOUNTAINOUS                                            :Ountainousmay
+STR_682E_STEADY                                                 :Eadystay
+STR_682F_FLUCTUATING                                            :Uctuatingflay
+STR_6830_IMMEDIATE                                              :Immediateway
+STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 onthsmay afterway ayerplay
+STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 onthsmay afterway ayerplay
+STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 onthsmay afterway ayerplay
+STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Atway endway ofway inelay, andway atway ationsstay
+STR_6835_AT_END_OF_LINE_ONLY                                    :Atway endway ofway inelay onlyway
+STR_6836_OFF                                                    :Offway
+STR_6837_ON                                                     :Onway
+STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Owshay ihay-orescay artchay
+STR_6839_PERMISSIVE                                             :Ermissivepay
+STR_683A_TOLERANT                                               :Oleranttay
+STR_683B_HOSTILE                                                :Ostilehay
+
+##id 0x7000
+STR_7000                                                        :
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7002_PLAYER                                                 :(Ayerplay {COMMA})
+STR_7004_NEW_FACE                                               :{BLACK}Ewnay Acefay
+STR_7005_COLOR_SCHEME                                           :{BLACK}Olourcay Emeschay
+STR_7006_COLOR_SCHEME                                           :{GOLD}Olourcay Emeschay:
+STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Ewnay Olourcay Emeschay
+STR_7008_COMPANY_NAME                                           :{BLACK}Ompanycay Amenay
+STR_7009_PRESIDENT_NAME                                         :{BLACK}Anagermay Amenay
+STR_700A_COMPANY_NAME                                           :Ompanycay Amenay
+STR_700B_PRESIDENT_S_NAME                                       :Anager'smay Amenay
+STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}An'tcay angechay ompanycay amenay...
+STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}An'tcay angechay anager'smay amenay...
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Inancesfay {BLACK}{PLAYERNAME}
+STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Expenditureway/Incomeway
+STR_7010                                                        :{WHITE}{NUM}
+STR_7011_CONSTRUCTION                                           :{GOLD}Onstructioncay
+STR_7012_NEW_VEHICLES                                           :{GOLD}Ewnay Ehiclesvay
+STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Aintray Unningray Ostscay
+STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Oadray Ehvay. Unningray Ostscay
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Aircraftway Unningray Ostscay
+STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Ipshay Unningray Ostscay
+STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Opertypray Aintenancemay
+STR_7018_TRAIN_INCOME                                           :{GOLD}Aintray Incomeway
+STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Oadray Ehiclevay Incomeway
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Aircraftway Incomeway
+STR_701B_SHIP_INCOME                                            :{GOLD}Ipshay Incomeway
+STR_701C_LOAN_INTEREST                                          :{GOLD}Oanlay Interestway
+STR_701D_OTHER                                                  :{GOLD}Otherway
+STR_701E                                                        :{BLACK}-{CURRENCY64}
+STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_7020_TOTAL                                                  :{WHITE}Otaltay:
+STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7022_INCOME_GRAPH                                           :{WHITE}Incomeway Aphgray
+STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_7024                                                        :{COMMA}
+STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Operatingway Ofitpray Aphgray
+STR_7026_BANK_BALANCE                                           :{WHITE}Ankbay Alancebay
+STR_7027_LOAN                                                   :{WHITE}Oanlay
+STR_MAX_LOAN                                                    :{WHITE}Axmay Oanlay:  {BLACK}{CURRENCY64}
+STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_7029_BORROW                                                 :{BLACK}Orrowbay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Epayray {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...aximummay ermittedpay oanlay izesay isway {CURRENCY}
+STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}An'tcay orrowbay anyway oremay oneymay...
+STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...onay oanlay otay epayray
+STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} equiredray
+STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}An'tcay epayray oanlay...
+STR_INSUFFICIENT_FUNDS                                          :{WHITE}An'tcay ivegay awayway oneymay atthay isway oanedlay omfray ethay ankbay...
+STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Electsay ewnay acefay orfay anagermay
+STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Angechay ethay ompanycay ehiclevay iverylay
+STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Angechay ethay anager'smay amenay
+STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Angechay ethay ompanycay amenay
+STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Ickclay onway esiredday olourcay emeschay
+STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Increaseway izesay ofway oanlay
+STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Epayray artpay ofway oanlay
+STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Anagermay)
+STR_7038_INAUGURATED                                            :{GOLD}Inauguratedway: {WHITE}{NUM}
+STR_7039_VEHICLES                                               :{GOLD}Ehiclesvay:
+STR_TRAINS                                                      :{WHITE}{COMMA} ain{P "" s}tray
+STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} oadray ehicle{P "" s}vay
+STR_AIRCRAFT                                                    :{WHITE}{COMMA} aircraftway
+STR_SHIPS                                                       :{WHITE}{COMMA} ip{P "" s}shay
+STR_7042_NONE                                                   :{WHITE}Onenay
+STR_7043_FACE_SELECTION                                         :{WHITE}Acefay Electionsay
+STR_7044_MALE                                                   :{BLACK}Alemay
+STR_7045_FEMALE                                                 :{BLACK}Emalefay
+STR_7046_NEW_FACE                                               :{BLACK}Ewnay Acefay
+STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Ancelcay ewnay acefay electionsay
+STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Acceptway ewnay acefay electionsay
+STR_7049_SELECT_MALE_FACES                                      :{BLACK}Electsay alemay acesfay
+STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Electsay emalefay acesfay
+STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Enerategay andomray ewnay acefay
+STR_704C_KEY                                                    :{BLACK}Eykay
+STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Owshay eykay otay aphsgray
+STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Eykay otay ompanycay aphsgray
+STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Ickclay erehay otay oggletay ompany'scay entryway onway aphgray onway/offway
+STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Unitsway ofway argocay eliveredday
+STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ompanycay erformancepay atingsray (aximummay atingray=1000)
+STR_7052_COMPANY_VALUES                                         :{WHITE}Ompanycay aluesvay
+STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Ompanycay Eaguelay Abletay
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Ansporttray ompanycay inway oubletray!
+STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} illway ebay oldsay offway orway eclaredday ankruptbay unlessway erformancepay increasesway oonsay!
+STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Anagermay)
+STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Ansporttray ompanycay ergermay!
+STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} ashay eenbay oldsay otay {COMPANY} orfay {CURRENCY}!
+STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Eway areway ookinglay orfay away ansporttray ompanycay otay aketay-overway ourway ompanycay.{}{}Oday ouyay antway otay urchasepay {COMPANY} orfay {CURRENCY}?
+STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Ankruptbay!
+STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}{COMPANY} ashay eenbay osedclay ownday ybay editorscray andway allway assetsway oldsay offway!
+STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Ewnay ansporttray ompanycay aunchedlay!
+STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} artsstay onstructioncay earnay {TOWN}!
+STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}An'tcay uybay ompanycay...
+STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Argocay Aymentpay Atesray
+STR_7062_DAYS_IN_TRANSIT                                        :{BLACK}{TINYFONT}Aysday inway ansittray
+STR_7063_PAYMENT_FOR_DELIVERING                                 :{BLACK}{TINYFONT}Aymentpay orfay eliveringday 10 unitsway (orway 10,000 itreslay) ofway argocay away istanceday ofway 20 aressquay
+STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Oggletay aphgray orfay argocay ypetay onway/offway
+STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
+STR_7066_ENGINEER                                               :Engineerway
+STR_7067_TRAFFIC_MANAGER                                        :Affictray Anagermay
+STR_7068_TRANSPORT_COORDINATOR                                  :Ansporttray Oordinatorcay
+STR_7069_ROUTE_SUPERVISOR                                       :Outeray Upervisorsay
+STR_706A_DIRECTOR                                               :Irectorday
+STR_706B_CHIEF_EXECUTIVE                                        :Iefchay Executiveway
+STR_706C_CHAIRMAN                                               :Airmanchay
+STR_706D_PRESIDENT                                              :Esidentpray
+STR_706E_TYCOON                                                 :Ycoontay
+STR_706F_BUILD_HQ                                               :{BLACK}Uildbay HQay
+STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Uildbay ompanycay eadquartershay / iewvay ompanycay eadquartershay
+STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Ebuildray ompanycay eadquartershay elsewhereway orfay 1% ostcay ofway ompanycay aluevay
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}An'tcay uildbay ompanycay eadquartershay...
+STR_7072_VIEW_HQ                                                :{BLACK}Iewvay HQay
+STR_RELOCATE_HQ                                                 :{BLACK}Elocateray HQay
+STR_COMPANY_PASSWORD                                            :{BLACK}Asswordpay
+STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Asswordpay-otectpray ouryay ompanycay otay eventpray unauthorisedway usersway omfray oiningjay.
+STR_SET_COMPANY_PASSWORD                                        :Etsay ompanycay asswordpay
+STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Orldway Ecessionray!{}{}Inancialfay expertsway earfay orstway asway economyway umpsslay!
+STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Ecessionray Overway!{}{}Upturnway inway adetray ivesgay onfidencecay otay industriesway asway economyway engthensstray!
+STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Oggletay argelay/allsmay indowway izesay
+STR_7076_COMPANY_VALUE                                          :{GOLD}Ompanycay aluevay: {WHITE}{CURRENCY64}
+STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Uybay 25% areshay inway ompanycay
+STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Ellsay 25% areshay inway ompanycay
+STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Uybay 25% areshay inway isthay ompanycay
+STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Ellsay 25% areshay inway isthay ompanycay
+STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}An'tcay uybay 25% areshay inway isthay ompanycay...
+STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}An'tcay ellsay 25% areshay inway isthay ompanycay...
+STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% ownedway ybay {COMPANY})
+STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% ownedway ybay {COMPANY}{}   {COMMA}% ownedway ybay {COMPANY})
+STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} ashay eenbay akentay overway ybay {COMPANY}!
+STR_7080_PROTECTED                                              :{WHITE}Isthay ompanycay isway otnay oldway enoughway otay adetray aresshay etyay...
+
+STR_LIVERY_DEFAULT                                              :Andardstay Iverylay
+STR_LIVERY_STEAM                                                :Eamstay Engineway
+STR_LIVERY_DIESEL                                               :Ieselday Engineway
+STR_LIVERY_ELECTRIC                                             :Electricway Engineway
+STR_LIVERY_MONORAIL                                             :Onorailmay Engineway
+STR_LIVERY_MAGLEV                                               :Aglevmay Engineway
+STR_LIVERY_DMU                                                  :UDMay
+STR_LIVERY_EMU                                                  :EMUWAY
+STR_LIVERY_PASSENGER_WAGON_STEAM                                :Assengerpay Oachcay (Eamstay)
+STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Assengerpay Oachcay (Ieselday)
+STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Assengerpay Oachcay (Electricway)
+STR_LIVERY_FREIGHT_WAGON                                        :Eightfray Agonway
+STR_LIVERY_BUS                                                  :Usbay
+STR_LIVERY_TRUCK                                                :Orrylay
+STR_LIVERY_PASSENGER_SHIP                                       :Assengerpay Erryfay
+STR_LIVERY_FREIGHT_SHIP                                         :Eightfray Ipshay
+STR_LIVERY_HELICOPTER                                           :Elicopterhay
+STR_LIVERY_SMALL_PLANE                                          :Allsmay Aeroplaneway
+STR_LIVERY_LARGE_PLANE                                          :Argelay Aeroplaneway
+STR_LIVERY_PASSENGER_TRAM                                       :Assengerpay Amtray
+STR_LIVERY_FREIGHT_TRAM                                         :Eightfray Amtray
+
+STR_LIVERY_GENERAL_TIP                                          :{BLACK}Owshay eneralgay olourcay emesschay
+STR_LIVERY_TRAIN_TIP                                            :{BLACK}Owshay aintray olourcay emesschay
+STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Owshay oadray ehiclevay olourcay emesschay
+STR_LIVERY_SHIP_TIP                                             :{BLACK}Owshay ipshay olourcay emesschay
+STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Owshay aircraftway olourcay emesschay
+STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Oosechay ethay imarypray olourcay orfay ethay electedsay emeschay
+STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Oosechay ethay econdarysay olourcay orfay ethay electedsay emeschay
+STR_LIVERY_PANEL_TIP                                            :{BLACK}Electsay away olourcay emeschay otay angechay, orway ultiplemay emesschay ithway CTRLay+ickclay. Ickclay onway ethay oxbay otay oggletay useway ofway ethay emeschay
+
+##id 0x8000
+STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Irbykay Aulpay Anktay (Eamstay)
+STR_8001_MJS_250_DIESEL                                         :MJSay 250 (Ieselday)
+STR_8002_PLODDYPHUT_CHOO_CHOO                                   :Oddyphutplay Oochay-Oochay
+STR_8003_POWERNAUT_CHOO_CHOO                                    :Owernautpay Oochay-Oochay
+STR_8004_MIGHTYMOVER_CHOO_CHOO                                  :Ightymovermay Oochay-Oochay
+STR_8005_PLODDYPHUT_DIESEL                                      :Oddyphutplay Ieselday
+STR_8006_POWERNAUT_DIESEL                                       :Owernautpay Ieselday
+STR_8007_WILLS_2_8_0_STEAM                                      :Illsway 2-8-0 (Eamstay)
+STR_8008_CHANEY_JUBILEE_STEAM                                   :Aneychay 'Ubilee'jay (Eamstay)
+STR_8009_GINZU_A4_STEAM                                         :Inzugay 'Away4' (Eamstay)
+STR_800A_SH_8P_STEAM                                            :SHay '8P'ay (Eamstay)
+STR_800B_MANLEY_MOREL_DMU_DIESEL                                :Anleymay-Orelmay UDMay (Ieselday)
+STR_800C_DASH_DIESEL                                            :'Ash'day (Ieselday)
+STR_800D_SH_HENDRY_25_DIESEL                                    :SHay/Endryhay '25' (Ieselday)
+STR_800E_UU_37_DIESEL                                           :UUWAY '37' (Ieselday)
+STR_800F_FLOSS_47_DIESEL                                        :Ossflay '47' (Ieselday)
+STR_8010_CS_4000_DIESEL                                         :CSay 4000 (Ieselday)
+STR_8011_CS_2400_DIESEL                                         :CSay 2400 (Ieselday)
+STR_8012_CENTENNIAL_DIESEL                                      :Entennialcay (Ieselday)
+STR_8013_KELLING_3100_DIESEL                                    :Ellingkay 3100 (Ieselday)
+STR_8014_TURNER_TURBO_DIESEL                                    :Urnertay Urbotay (Ieselday)
+STR_8015_MJS_1000_DIESEL                                        :MJSay 1000 (Ieselday)
+STR_8016_SH_125_DIESEL                                          :SHay '125' (Ieselday)
+STR_8017_SH_30_ELECTRIC                                         :SHay '30' (Electricway)
+STR_8018_SH_40_ELECTRIC                                         :SHay '40' (Electricway)
+STR_8019_T_I_M_ELECTRIC                                         :'Tay.Iway.May.' (Electricway)
+STR_801A_ASIASTAR_ELECTRIC                                      :'AsiaStar'WAY (Electricway)
+STR_801B_PASSENGER_CAR                                          :Assengerpay Arriagecay
+STR_801C_MAIL_VAN                                               :Ailmay Anvay
+STR_801D_COAL_CAR                                               :Oalcay Ucktray
+STR_801E_OIL_TANKER                                             :Oilway Ankertay
+STR_801F_LIVESTOCK_VAN                                          :Ivestocklay Anvay
+STR_8020_GOODS_VAN                                              :Oodsgay Anvay
+STR_8021_GRAIN_HOPPER                                           :Aingray Opperhay
+STR_8022_WOOD_TRUCK                                             :Oodway Ucktray
+STR_8023_IRON_ORE_HOPPER                                        :Ironway Oreway Opperhay
+STR_8024_STEEL_TRUCK                                            :Eelstay Ucktray
+STR_8025_ARMORED_VAN                                            :Armouredway Anvay
+STR_8026_FOOD_VAN                                               :Oodfay Anvay
+STR_8027_PAPER_TRUCK                                            :Aperpay Ucktray
+STR_8028_COPPER_ORE_HOPPER                                      :Oppercay Oreway Opperhay
+STR_8029_WATER_TANKER                                           :Aterway Ankertay
+STR_802A_FRUIT_TRUCK                                            :Uitfray Ucktray
+STR_802B_RUBBER_TRUCK                                           :Ubberray Ucktray
+STR_802C_SUGAR_TRUCK                                            :Ugarsay Ucktray
+STR_802D_COTTON_CANDY_HOPPER                                    :Andyflosscay Opperhay
+STR_802E_TOFFEE_HOPPER                                          :Offeetay Opperhay
+STR_802F_BUBBLE_VAN                                             :Ubblebay Anvay
+STR_8030_COLA_TANKER                                            :Olacay Ankertay
+STR_8031_CANDY_VAN                                              :Eetsway Anvay
+STR_8032_TOY_VAN                                                :Oytay Anvay
+STR_8033_BATTERY_TRUCK                                          :Atterybay Ucktray
+STR_8034_FIZZY_DRINK_TRUCK                                      :Izzyfay Inkdray Ucktray
+STR_8035_PLASTIC_TRUCK                                          :Asticplay Ucktray
+STR_8036_X2001_ELECTRIC                                         :'Xay2001' (Electricway)
+STR_8037_MILLENNIUM_Z1_ELECTRIC                                 :'Illenniummay Zay1' (Electricway)
+STR_8038_WIZZOWOW_Z99                                           :Izzowowway Zay99
+STR_8039_PASSENGER_CAR                                          :Assengerpay Arriagecay
+STR_803A_MAIL_VAN                                               :Ailmay Anvay
+STR_803B_COAL_CAR                                               :Oalcay Ucktray
+STR_803C_OIL_TANKER                                             :Oilway Ankertay
+STR_803D_LIVESTOCK_VAN                                          :Ivestocklay Anvay
+STR_803E_GOODS_VAN                                              :Oodsgay Anvay
+STR_803F_GRAIN_HOPPER                                           :Aingray Opperhay
+STR_8040_WOOD_TRUCK                                             :Oodway Ucktray
+STR_8041_IRON_ORE_HOPPER                                        :Ironway Oreway Opperhay
+STR_8042_STEEL_TRUCK                                            :Eelstay Ucktray
+STR_8043_ARMORED_VAN                                            :Armouredway Anvay
+STR_8044_FOOD_VAN                                               :Oodfay Anvay
+STR_8045_PAPER_TRUCK                                            :Aperpay Ucktray
+STR_8046_COPPER_ORE_HOPPER                                      :Oppercay Oreway Opperhay
+STR_8047_WATER_TANKER                                           :Aterway Ankertay
+STR_8048_FRUIT_TRUCK                                            :Uitfray Ucktray
+STR_8049_RUBBER_TRUCK                                           :Ubberray Ucktray
+STR_804A_SUGAR_TRUCK                                            :Ugarsay Ucktray
+STR_804B_COTTON_CANDY_HOPPER                                    :Andyflosscay Opperhay
+STR_804C_TOFFEE_HOPPER                                          :Offeetay Opperhay
+STR_804D_BUBBLE_VAN                                             :Ubblebay Anvay
+STR_804E_COLA_TANKER                                            :Olacay Ankertay
+STR_804F_CANDY_VAN                                              :Eetsway Anvay
+STR_8050_TOY_VAN                                                :Oytay Anvay
+STR_8051_BATTERY_TRUCK                                          :Atterybay Ucktray
+STR_8052_FIZZY_DRINK_TRUCK                                      :Izzyfay Inkdray Ucktray
+STR_8053_PLASTIC_TRUCK                                          :Asticplay Ucktray
+STR_8054_LEV1_LEVIATHAN_ELECTRIC                                :Evlay1 'Eviathan'lay (Electricway)
+STR_8055_LEV2_CYCLOPS_ELECTRIC                                  :Evlay2 'Yclops'cay (Electricway)
+STR_8056_LEV3_PEGASUS_ELECTRIC                                  :Evlay3 'Egasus'pay (Electricway)
+STR_8057_LEV4_CHIMAERA_ELECTRIC                                 :Evlay4 'Imaera'chay (Electricway)
+STR_8058_WIZZOWOW_ROCKETEER                                     :Izzowowway Ocketeerray
+STR_8059_PASSENGER_CAR                                          :Assengerpay Arriagecay
+STR_805A_MAIL_VAN                                               :Ailmay Anvay
+STR_805B_COAL_CAR                                               :Oalcay Ucktray
+STR_805C_OIL_TANKER                                             :Oilway Ankertay
+STR_805D_LIVESTOCK_VAN                                          :Ivestocklay Anvay
+STR_805E_GOODS_VAN                                              :Oodsgay Anvay
+STR_805F_GRAIN_HOPPER                                           :Aingray Opperhay
+STR_8060_WOOD_TRUCK                                             :Oodway Ucktray
+STR_8061_IRON_ORE_HOPPER                                        :Ironway Oreway Opperhay
+STR_8062_STEEL_TRUCK                                            :Eelstay Ucktray
+STR_8063_ARMORED_VAN                                            :Armouredway Anvay
+STR_8064_FOOD_VAN                                               :Oodfay Anvay
+STR_8065_PAPER_TRUCK                                            :Aperpay Ucktray
+STR_8066_COPPER_ORE_HOPPER                                      :Oppercay Oreway Opperhay
+STR_8067_WATER_TANKER                                           :Aterway Ankertay
+STR_8068_FRUIT_TRUCK                                            :Uitfray Ucktray
+STR_8069_RUBBER_TRUCK                                           :Ubberray Ucktray
+STR_806A_SUGAR_TRUCK                                            :Ugarsay Ucktray
+STR_806B_COTTON_CANDY_HOPPER                                    :Andyflosscay Opperhay
+STR_806C_TOFFEE_HOPPER                                          :Offeetay Opperhay
+STR_806D_BUBBLE_VAN                                             :Ubblebay Anvay
+STR_806E_COLA_TANKER                                            :Olacay Ankertay
+STR_806F_CANDY_VAN                                              :Eetsway Anvay
+STR_8070_TOY_VAN                                                :Oytay Anvay
+STR_8071_BATTERY_TRUCK                                          :Atterybay Ucktray
+STR_8072_FIZZY_DRINK_TRUCK                                      :Izzyfay Inkdray Ucktray
+STR_8073_PLASTIC_TRUCK                                          :Asticplay Ucktray
+STR_8074_MPS_REGAL_BUS                                          :MPSay Egalray Usbay
+STR_8075_HEREFORD_LEOPARD_BUS                                   :Erefordhay Eopardlay Usbay
+STR_8076_FOSTER_BUS                                             :Osterfay Usbay
+STR_8077_FOSTER_MKII_SUPERBUS                                   :Osterfay IImkay Uperbussay
+STR_8078_PLODDYPHUT_MKI_BUS                                     :Oddyphutplay Imkay Usbay
+STR_8079_PLODDYPHUT_MKII_BUS                                    :Oddyphutplay IImkay Usbay
+STR_807A_PLODDYPHUT_MKIII_BUS                                   :Oddyphutplay IIImkay Usbay
+STR_807B_BALOGH_COAL_TRUCK                                      :Aloghbay Oalcay Ucktray
+STR_807C_UHL_COAL_TRUCK                                         :Uhlway Oalcay Ucktray
+STR_807D_DW_COAL_TRUCK                                          :DWay Oalcay Ucktray
+STR_807E_MPS_MAIL_TRUCK                                         :MPSay Ailmay Ucktray
+STR_807F_REYNARD_MAIL_TRUCK                                     :Eynardray Ailmay Ucktray
+STR_8080_PERRY_MAIL_TRUCK                                       :Errypay Ailmay Ucktray
+STR_8081_MIGHTYMOVER_MAIL_TRUCK                                 :IghtyMovermay Ailmay Ucktray
+STR_8082_POWERNAUGHT_MAIL_TRUCK                                 :Owernaughtpay Ailmay Ucktray
+STR_8083_WIZZOWOW_MAIL_TRUCK                                    :Izzowowway Ailmay Ucktray
+STR_8084_WITCOMBE_OIL_TANKER                                    :Itcombeway Oilway Ankertay
+STR_8085_FOSTER_OIL_TANKER                                      :Osterfay Oilway Ankertay
+STR_8086_PERRY_OIL_TANKER                                       :Errypay Oilway Ankertay
+STR_8087_TALBOTT_LIVESTOCK_VAN                                  :Albotttay Ivestocklay Anvay
+STR_8088_UHL_LIVESTOCK_VAN                                      :Uhlway Ivestocklay Anvay
+STR_8089_FOSTER_LIVESTOCK_VAN                                   :Osterfay Ivestocklay Anvay
+STR_808A_BALOGH_GOODS_TRUCK                                     :Aloghbay Oodsgay Ucktray
+STR_808B_CRAIGHEAD_GOODS_TRUCK                                  :Aigheadcray Oodsgay Ucktray
+STR_808C_GOSS_GOODS_TRUCK                                       :Ossgay Oodsgay Ucktray
+STR_808D_HEREFORD_GRAIN_TRUCK                                   :Erefordhay Aingray Ucktray
+STR_808E_THOMAS_GRAIN_TRUCK                                     :Omasthay Aingray Ucktray
+STR_808F_GOSS_GRAIN_TRUCK                                       :Ossgay Aingray Ucktray
+STR_8090_WITCOMBE_WOOD_TRUCK                                    :Itcombeway Oodway Ucktray
+STR_8091_FOSTER_WOOD_TRUCK                                      :Osterfay Oodway Ucktray
+STR_8092_MORELAND_WOOD_TRUCK                                    :Orelandmay Oodway Ucktray
+STR_8093_MPS_IRON_ORE_TRUCK                                     :MPSay Ironway Oreway Ucktray
+STR_8094_UHL_IRON_ORE_TRUCK                                     :Uhlway Ironway Oreway Ucktray
+STR_8095_CHIPPY_IRON_ORE_TRUCK                                  :Ippychay Ironway Oreway Ucktray
+STR_8096_BALOGH_STEEL_TRUCK                                     :Aloghbay Eelstay Ucktray
+STR_8097_UHL_STEEL_TRUCK                                        :Uhlway Eelstay Ucktray
+STR_8098_KELLING_STEEL_TRUCK                                    :Ellingkay Eelstay Ucktray
+STR_8099_BALOGH_ARMORED_TRUCK                                   :Aloghbay Armouredway Ucktray
+STR_809A_UHL_ARMORED_TRUCK                                      :Uhlway Armouredway Ucktray
+STR_809B_FOSTER_ARMORED_TRUCK                                   :Osterfay Armouredway Ucktray
+STR_809C_FOSTER_FOOD_VAN                                        :Osterfay Oodfay Anvay
+STR_809D_PERRY_FOOD_VAN                                         :Errypay Oodfay Anvay
+STR_809E_CHIPPY_FOOD_VAN                                        :Ippychay Oodfay Anvay
+STR_809F_UHL_PAPER_TRUCK                                        :Uhlway Aperpay Ucktray
+STR_80A0_BALOGH_PAPER_TRUCK                                     :Aloghbay Aperpay Ucktray
+STR_80A1_MPS_PAPER_TRUCK                                        :MPSay Aperpay Ucktray
+STR_80A2_MPS_COPPER_ORE_TRUCK                                   :MPSay Oppercay Oreway Ucktray
+STR_80A3_UHL_COPPER_ORE_TRUCK                                   :Uhlway Oppercay Oreway Ucktray
+STR_80A4_GOSS_COPPER_ORE_TRUCK                                  :Ossgay Oppercay Oreway Ucktray
+STR_80A5_UHL_WATER_TANKER                                       :Uhlway Aterway Ankertay
+STR_80A6_BALOGH_WATER_TANKER                                    :Aloghbay Aterway Ankertay
+STR_80A7_MPS_WATER_TANKER                                       :MPSay Aterway Ankertay
+STR_80A8_BALOGH_FRUIT_TRUCK                                     :Aloghbay Uitfray Ucktray
+STR_80A9_UHL_FRUIT_TRUCK                                        :Uhlway Uitfray Ucktray
+STR_80AA_KELLING_FRUIT_TRUCK                                    :Ellingkay Uitfray Ucktray
+STR_80AB_BALOGH_RUBBER_TRUCK                                    :Aloghbay Ubberray Ucktray
+STR_80AC_UHL_RUBBER_TRUCK                                       :Uhlway Ubberray Ucktray
+STR_80AD_RMT_RUBBER_TRUCK                                       :RMTay Ubberray Ucktray
+STR_80AE_MIGHTYMOVER_SUGAR_TRUCK                                :IghtyMovermay Ugarsay Ucktray
+STR_80AF_POWERNAUGHT_SUGAR_TRUCK                                :Owernaughtpay Ugarsay Ucktray
+STR_80B0_WIZZOWOW_SUGAR_TRUCK                                   :Izzowowway Ugarsay Ucktray
+STR_80B1_MIGHTYMOVER_COLA_TRUCK                                 :IghtyMovermay Olacay Ucktray
+STR_80B2_POWERNAUGHT_COLA_TRUCK                                 :Owernaughtpay Olacay Ucktray
+STR_80B3_WIZZOWOW_COLA_TRUCK                                    :Izzowowway Olacay Ucktray
+STR_80B4_MIGHTYMOVER_COTTON_CANDY                               :IghtyMovermay Andyflosscay Ucktray
+STR_80B5_POWERNAUGHT_COTTON_CANDY                               :Owernaughtpay Andyflosscay Ucktray
+STR_80B6_WIZZOWOW_COTTON_CANDY_TRUCK                            :Izzowowway Andyflosscay Ucktray
+STR_80B7_MIGHTYMOVER_TOFFEE_TRUCK                               :IghtyMovermay Offeetay Ucktray
+STR_80B8_POWERNAUGHT_TOFFEE_TRUCK                               :Owernaughtpay Offeetay Ucktray
+STR_80B9_WIZZOWOW_TOFFEE_TRUCK                                  :Izzowowway Offeetay Ucktray
+STR_80BA_MIGHTYMOVER_TOY_VAN                                    :IghtyMovermay Oytay Anvay
+STR_80BB_POWERNAUGHT_TOY_VAN                                    :Owernaughtpay Oytay Anvay
+STR_80BC_WIZZOWOW_TOY_VAN                                       :Izzowowway Oytay Anvay
+STR_80BD_MIGHTYMOVER_CANDY_TRUCK                                :IghtyMovermay Eetsway Ucktray
+STR_80BE_POWERNAUGHT_CANDY_TRUCK                                :Owernaughtpay Eetsway Ucktray
+STR_80BF_WIZZOWOW_CANDY_TRUCK                                   :Izzowowway Eetsway Ucktray
+STR_80C0_MIGHTYMOVER_BATTERY_TRUCK                              :IghtyMovermay Atterybay Ucktray
+STR_80C1_POWERNAUGHT_BATTERY_TRUCK                              :Owernaughtpay Atterybay Ucktray
+STR_80C2_WIZZOWOW_BATTERY_TRUCK                                 :Izzowowway Atterybay Ucktray
+STR_80C3_MIGHTYMOVER_FIZZY_DRINK                                :IghtyMovermay Izzyfay Inkdray Ucktray
+STR_80C4_POWERNAUGHT_FIZZY_DRINK                                :Owernaughtpay Izzyfay Inkdray Ucktray
+STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK                             :Izzowowway Izzyfay Inkdray Ucktray
+STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK                              :IghtyMovermay Asticplay Ucktray
+STR_80C7_POWERNAUGHT_PLASTIC_TRUCK                              :Owernaughtpay Asticplay Ucktray
+STR_80C8_WIZZOWOW_PLASTIC_TRUCK                                 :Izzowowway Asticplay Ucktray
+STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK                               :IghtyMovermay Ubblebay Ucktray
+STR_80CA_POWERNAUGHT_BUBBLE_TRUCK                               :Owernaughtpay Ubblebay Ucktray
+STR_80CB_WIZZOWOW_BUBBLE_TRUCK                                  :Izzowowway Ubblebay Ucktray
+STR_80CC_MPS_OIL_TANKER                                         :MPSay Oilway Ankertay
+STR_80CD_CS_INC_OIL_TANKER                                      :CSay-Incway. Oilway Ankertay
+STR_80CE_MPS_PASSENGER_FERRY                                    :MPSay Assengerpay Erryfay
+STR_80CF_FFP_PASSENGER_FERRY                                    :FFPay Assengerpay Erryfay
+STR_80D0_BAKEWELL_300_HOVERCRAFT                                :Akewellbay 300 Overcrafthay
+STR_80D1_CHUGGER_CHUG_PASSENGER                                 :Uggerchay-Ugchay Assengerpay Erryfay
+STR_80D2_SHIVERSHAKE_PASSENGER_FERRY                            :Ivershakeshay Assengerpay Erryfay
+STR_80D3_YATE_CARGO_SHIP                                        :Ateyay Argocay ipshay
+STR_80D4_BAKEWELL_CARGO_SHIP                                    :Akewellbay Argocay ipshay
+STR_80D5_MIGHTYMOVER_CARGO_SHIP                                 :Ightymovermay Argocay ipshay
+STR_80D6_POWERNAUT_CARGO_SHIP                                   :Owernautpay Argocay ipshay
+STR_80D7_SAMPSON_U52                                            :Ampsonsay Uway52
+STR_80D8_COLEMAN_COUNT                                          :Olemancay Ountcay
+STR_80D9_FFP_DART                                               :FFPay Artday
+STR_80DA_YATE_HAUGAN                                            :Ateyay Auganhay
+STR_80DB_BAKEWELL_COTSWALD_LB_3                                 :Akewellbay Otswaldcay LBay-3
+STR_80DC_BAKEWELL_LUCKETT_LB_8                                  :Akewellbay Uckettlay LBay-8
+STR_80DD_BAKEWELL_LUCKETT_LB_9                                  :Akewellbay Uckettlay LBay-9
+STR_80DE_BAKEWELL_LUCKETT_LB80                                  :Akewellbay Uckettlay LBay80
+STR_80DF_BAKEWELL_LUCKETT_LB_10                                 :Akewellbay Uckettlay LBay-10
+STR_80E0_BAKEWELL_LUCKETT_LB_11                                 :Akewellbay Uckettlay LBay-11
+STR_80E1_YATE_AEROSPACE_YAC_1_11                                :Ateyay Aerospaceway YACay 1-11
+STR_80E2_DARWIN_100                                             :Arwinday 100
+STR_80E3_DARWIN_200                                             :Arwinday 200
+STR_80E4_DARWIN_300                                             :Arwinday 300
+STR_80E5_DARWIN_400                                             :Arwinday 400
+STR_80E6_DARWIN_500                                             :Arwinday 500
+STR_80E7_DARWIN_600                                             :Arwinday 600
+STR_80E8_GURU_GALAXY                                            :Urugay Alaxygay
+STR_80E9_AIRTAXI_A21                                            :Airtaxiway Away21
+STR_80EA_AIRTAXI_A31                                            :Airtaxiway Away31
+STR_80EB_AIRTAXI_A32                                            :Airtaxiway Away32
+STR_80EC_AIRTAXI_A33                                            :Airtaxiway Away33
+STR_80ED_YATE_AEROSPACE_YAE46                                   :Ateyay Aerospaceway EyAay46
+STR_80EE_DINGER_100                                             :Ingerday 100
+STR_80EF_AIRTAXI_A34_1000                                       :AirTaxiway Away34-1000
+STR_80F0_YATE_Z_SHUTTLE                                         :Ateyay Zay-Uttleshay
+STR_80F1_KELLING_K1                                             :Ellingkay Kay1
+STR_80F2_KELLING_K6                                             :Ellingkay Kay6
+STR_80F3_KELLING_K7                                             :Ellingkay Kay7
+STR_80F4_DARWIN_700                                             :Arwinday 700
+STR_80F5_FFP_HYPERDART_2                                        :FFPay Yperdarthay 2
+STR_80F6_DINGER_200                                             :Ingerday 200
+STR_80F7_DINGER_1000                                            :Ingerday 1000
+STR_80F8_PLODDYPHUT_100                                         :Oddyphutplay 100
+STR_80F9_PLODDYPHUT_500                                         :Oddyphutplay 500
+STR_80FA_FLASHBANG_X1                                           :Ashbangflay Xay1
+STR_80FB_JUGGERPLANE_M1                                         :Uggerplanejay May1
+STR_80FC_FLASHBANG_WIZZER                                       :Ashbangflay Izzerway
+STR_80FD_TRICARIO_HELICOPTER                                    :Icariotray Elicopterhay
+STR_80FE_GURU_X2_HELICOPTER                                     :Urugay Xay2 Elicopterhay
+STR_80FF_POWERNAUT_HELICOPTER                                   :Owernautpay Elicopterhay
+STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Essagemay omfray ehiclevay anufacturermay
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Eway avehay ustjay esignedday away ewnay {STRING} - ouldway ouyay ebay interestedway inway away ear'syay exclusiveway useway ofway isthay ehiclevay, osay eway ancay eesay owhay itway erformspay eforebay akingmay itway universallyway availableway?
+STR_8102_RAILROAD_LOCOMOTIVE                                    :ailwayray ocomotivelay
+STR_8103_ROAD_VEHICLE                                           :oadray ehiclevay
+STR_8104_AIRCRAFT                                               :aircraftway
+STR_8105_SHIP                                                   :ipshay
+STR_8106_MONORAIL_LOCOMOTIVE                                    :onorailmay ocomotivelay
+STR_8107_MAGLEV_LOCOMOTIVE                                      :aglevmay ocomotivelay
+
+##id 0x8800
+STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Aintray Epotday
+STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay aintray arrivesway atway {STATION}!
+STR_8802_DETAILS                                                :{WHITE}{STRING} (Etailsday)
+STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Aintray inway ethay ayway
+STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
+STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_8806_GO_TO                                                  :Ogay otay {STATION}
+STR_8807_GO_TO_TRANSFER                                         :Ogay otay {STATION} (Ansfertray andway aketay argocay)
+STR_8808_GO_TO_UNLOAD                                           :Ogay otay {STATION} (Unloadway)
+STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Ogay otay {STATION} (Ansfertray andway eavelay emptyway)
+STR_880A_GO_TO_LOAD                                             :Ogay otay {STATION} (Oadlay)
+STR_880B_GO_TO_TRANSFER_LOAD                                    :Ogay otay {STATION} (Ansfertray andway aitway orfay ullfay oadlay)
+STR_880C_GO_NON_STOP_TO                                         :Ogay onnay-opstay otay {STATION}
+STR_880D_GO_TO_NON_STOP_TRANSFER                                :Ogay onnay-opstay otay {STATION} (Ansfertray andway aketay argocay)
+STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Ogay onnay-opstay otay {STATION} (Unloadway)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Ogay onnay-opstay otay {STATION} (Ansfertray andway eavelay emptyway)
+STR_8810_GO_NON_STOP_TO_LOAD                                    :Ogay onnay-opstay otay {STATION} (Oadlay)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Ogay onnay-opstay otay {STATION} (Ansfertray andway aitway orfay ullfay oadlay)
+STR_GO_TO_TRAIN_DEPOT                                           :Ogay otay {TOWN} Aintray Epotday
+STR_SERVICE_AT_TRAIN_DEPOT                                      :Ervicesay atway {TOWN} Aintray Epotday
+STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ogay onnay-opstay otay {TOWN} Aintray Epotday
+STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Ervicesay onnay-opstay atway {TOWN} Aintray Epotday
+
+STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Eadinghay orfay {TOWN} Aintray Epotday
+STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Eadinghay orfay {TOWN} Aintray Epotday, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Ervicesay atway {TOWN} Aintray Epotday
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL                         :{LTBLUE}Ervicesay atway {TOWN} Aintray Epotday, {VELOCITY}
+
+STR_INVALID_ORDER                                               :{RED} (Invalidway Orderway)
+
+STR_UNKNOWN_DESTINATION                                         :unknownway estinationday
+STR_8812_EMPTY                                                  :{LTBLUE}Emptyway
+STR_8813_FROM                                                   :{LTBLUE}{CARGO} omfray {STATION}
+STR_FROM_MULT                                                   :{LTBLUE}{CARGO} omfray {STATION} (xay{NUM})
+STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}Aintray {COMMA} isway aitingway inway epotday
+STR_8815_NEW_VEHICLES                                           :{BLACK}Ewnay Ehiclesvay
+STR_8816                                                        :{BLACK}-
+STR_8819_TRAIN_TOO_LONG                                         :{WHITE}Aintray ootay onglay
+STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Ainstray ancay onlyway ebay alteredway enwhay oppedstay insideway away epotday
+STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} Ain{P "" s}tray
+
+STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Ewnay Ailray Ehiclesvay
+STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Ewnay Electricway Ailray Ehiclesvay
+STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Ewnay Onorailmay Ehiclesvay
+STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Ewnay Aglevmay Ehiclesvay
+STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Ailray Ehiclesvay
+
+STR_881F_BUILD_VEHICLE                                          :{BLACK}Uildbay Ehiclevay
+STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Oneclay Ehiclevay
+STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}Isthay illway uildbay away opycay ofway ethay oadray ehiclevay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}Isthay illway uildbay away opycay ofway away oadray ehiclevay. Ickclay isthay uttonbay andway enthay onway away oadray ehiclevay insideway orway outsideway ethay epotday. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_TRAIN                                                 :{BLACK}Oneclay Aintray
+STR_CLONE_TRAIN_INFO                                            :{BLACK}Isthay illway uildbay away opycay ofway ethay aintray includingway allway arscay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_TRAIN_DEPOT_INFO                                      :{BLACK}Isthay illway uildbay away opycay ofway away aintray includingway allway arscay. Ickclay isthay uttonbay andway enthay onway away aintray insideway orway outsideway ethay epotday. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_8820_RENAME                                                 :{BLACK}Enameray
+STR_8823_SKIP                                                   :{BLACK}Ipskay
+STR_8824_DELETE                                                 :{BLACK}Eleteday
+STR_8825_NON_STOP                                               :{BLACK}Onnay-Opstay
+STR_8826_GO_TO                                                  :{BLACK}Ogay Otay
+STR_8827_FULL_LOAD                                              :{BLACK}Ullfay Oadlay
+STR_8828_UNLOAD                                                 :{BLACK}Unloadway
+STR_REFIT                                                       :{BLACK}Efitray
+STR_REFIT_TIP                                                   :{BLACK}Electsay atwhay argocay ypetay otay efitray otay inway isthay orderway. Ontrolcay ickclay otay emoveray efitray instructionway
+STR_REFIT_ORDER                                                 :(Efitray otay {STRING})
+STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordersway)
+STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Endway ofway Ordersway - -
+STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
+STR_SERVICE                                                     :{BLACK}Ervicesay
+STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}An'tcay uildbay ailwayray ehiclevay...
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Aluevay: {LTBLUE}{CURRENCY}
+STR_882E                                                        :{WHITE}{VEHICLE}
+STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Oadinglay / Unloadingway
+STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Aintray ustmay ebay oppedstay insideway away epotday
+STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT                              :{WHITE}An'tcay endsay aintray otay epotday...
+STR_8831_NO_MORE_SPACE_FOR_ORDERS                               :{WHITE}Onay oremay acespay orfay ordersway
+STR_8832_TOO_MANY_ORDERS                                        :{WHITE}Ootay anymay ordersway
+STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}An'tcay insertway ewnay orderway...
+STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}An'tcay eleteday isthay orderway...
+STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}An'tcay odifymay isthay orderway...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}An'tcay ovemay isthay orderway...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}An'tcay ipskay urrentcay orderway...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}An'tcay ipskay otay electedsay orderway...
+STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}An'tcay ovemay ehiclevay...
+STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Ethay earray engineway illway alwaysway ollowfay itsway ontfray ounterpartcay
+STR_8838_N_A                                                    :Nay/Away{SKIP}
+STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}An'tcay ellsay ailwayray ehiclevay...
+STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}Unableway otay indfay outeray otay ocallay epotday
+STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}An'tcay opstay/artstay aintray...
+STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}Ervicingsay intervalway: {LTBLUE}{COMMA}aysday{BLACK}   Astlay ervicesay: {LTBLUE}{DATE_LONG}
+STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}Ervicingsay intervalway: {LTBLUE}{COMMA}%{BLACK}   Astlay ervicesay: {LTBLUE}{DATE_LONG}
+STR_883D_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Ainstray - ickclay onway aintray orfay informationway
+STR_883E_BUILD_NEW_TRAINS_REQUIRES                              :{BLACK}Uildbay ewnay ainstray (equiresray aintray epotday)
+STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Ainstray - ickclay onway aintray orfay infoway., agdray ehiclevay otay addway/emoveray omfray aintray
+STR_8840_BUILD_NEW_TRAIN_VEHICLE                                :{BLACK}Uildbay ewnay aintray ehiclevay
+STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE                             :{BLACK}Agdray aintray ehiclevay otay erehay otay ellsay itway
+STR_8842_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Entrecay ainmay iewvay onway aintray epotday ocationlay
+STR_8843_TRAIN_VEHICLE_SELECTION                                :{BLACK}Aintray ehiclevay electionsay istlay - ickclay onway ehiclevay orfay informationway
+STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN                            :{BLACK}Uildbay ethay ighlightedhay aintray ehiclevay
+STR_8845_RENAME_TRAIN_VEHICLE_TYPE                              :{BLACK}Enameray aintray ehiclevay ypetay
+STR_8846_CURRENT_TRAIN_ACTION_CLICK                             :{BLACK}Urrentcay aintray actionway - ickclay erehay otay opstay/artstay aintray
+STR_8847_SHOW_TRAIN_S_ORDERS                                    :{BLACK}Owshay ain'stray ordersway
+STR_8848_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Entrecay ainmay iewvay onway ain'stray ocationlay
+STR_8849_SEND_TRAIN_TO_DEPOT                                    :{BLACK}Endsay aintray otay epotday. CTRLay+ickclay illway onlyway ervicesay
+STR_884A_FORCE_TRAIN_TO_PROCEED                                 :{BLACK}Orcefay aintray otay oceedpray ithoutway aitingway orfay ignalsay otay earclay itway
+STR_884B_REVERSE_DIRECTION_OF_TRAIN                             :{BLACK}Everseray irectionday ofway aintray
+STR_884C_SHOW_TRAIN_DETAILS                                     :{BLACK}Owshay aintray etailsday
+STR_884D_INCREASE_SERVICING_INTERVAL                            :{BLACK}Increaseway ervicingsay intervalway
+STR_884E_DECREASE_SERVICING_INTERVAL                            :{BLACK}Ecreaseday ervicingsay intervalway
+STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED                          :{BLACK}Owshay etailsday ofway argocay arriedcay
+STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES                         :{BLACK}Owshay etailsday ofway aintray ehiclesvay
+STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Owshay apacitiescay ofway eachway ehiclevay
+STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Owshay otaltay apacitycay ofway aintray, itsplay ybay argocay ypetay
+STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Ordersway istlay - ickclay onway anway orderway otay ighlighthay itway. CTRLay + ickclay ollsscray otay ethay ationstay
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Ipskay ethay urrentcay orderway, andway artstay ethay extnay. CTRLay + ickclay ipsskay otay ethay electedsay orderway
+STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Eleteday ethay ighlightedhay orderway
+STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway onnay-opstay
+STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insertway away ewnay orderway eforebay ethay ighlightedhay orderway, orway addway otay endway ofway istlay
+STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay aitway orfay away ullfay oadlay
+STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay unloadway
+STR_SERVICE_HINT                                                :{BLACK}Ipskay isthay orderway unlessway away ervicesay isway eedednay
+STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Ostcay: {CURRENCY} Eightway: {WEIGHT_S}{}Eedspay: {VELOCITY}  Owerpay: {POWER}{}Unningray Ostcay: {CURRENCY}/yray{}Apacitycay: {CARGO}
+STR_885C_BROKEN_DOWN                                            :{RED}Okenbray ownday
+STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Eightway: {LTBLUE}{WEIGHT_S}  {BLACK}Owerpay: {LTBLUE}{POWER}{BLACK} Axmay. eedspay: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Eightway: {LTBLUE}{WEIGHT_S} {BLACK}Owerpay: {LTBLUE}{POWER}{BLACK} Axmay. eedspay: {LTBLUE}{VELOCITY} {BLACK}Axmay. Tay.Eway.: {LTBLUE}{FORCE}
+STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
+STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
+STR_8861_STOPPED                                                :{RED}Oppedstay
+STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}An'tcay akemay aintray asspay ignalsay atway angerday...
+STR_8863_CRASHED                                                :{RED}Ashedcray!
+
+STR_8865_NAME_TRAIN                                             :{WHITE}Amenay aintray
+STR_8866_CAN_T_NAME_TRAIN                                       :{WHITE}An'tcay amenay aintray...
+STR_8867_NAME_TRAIN                                             :{BLACK}Amenay aintray
+STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Aintray Ashcray!{}{COMMA} ieday inway ireballfay afterway ollisioncay
+STR_8869_CAN_T_REVERSE_DIRECTION                                :{WHITE}An'tcay everseray irectionday ofway aintray...
+STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Enameray aintray ehiclevay ypetay
+STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}An'tcay enameray aintray ehiclevay ypetay...
+STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay umpday argocay
+STR_886F_TRANSFER                                               :{BLACK}Ansfertray
+
+STR_TRAIN_STOPPING                                              :{RED}Oppingstay
+STR_TRAIN_STOPPING_VEL                                          :{RED}Oppingstay, {VELOCITY}
+STR_INCOMPATIBLE_RAIL_TYPES                                     :Incompatibleway ailray ypestay
+STR_TRAIN_NO_POWER                                              :{RED}Onay owerpay
+STR_TRAIN_START_NO_CATENARY                                     :Isthay acktray ackslay atenarycay, osay ethay aintray an'tcay artstay
+
+STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Ewnay {STRING} ownay availableway!
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ewnay {STRING} ownay availableway!  -  {STRING}
+
+##id 0x9000
+STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Oadray ehiclevay inway ethay ayway
+STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_9002                                                        :{WHITE}{VEHICLE}
+STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} Oadray Ehiclevay Epotday
+STR_9004_NEW_VEHICLES                                           :{BLACK}Ewnay Ehiclesvay
+STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Ewnay Oadray Ehiclesvay
+STR_9007_BUILD_VEHICLE                                          :{BLACK}Uildbay Ehiclevay
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}An'tcay uildbay oadray ehiclevay...
+STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
+STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+STR_900E_MAX_SPEED                                              :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
+STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
+STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_9012_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
+STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...ustmay ebay oppedstay insideway away oadray ehiclevay epotday
+STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}An'tcay ellsay oadray ehiclevay...
+STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}An'tcay opstay/artstay oadray ehiclevay...
+STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}Oadray ehiclevay {COMMA} isway aitingway inway epotday
+STR_HEADING_FOR_ROAD_DEPOT                                      :{ORANGE}Eadinghay orfay {TOWN} Oadray Epotday
+STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{ORANGE}Eadinghay orfay {TOWN} Oadray Epotday, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Ervicesay atway {TOWN} Oadray Epotday
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Ervicesay atway {TOWN} Oadray Epotday, {VELOCITY}
+STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}An'tcay endsay ehiclevay otay epotday...
+STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Unableway otay indfay ocallay epotday
+STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}Oadray ehiclesvay - ickclay onway ehiclevay orfay informationway
+STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}Uildbay ewnay oadray ehiclesvay (equiresray oadray ehiclevay epotday)
+STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Urrentcay ehiclevay actionway - ickclay erehay otay opstay/artstay ehiclevay
+STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}Owshay ehicle'svay ordersway
+STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}Entrecay ainmay iewvay onway ehicle'svay ocationlay
+STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Endsay ehiclevay otay epotday. CTRLay+ickclay illway onlyway ervicesay
+STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}Orcefay ehiclevay otay urntay aroundway
+STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Owshay oadray ehiclevay etailsday
+STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}Ehiclesvay - ickclay onway ehiclevay orfay informationway
+STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Uildbay ewnay oadray ehiclevay
+STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}Agdray oadray ehiclevay otay erehay otay ellsay itway
+STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}Entrecay ainmay iewvay onway oadray ehiclevay epotday ocationlay
+STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Oadray ehiclevay electionsay istlay - ickclay onway ehiclevay orfay informationway
+STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Uildbay ethay ighlightedhay oadray ehiclevay
+STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Ostcay: {CURRENCY}{}Eedspay: {VELOCITY}{}Unningray Ostcay: {CURRENCY}/yray{}Apacitycay: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Apacitycay: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
+
+STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Amenay oadray ehiclevay
+STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}An'tcay amenay oadray ehiclevay...
+STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Amenay oadray ehiclevay
+STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay usbay arrivesway atway {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay ucktray arrivesway atway {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay assengerpay amtray arrivesway atway {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay eightfray amtray arrivesway atway {STATION}!
+STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Oadray Ehiclevay Ashcray!{}Iverdray iesday inway ireballfay afterway ollisioncay ithway aintray
+STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Oadray Ehiclevay Ashcray!{}{COMMA} ieday inway ireballfay afterway ollisioncay ithway aintray
+STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}An'tcay akemay ehiclevay urntay aroundway...
+STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}An'tcay urntay ehiclesvay onsistingcay ofway ultiplemay unitsway
+STR_9034_RENAME                                                 :{BLACK}Enameray
+STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Enameray oadray ehiclevay ypetay
+STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Enameray oadray ehiclevay ypetay
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}An'tcay enameray oadray ehiclevay ypetay...
+STR_9038_GO_TO_ROADVEH_DEPOT                                    :Ogay otay {TOWN} Oadray Ehiclevay Epotday
+STR_SERVICE_AT_ROADVEH_DEPOT                                    :Ervicesay atway {TOWN} Oadray Ehiclevay Epotday
+
+STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Efitray oadray ehiclevay otay arrycay away ifferentday argocay ypetay
+STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Efitray oadray ehiclevay
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Efitray oadray ehiclevay otay arrycay ighlightedhay argocay ypetay
+STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}An'tcay efitray oadray ehiclevay...
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay oadray ehiclevay otay arrycay
+
+##id 0x9800
+STR_9800_DOCK_CONSTRUCTION                                      :Ockday onstructioncay
+STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Ockday onstructioncay
+STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}An'tcay uildbay ockday erehay...
+STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Ipshay Epotday
+STR_9804_NEW_SHIPS                                              :{BLACK}Ewnay Ipsshay
+STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Ip{P "" s}shay
+STR_9808_NEW_SHIPS                                              :{WHITE}Ewnay Ipsshay
+STR_9809_BUILD_SHIP                                             :{BLACK}Uildbay Ipshay
+STR_CLONE_SHIP                                                  :{BLACK}Oneclay Ipshay
+STR_CLONE_SHIP_INFO                                             :{BLACK}Isthay illway uildbay away opycay ofway ethay ipshay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_SHIP_DEPOT_INFO                                       :{BLACK}Isthay illway uildbay away opycay ofway away ipshay. Ickclay isthay uttonbay andway enthay onway away ipshay insideway orway outsideway ethay epotday. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_980B_SHIP_MUST_BE_STOPPED_IN                                :{WHITE}Ipshay ustmay ebay oppedstay inway epotday
+STR_980C_CAN_T_SELL_SHIP                                        :{WHITE}An'tcay ellsay ipshay...
+STR_980D_CAN_T_BUILD_SHIP                                       :{WHITE}An'tcay uildbay ipshay...
+STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}Ipshay inway ethay ayway
+STR_980F                                                        :{WHITE}{VEHICLE}
+STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
+STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+STR_9813_MAX_SPEED                                              :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
+STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
+STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_9817_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
+STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}An'tcay opstay/artstay ipshay...
+STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}An'tcay endsay ipshay otay epotday...
+STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Unableway otay indfay ocallay epotday
+STR_HEADING_FOR_SHIP_DEPOT                                      :{ORANGE}Eadinghay orfay {TOWN} Ipshay Epotday
+STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{ORANGE}Eadinghay orfay {TOWN} Ipshay Epotday, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Ervicesay atway {TOWN} Ipshay Epotday
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Ervicesay atway {TOWN} Ipshay Epotday, {VELOCITY}
+STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Ipshay {COMMA} isway aitingway inway epotday
+STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Uildbay ipshay ockday
+STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Uildbay ipshay epotday (orfay uildingbay andway ervicingsay ipsshay)
+STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Ipsshay - ickclay onway ipshay orfay informationway
+STR_9820_BUILD_NEW_SHIP                                         :{BLACK}Uildbay ewnay ipshay
+STR_9821_DRAG_SHIP_TO_HERE_TO_SELL                              :{BLACK}Agdray ipshay otay erehay otay ellsay itway
+STR_9822_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Entrecay ainmay iewvay onway ipshay epotday ocationlay
+STR_9823_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Ipsshay - ickclay onway ipshay orfay informationway
+STR_9824_BUILD_NEW_SHIPS_REQUIRES                               :{BLACK}Uildbay ewnay ipsshay (equiresray ipshay epotday)
+STR_9825_SHIP_SELECTION_LIST_CLICK                              :{BLACK}Ipshay electionsay istlay - ickclay onway ipshay orfay informationway
+STR_9826_BUILD_THE_HIGHLIGHTED_SHIP                             :{BLACK}Uildbay ethay ighlightedhay ipshay
+STR_9827_CURRENT_SHIP_ACTION_CLICK                              :{BLACK}Urrentcay ipshay actionway - ickclay erehay otay opstay/artstay ipshay
+STR_9828_SHOW_SHIP_S_ORDERS                                     :{BLACK}Owshay ip'sshay ordersway
+STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Entrecay ainmay iewvay onway ip'sshay ocationlay
+STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}Endsay ipshay otay epotday. CTRLay+ickclay illway onlyway ervicesay
+STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Owshay ipshay etailsday
+STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Ostcay: {CURRENCY} Axmay. Eedspay: {VELOCITY}{}Apacitycay: {CARGO}{}Unningray Ostcay: {CURRENCY}/yray
+STR_982F_NAME_SHIP                                              :{BLACK}Amenay ipshay
+
+STR_9831_NAME_SHIP                                              :{WHITE}Amenay ipshay
+STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}An'tcay amenay ipshay...
+STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay ipshay arrivesway atway {STATION}!
+STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Aceplay away uoybay ichwhay ancay ebay usedway asway away aypointway
+STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}An'tcay aceplay uoybay erehay...
+STR_9836_RENAME                                                 :{BLACK}Enameray
+STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Enameray ipshay ypetay
+STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Enameray ipshay ypetay
+STR_9839_CAN_T_RENAME_SHIP_TYPE                                 :{WHITE}An'tcay enameray ipshay ypetay...
+STR_983A_REFIT_CARGO_SHIP_TO_CARRY                              :{BLACK}Efitray argocay ipshay otay arrycay away ifferentday argocay ypetay
+STR_983B_REFIT                                                  :{WHITE}{VEHICLE} (Efitray)
+STR_983C_REFIT_SHIP                                             :{BLACK}Efitray ipshay
+STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay ipshay otay arrycay
+STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}Efitray ipshay otay arrycay ighlightedhay argocay ypetay
+STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Electsay argocay ypetay otay arrycay:
+STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Ewnay apacitycay: {GOLD}{CARGO}{}{BLACK}Ostcay ofway efitray: {GOLD}{CURRENCY}
+STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}An'tcay efitray ipshay...
+STR_9842_REFITTABLE                                             :(efittableray)
+STR_GO_TO_SHIP_DEPOT                                            :Ogay otay {TOWN} Ipshay Epotday
+SERVICE_AT_SHIP_DEPOT                                           :Ervicesay atway {TOWN} Ipshay Epotday
+
+##id 0xA000
+STR_A000_AIRPORTS                                               :{WHITE}Airportsway
+STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}An'tcay uildbay airportway erehay...
+STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Aircraftway Angarhay
+STR_A003_NEW_AIRCRAFT                                           :{BLACK}Ewnay Aircraftway
+STR_CLONE_AIRCRAFT                                              :{BLACK}Oneclay Aircraftway
+STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Isthay illway uildbay away opycay ofway ethay aircraftway. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}Isthay illway uildbay away opycay ofway anway aircraftway. Ickclay isthay uttonbay andway enthay onway anway aircraftway insideway orway outsideway ethay angarhay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_A005_NEW_AIRCRAFT                                           :{WHITE}Ewnay Aircraftway
+STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Uildbay Aircraftway
+STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}An'tcay uildbay aircraftway...
+STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} Aircraftway
+STR_A00A                                                        :{WHITE}{VEHICLE}
+STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (Ordersway)
+STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
+STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+STR_A00E_MAX_SPEED                                              :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
+STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
+STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}An'tcay endsay aircraftway otay angarhay...
+STR_HEADING_FOR_HANGAR                                          :{ORANGE}Eadinghay orfay {STATION} Angarhay
+STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Eadinghay orfay {STATION} Angarhay, {VELOCITY}
+STR_HEADING_FOR_HANGAR_SERVICE                                  :{LTBLUE}Ervicesay atway {STATION} Angarhay
+STR_HEADING_FOR_HANGAR_SERVICE_VEL                              :{LTBLUE}Ervicesay atway {STATION} Angarhay, {VELOCITY}
+STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}Aircraftway {COMMA} isway aitingway inway ethay aircraftway angarhay
+STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Aircraftway inway ethay ayway
+STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}An'tcay opstay/artstay aircraftway...
+STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}Aircraftway isway inway ightflay
+STR_A019_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}, {CARGO}
+STR_A01A_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
+STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}Aircraftway ustmay ebay oppedstay inway angarhay
+STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}An'tcay ellsay aircraftway...
+STR_A01D_AIRPORT_CONSTRUCTION                                   :Airportway onstructioncay
+STR_A01E_BUILD_AIRPORT                                          :{BLACK}Uildbay airportway
+STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Aircraftway - ickclay onway aircraftway orfay informationway
+STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES                            :{BLACK}Uildbay ewnay aircraftway (equiresray airportway ithway angarhay)
+STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Aircraftway - ickclay onway aircraftway orfay informationway
+STR_A022_BUILD_NEW_AIRCRAFT                                     :{BLACK}Uildbay ewnay aircraftway
+STR_A023_DRAG_AIRCRAFT_TO_HERE_TO                               :{BLACK}Agdray aircraftway otay erehay otay ellsay itway
+STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}Entrecay ainmay iewvay onway angarhay ocationlay
+STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Aircraftway electionsay istlay - ickclay onway aircraftway orfay informationway
+STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Uildbay ethay ighlightedhay aircraftway
+STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Urrentcay aircraftway actionway - ickclay erehay otay opstay/artstay aircraftway
+STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Owshay aircraft'sway ordersway
+STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Entrecay ainmay iewvay onway aircraft'sway ocationlay
+STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Endsay aircraftway otay angarhay. CTRLay+ickclay illway onlyway ervicesay
+STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Owshay aircraftway etailsday
+STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Ostcay: {CURRENCY} Axmay. Eedspay: {VELOCITY}{}Apacitycay: {COMMA} assengerspay, {COMMA} agsbay ofway ailmay{}Unningray Ostcay: {CURRENCY}/yray
+
+STR_A030_NAME_AIRCRAFT                                          :{WHITE}Amenay aircraftway
+STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}An'tcay amenay aircraftway...
+STR_A032_NAME_AIRCRAFT                                          :{BLACK}Amenay aircraftway
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay aircraftway arrivesway atway {STATION}!
+STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Aneplay Ashcray!{}{COMMA} ieday inway ireballfay atway {STATION}
+STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Aneplay Ashcray!{}Aircraftway anray outway ofway uelfay, {COMMA} ieday inway ireballfay!
+STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
+STR_A037_RENAME                                                 :{BLACK}Enameray
+STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Enameray aircraftway ypetay
+STR_A039_RENAME_AIRCRAFT_TYPE                                   :{WHITE}Enameray aircraftway ypetay
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE                             :{WHITE}An'tcay enameray aircraftway ypetay...
+STR_A03B_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Efitray aircraftway otay arrycay away ifferentday argocay ypetay
+STR_A03C_REFIT                                                  :{WHITE}{VEHICLE} (Efitray)
+STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}Efitray aircraftway
+STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay aircraftway otay arrycay
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Efitray aircraftway otay arrycay ighlightedhay argocay ypetay
+STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Electsay argocay ypetay otay arrycay:
+STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Ewnay apacitycay: {GOLD}{STRING}{}{BLACK}Ostcay ofway efitray: {GOLD}{CURRENCY}
+STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}An'tcay efitray aircraftway...
+STR_GO_TO_AIRPORT_HANGAR                                        :Ogay otay {STATION} Angarhay
+SERVICE_AT_AIRPORT_HANGAR                                       :Ervicesay atway {STATION} Angarhay
+
+##id 0xB000
+STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Eppelinzay isasterday atway {STATION}!
+STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Oadray ehiclevay estroyedday inway 'UFO'WAY ollisioncay!
+STR_B002_OIL_REFINERY_EXPLOSION                                 :{BLACK}{BIGFONT}Oilway efineryray explosionway earnay {TOWN}!
+STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}Actoryfay estroyedday inway uspicioussay ircumstancescay earnay {TOWN}!
+STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}'UFO'WAY andslay earnay {TOWN}!
+STR_B005_COAL_MINE_SUBSIDENCE_LEAVES                            :{BLACK}{BIGFONT}Oalcay inemay ubsidencesay eaveslay ailtray ofway estructionday earnay {TOWN}!
+STR_B006_FLOOD_VEHICLE_DESTROYED                                :{BLACK}{BIGFONT}Oodsflay!{}Atway eastlay {COMMA} issingmay, esumedpray eadday afterway ignificantsay oodingflay!
+
+STR_BRIBE_FAILED                                                :{WHITE}Ouryay attemptedway ibebray ashay eenbay
+STR_BRIBE_FAILED_2                                              :{WHITE}iscoveredday ybay away egionalray investigatorway
+STR_BUILD_DATE                                                  :{BLACK}Uiltbay: {LTBLUE}{DATE_LONG}
+
+STR_PERFORMANCE_DETAIL                                          :{WHITE}Etailedday erformancepay atingray
+STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Etailday
+STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
+STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
+STR_PERFORMANCE_DETAIL_PERCENT                                  :{WHITE}{NUM}%
+SET_PERFORMANCE_DETAIL_INT                                      :{BLACK}{NUM}
+############ Those following lines need to be in this order!!
+STR_PERFORMANCE_DETAIL_VEHICLES                                 :{BLACK}Ehiclesvay:
+STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}Ationsstay:
+STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}Inmay. ofitpray:
+STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Inmay. incomeway:
+STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Axmay. incomeway:
+STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Eliveredday:
+STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Argocay:
+STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Oneymay:
+STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Oanlay:
+STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Otaltay:
+############ End of order list
+STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Umbernay ofway ehiclesvay; isthay includesway oadray ehiclesvay, ainstray, ipsshay andway aircraftway
+STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Umbernay ofway ationstay artspay. Everyway artpay ofway away ationstay (eway.gay. aintray ationstay, usbay opstay, airportway) isway ountedcay, evenway ifway eythay areway onnectedcay asway oneway ationstay
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Ethay ofitpray ofway ethay ehiclevay ithway ethay owestlay incomeway (ofway allway ehiclesvay olderway anthay 2 earsyay)
+STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Amountway ofway ashcay ademay inway ethay onthmay ithway ethay owestlay ofitpray ofway ethay astlay 12 artersquay
+STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Amountway ofway ashcay ademay inway ethay onthmay ithway ethay ighesthay ofitpray ofway ethay astlay 12 artersquay
+STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Unitsway ofway argocay eliveredday inway ethay astlay ourfay artersquay
+STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Umbernay ofway ypestay ofway argocay eliveredday inway ethay astlay arterquay
+STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Amountway ofway oneymay isthay ompanycay ashay inway ethay ankbay
+STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Ethay amountway ofway oneymay isthay ompanycay ashay akentay onway oanlay
+STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Otaltay ointspay outway ofway ossiblepay ointspay
+
+STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}EwGRFnay Ettingssay
+STR_NEWGRF_SETTINGS_CAPTION                                     :{WHITE}EwGRFnay ettingssay
+STR_NEWGRF_APPLY_CHANGES                                        :{BLACK}Applyway angeschay
+STR_NEWGRF_SET_PARAMETERS                                       :{BLACK}Etsay arameterspay
+STR_NEWGRF_TIP                                                  :{BLACK}Away istlay ofway allway ethay Ewgrfnay etssay atthay ouyay avehay installedway. Ickclay away etsay otay angechay ethay ettingssay
+STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}Erethay areway urrentlycay onay ewgrfnay ilesfay installedway! Easeplay eferray otay ethay anualmay orfay instructionsway onway installingway ewnay aphicsgray
+STR_NEWGRF_FILENAME                                             :{BLACK}Ilenamefay: {SILVER}{STRING}
+STR_NEWGRF_GRF_ID                                               :{BLACK}GRFay IDWAY: {SILVER}{STRING}
+STR_NEWGRF_MD5SUM                                               :{BLACK}MDay5umsay: {SILVER}{STRING}
+STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Ouyay areway aboutway otay akemay angeschay otay away unningray amegay; isthay ancay ashcray OpenTTDWAY.{}Areway ouyay absolutelyway uresay aboutway isthay?
+
+STR_NEWGRF_ERROR_MSG_INFO                                       :{SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}Arningway: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}Errorway: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}Atalfay: {SILVER}{STRING}
+STR_NEWGRF_ERROR_VERSION_NUMBER                                 :{STRING} illway otnay orkway ithway ethay AtchtTDPay ersionvay eportedray ybay OpenTTDWAY.
+STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{STRING} isway orfay ethay {STRING} ersionvay ofway TTDay.
+STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} isway esignedday otay ebay usedway ithway {STRING}
+STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Invalidway arameterpay orfay {STRING}: arameterpay {STRING} ({NUM})
+STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} ustmay ebay oadedlay eforebay {STRING}.
+STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} ustmay ebay oadedlay afterway {STRING}.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :ethay GRFay ilefay itway asway esignedday otay anslatetray
+
+STR_NEWGRF_ADD                                                  :{BLACK}Addway
+STR_NEWGRF_ADD_TIP                                              :{BLACK}Addway away EwGRFnay ilefay otay ethay istlay
+STR_NEWGRF_REMOVE                                               :{BLACK}Emoveray
+STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Emoveray ethay electedsay EwGRFnay ilefay omfray ethay istlay
+STR_NEWGRF_MOVEUP                                               :{BLACK}Ovemay Upway
+STR_NEWGRF_MOVEUP_TIP                                           :{BLACK}Ovemay ethay electedsay EwGRFnay ilefay upway ethay istlay
+STR_NEWGRF_MOVEDOWN                                             :{BLACK}Ovemay Ownday
+STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}Ovemay ethay electedsay EwGRFnay ilefay ownday ethay istlay
+STR_NEWGRF_FILE_TIP                                             :{BLACK}Away istlay ofway ethay EwGRFnay ilesfay atthay areway installedway. Ickclay away ilefay otay angechay itsway arameterspay
+STR_NEWGRF_PARAMETER                                            :{BLACK}Arameterspay: {SILVER}{STRING}
+STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Enterway EwGRFnay arameterspay
+STR_NEWGRF_NO_INFO                                              :{BLACK}Onay informationway availableway
+
+STR_NEWGRF_ADD_CAPTION                                          :{WHITE}Availableway EwGRFnay ilesfay
+STR_NEWGRF_ADD_FILE                                             :{BLACK}Addway otay electionsay
+STR_NEWGRF_ADD_FILE_TIP                                         :{BLACK}Addway ethay electedsay EwGRFnay ilefay otay ouryay onfigurationcay
+STR_NEWGRF_RESCAN_FILES                                         :{BLACK}Escanray ilesfay
+STR_NEWGRF_RESCAN_FILES_TIP                                     :{BLACK}Updateway ethay istlay ofway availableway EwGRFnay ilesfay
+STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}Annotcay addway ilefay: uplicateday GRFay IDWAY
+
+STR_NEWGRF_NOT_FOUND                                            :{RED}Atchingmay ilefay otnay oundfay
+STR_NEWGRF_DISABLED                                             :{RED}Isabledday
+STR_NEWGRF_COMPATIBLE_LOADED                                    :{ORANGE}Atchingmay ilefay otnay oundfay (ompatiblecay GRFay oadedlay)
+
+STR_NEWGRF_COMPATIBLE_LOAD_WARNING                              :{WHITE}Ompatiblecay GRFay(say) oadedlay orfay issingmay ilesfay
+STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Issingmay GRFay ilefay(say) avehay eenbay isabledday
+STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Issingmay GRFay ilefay(say) otay ebay ableway otay oadlay amegay
+
+STR_CURRENCY_WINDOW                                             :{WHITE}Ustomcay urrencycay
+STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Exchangeway ateray: {ORANGE}{CURRENCY} = £ {COMMA}
+STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Eparatorsay:
+STR_CURRENCY_PREFIX                                             :{LTBLUE}Efixpray:
+STR_CURRENCY_SUFFIX                                             :{LTBLUE}Uffixsay:
+STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Itchsway otay Euroway: {ORANGE}{NUM}
+STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Itchsway otay Euroway: {ORANGE}evernay
+STR_CURRENCY_PREVIEW                                            :{LTBLUE}Eviewpray: {ORANGE}{CURRENCY}
+STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}Angechay ustomcay urrencycay arameterpay
+
+STR_TRAIN                                                       :{BLACK}{TRAIN}
+STR_BUS                                                         :{BLACK}{BUS}
+STR_LORRY                                                       :{BLACK}{LORRY}
+STR_PLANE                                                       :{BLACK}{PLANE}
+STR_SHIP                                                        :{BLACK}{SHIP}
+
+STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Ain{P "" s}tray
+STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Aircraftway
+STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Ip{P "" s}shay
+
+STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Owshay allway ainstray ichwhay avehay isthay ationstay onway eirthay eduleschay
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Owshay allway oadray ehiclesvay ichwhay avehay isthay ationstay onway eirthay eduleschay
+STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Owshay allway aircraftway ichwhay avehay isthay ationstay onway eirthay eduleschay
+STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Owshay allway ipsshay ichwhay avehay isthay ationstay onway eirthay eduleschay
+
+STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Aredshay ordersway ofway {COMMA} Ehicle{P "" s}vay
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Owshay allway ehiclesvay atthay areshay isthay eduleschay
+
+### depot strings
+STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Ouyay areway aboutway otay ellsay allway ethay ehiclesvay inway ethay epotday. Areway ouyay uresay?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Ongwray epotday ypetay
+
+STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Ellsay allway ainstray inway ethay epotday
+STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Ellsay allway oadray ehiclesvay inway ethay epotday
+STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Ellsay allway ipsshay inway ethay epotday
+STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}Ellsay allway aircraftway inway ethay angarhay
+
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Etgay away istlay ofway allway ainstray ithway ethay urrentcay epotday inway eirthay ordersway
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Etgay away istlay ofway allway oadray ehiclesvay ithway ethay urrentcay epotday inway eirthay ordersway
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Etgay away istlay ofway allway ipsshay ithway ethay urrentcay epotday inway eirthay ordersway
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Etgay away istlay ofway allway aircraftway ithway anyway angarhay atway isthay airportway inway eirthay ordersway
+
+STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Autoreplaceway allway ainstray inway ethay epotday
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Autoreplaceway allway oadray ehiclesvay inway ethay epotday
+STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Autoreplaceway allway ipsshay inway ethay epotday
+STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Autoreplaceway allway aircraftway inway ethay angarhay
+
+STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - {COMMA} Ain{P "" s}tray
+STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - {COMMA} Ip{P "" s}shay
+STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - {COMMA} Aircraftway
+
+STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Eplaceray {STRING}
+STR_REPLACE_VEHICLES_START                                      :{BLACK}Artstay Eplacingray Ehiclesvay
+STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Opstay Eplacingray Ehiclesvay
+STR_NOT_REPLACING                                               :{BLACK}Otnay eplacingray
+STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Onay ehiclevay electedsay
+STR_REPLACE_HELP_LEFT_ARRAY                                     :{BLACK}Electsay ethay engineway ypetay otay eplaceray
+STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Electsay ethay ewnay engineway ypetay ouyay ouldway ikelay otay useway inway aceplay ofway ethay eftlay electedsay engineway ypetay
+STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Esspray otay opstay ethay eplacementray ofway ethay engineway ypetay electedsay onway ethay eftlay
+STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Esspray otay eginbay eplacementray ofway ethay eftlay electedsay engineway ypetay ithway ethay ightray electedsay engineway ypetay
+STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Oosechay ethay ailtyperay ouyay antway otay eplaceray enginesway orfay
+STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Isplaysday ichwhay engineway ethay eftlay electedsay engineway isway eingbay eplacedray ithway, ifway anyway
+STR_REPLACE_HELP                                                :{BLACK}Isthay allowsway ouyay otay eplaceray oneway engineway ypetay ithway anotherway ypetay, enwhay ainstray ofway ethay originalway ypetay enterway away epotday
+STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Agonway emovalray: {ORANGE}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Akemay autoreplaceway eepkay ethay engthlay ofway away aintray ethay amesay ybay emovingray agonsway (artingstay atway ethay ontfray), ifway eplacingray ethay engineway ouldway akemay ethay aintray ongerlay.
+STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Eplacingray: {ORANGE}{SKIP}{SKIP}{STRING}
+STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTALWAY EATUREFay {}Itchsway etweenbay engineway andway agonway eplacementray indowsway.{}Agonway eplacementray illway onlyway ebay oneday ifway ethay ewnay agonway ancay ebay efittedray intoway arryingcay ethay amesay ypetay ofway argocay asway ethay oldway oneway. Isthay isway eckedchay orfay eachway agonway enwhay ethay actualway eplacementray akestay aceplay.
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Ehiclevay isway otnay availableway
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Ehiclevay isway otnay availableway
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Ipshay isway otnay availableway
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aircraftway isway otnay availableway
+
+STR_ENGINES                                                     :Enginesway
+STR_WAGONS                                                      :Agonsway
+
+STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Ickclay otay opstay allway ethay ainstray insideway ethay epotday
+STR_MASS_STOP_DEPOT_ROADVEH_TIP                                 :{BLACK}Ickclay otay opstay allway ethay oadray ehiclesvay insideway ethay epotday
+STR_MASS_STOP_DEPOT_SHIP_TIP                                    :{BLACK}Ickclay otay opstay allway ethay ipsshay insideway ethay epotday
+STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Ickclay otay opstay allway ethay aircraftway insideway ethay angarhay
+
+STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Ickclay otay artstay allway ethay ainstray insideway ethay epotday
+STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Ickclay otay artstay allway ethay oadray ehiclesvay insideway ethay epotday
+STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Ickclay otay artstay allway ethay ipsshay insideway ethay epotday
+STR_MASS_START_HANGAR_TIP                                       :{BLACK}Ickclay otay artstay allway ethay aircraftway insideway ethay angarhay
+
+STR_MASS_STOP_LIST_TIP                                          :{BLACK}Ickclay otay opstay allway ethay ehiclesvay inway ethay istlay
+STR_MASS_START_LIST_TIP                                         :{BLACK}Ickclay otay artstay allway ethay ehiclesvay inway ethay istlay
+
+STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
+STR_SIGN_LIST_CAPTION                                           :{WHITE}Ignsay Istlay - {COMMA} Ign{P "" s}say
+
+STR_ORDER_REFIT_FAILED                                          :{WHITE}Orderway efitray ailurefay oppedstay {STRING} {COMMA}
+
+############ Lists rail types
+
+STR_RAIL_VEHICLES                                               :Ailray Ehiclesvay
+STR_ELRAIL_VEHICLES                                             :Electrifiedway Ailray Ehiclesvay
+STR_MONORAIL_VEHICLES                                           :Onorailmay Ehiclesvay
+STR_MAGLEV_VEHICLES                                             :Aglevmay Ehiclesvay
+
+############ End of list of rail types
+
+STR_TINY_BLACK                                                  :{BLACK}{TINYFONT}{COMMA}
+
+STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Ostcay: {GOLD}{CURRENCY}{BLACK} Eightway: {GOLD}{WEIGHT_S}
+STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Eedspay: {GOLD}{VELOCITY}{BLACK}   Owerpay: {GOLD}{POWER}
+STR_PURCHASE_INFO_SPEED                                         :{BLACK}Eedspay: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Unningray Ostcay: {GOLD}{CURRENCY}/yray
+STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Apacitycay: {GOLD}{CARGO} {STRING}
+STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Esignedday: {GOLD}{NUM}{BLACK} Ifelay: {GOLD}{COMMA} earsyay
+STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Axmay. Eliabilityray: {GOLD}{COMMA}%
+STR_PURCHASE_INFO_COST                                          :{BLACK}Ostcay: {GOLD}{CURRENCY}
+STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Eightway: {GOLD}{WEIGHT_S}  ({WEIGHT_S})
+STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Ostcay: {GOLD}{CURRENCY}{BLACK} Eedspay: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Apacitycay: {GOLD}{COMMA} assengerspay, {COMMA} agsbay ofway ailmay
+STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Oweredpay Agonsway: {GOLD}+{POWER}{BLACK} Eightway: {GOLD}+{WEIGHT_S}
+STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Efittableray otay: {GOLD}
+STR_PURCHASE_INFO_ALL_TYPES                                     :Allway argocay ypestay
+STR_PURCHASE_INFO_ALL_BUT                                       :Allway utbay {GOLD}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Axmay. Activetray Effortway: {GOLD}{FORCE}
+
+########### String for New Landscape Generator
+
+STR_GENERATE                                                    :{WHITE}Enerategay
+STR_RANDOM                                                      :{BLACK}Andomiseray
+STR_RANDOM_HELP                                                 :{BLACK}Angechay ethay andomray eedsay usedway orfay Erraintay Enerationgay
+STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Orldway enerationgay
+STR_RANDOM_SEED                                                 :{BLACK}Andomray Eedsay:
+STR_RANDOM_SEED_HELP                                            :{BLACK}Ickclay otay enterway away andomray eedsay
+STR_LAND_GENERATOR                                              :{BLACK}Andlay eneratorgay:
+STR_TREE_PLACER                                                 :{BLACK}Eetray algorithmway:
+STR_HEIGHTMAP_ROTATION                                          :{BLACK}Eightmaphay otationray:
+STR_TERRAIN_TYPE                                                :{BLACK}Erraintay ypetay:
+STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Easay evellay:
+STR_SMOOTHNESS                                                  :{BLACK}Oothnesssmay:
+STR_SNOW_LINE_HEIGHT                                            :{BLACK}Owsnay inelay eighthay:
+STR_DATE                                                        :{BLACK}Ateday:
+STR_NUMBER_OF_TOWNS                                             :{BLACK}Onay. ofway ownstay:
+STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}Onay. ofway industriesway:
+STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
+STR_SNOW_LINE_UP                                                :{BLACK}Ovemay ethay owsnay inelay eighthay oneway upway
+STR_SNOW_LINE_DOWN                                              :{BLACK}Ovemay ethay owsnay inelay eighthay oneway ownday
+STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Angechay owsnay inelay eighthay
+STR_START_DATE_QUERY_CAPT                                       :{WHITE}Angechay artingstay earyay
+STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Alescay arningway
+STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Esizingray ourcesay apmay ootay uchmay isway otnay ecommendedray. Ontinuecay ithway ethay enerationgay?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Owntay ayoutlay arningway
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Ethay owntay ayoutlay "onay oremay oadsray" isway otnay ecommendedray. Ontinuecay ithway ethay enerationgay?
+STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
+STR_HEIGHTMAP_NAME                                              :{BLACK}Eightmaphay amenay:
+STR_HEIGHTMAP_SIZE                                              :{BLACK}Izesay: {ORANGE}{NUM} xay {NUM}
+STR_GENERATION_WORLD                                            :{WHITE}Eneratinggay orldway...
+STR_GENERATION_ABORT                                            :{BLACK}Abortway
+STR_GENERATION_ABORT_CAPTION                                    :{WHITE}Abortway Orldway Enerationgay
+STR_GENERATION_ABORT_MESSAGE                                    :{YELLOW}Oday ouyay eallyray antway otay abortway ethay enerationgay?
+STR_PROGRESS                                                    :{WHITE}{NUM}% ompletecay
+STR_GENERATION_PROGRESS                                         :{BLACK}{NUM} / {NUM}
+STR_WORLD_GENERATION                                            :{BLACK}Orldway enerationgay
+STR_TREE_GENERATION                                             :{BLACK}Eetray enerationgay
+STR_UNMOVABLE_GENERATION                                        :{BLACK}Unmovableway enerationgay
+STR_CLEARING_TILES                                              :{BLACK}Oughray andway ockyray areaway enerationgay
+STR_SETTINGUP_GAME                                              :{BLACK}Ettingsay upway amegay
+STR_PREPARING_TILELOOP                                          :{BLACK}Unningray iletay-ooplay
+STR_PREPARING_GAME                                              :{BLACK}Eparingpray amegay
+STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Isthay actionway angedchay ethay ifficultyday evellay otay ustomcay
+STR_SE_FLAT_WORLD                                               :{WHITE}Atflay andlay
+STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Enerategay away atflay andlay
+STR_SE_RANDOM_LAND                                              :{WHITE}Andomray andlay
+STR_SE_NEW_WORLD                                                :{BLACK}Eatecray ewnay enarioscay
+STR_SE_CAPTION                                                  :{WHITE}Enarioscay ypetay
+STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Ovemay ethay eighthay ofway atflay andlay oneway ownday
+STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Ovemay ethay eighthay ofway atflay andlay oneway upway
+STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Angechay eighthay ofway atflay andlay
+STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Eighthay ofway atflay andlay:
+STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
+
+STR_SMALLMAP_CENTER                                             :{BLACK}Entercay ethay allmapsmay onway ethay urrentcay ositionpay
+
+########### String for new airports
+STR_SMALL_AIRPORT                                               :{BLACK}Allsmay
+STR_CITY_AIRPORT                                                :{BLACK}Itycay
+STR_METRO_AIRPORT                                               :{BLACK}Etropolitanmay airportway
+STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Internationalway airportway
+STR_COMMUTER_AIRPORT                                            :{BLACK}Ommutercay
+STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Intercontinentalway
+STR_HELIPORT                                                    :{BLACK}Eliporthay
+STR_HELIDEPOT                                                   :{BLACK}Elidepothay
+STR_HELISTATION                                                 :{BLACK}Elistationhay
+
+STR_SMALL_AIRPORTS                                              :{BLACK}Allsmay airportsway
+STR_LARGE_AIRPORTS                                              :{BLACK}Argelay airportsway
+STR_HUB_AIRPORTS                                                :{BLACK}Ubhay airportsway
+STR_HELIPORTS                                                   :{BLACK}Elicopterhay airportsway
+
+############ Tooltip measurment
+
+STR_MEASURE_LENGTH                                              :{BLACK}Engthlay: {NUM}
+STR_MEASURE_AREA                                                :{BLACK}Areaway: {NUM} xay {NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Engthlay: {NUM}{}Eighthay ifferenceday: {NUM} may
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Areaway: {NUM} xay {NUM}{}Eighthay ifferenceday: {NUM} may
+
+############ Date formatting
+STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
+STR_DATE_SHORT                                                  :{STRING} {NUM}
+STR_DATE_LONG                                                   :{STRING} {STRING} {NUM}
+
+########
+
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Ansfertray Editscray: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...isthay isway away owntay ownedway oadray
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...oadray acingfay inway ethay ongwray irectionday
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Ansparencytray Optionsway
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Oggletay ansparencytray orfay ationstay ignssay
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Oggletay ansparencytray orfay eestray
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Oggletay ansparencytray orfay ouseshay
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Oggletay ansparencytray orfay industriesway
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Oggletay ansparencytray orfay uildablesbay ikelay ationsstay, epotsday, aypointsway andway atenarycay
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Oggletay ansparencytray orfay idgesbray
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Oggletay ansparencytray orfay ucturesstray ikelay ighthouseslay andway antennasway, aybemay inway uturefay orfay eyecandyway
+
+##### Mass Order
+STR_GROUP_NAME_FORMAT                                           :Oupgray {COMMA}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Allway ainstray
+STR_GROUP_ALL_ROADS                                             :Allway oadray ehiclesvay
+STR_GROUP_ALL_SHIPS                                             :Allway ipsshay
+STR_GROUP_ALL_AIRCRAFTS                                         :Allway aircraftway
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Addway aredshay ehiclesvay
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Emoveray allway ehiclesvay
+
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Ain{P "" s}tray
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Ip{P "" s}shay
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Aircraftway
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Enameray away oupgray
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Eplaceray Ehiclesvay ofway "{GROUP}"
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}An'tcay eatecray oupgray...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}An'tcay eleteday isthay oupgray...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}An'tcay enameray oupgray...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}An'tcay emoveray allway ehiclesvay omfray isthay oupgray...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}An'tcay addway ethay ehiclevay otay isthay oupgray...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}An'tcay addway aredshay ehiclesvay otay oupgray...
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Oupsgray - Ickclay onway away oupgray otay istlay allway ehiclesvay ofway isthay oupgray
+STR_GROUP_CREATE_TIP                                            :{BLACK}Ickclay otay eatecray away oupgray
+STR_GROUP_DELETE_TIP                                            :{BLACK}Eleteday ethay electedsay oupgray
+STR_GROUP_RENAME_TIP                                            :{BLACK}Enameray ethay electedsay oupgray
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Ickclay otay otectpray isthay oupgray omfray obalglay autoreplaceway
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Ofitpray isthay earyay: {GREEN}{CURRENCY} {BLACK}(astlay earyay: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Ofitpray isthay earyay: {RED}{CURRENCY} {BLACK}(astlay earyay: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Ofitpray isthay earyay: {GREEN}{CURRENCY} {BLACK}(astlay earyay: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Ofitpray isthay earyay: {RED}{CURRENCY} {BLACK}(astlay earyay: {RED}{CURRENCY}{BLACK})
+
+########
--- a/src/lang/romanian.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/romanian.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -2680,7 +2680,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Afiseazã capacitãtile componentelor trenului
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Afiseazã capacitãtile totale ale trenului, diferentiate pe tip de încãrcãturã
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista de comenzi - clic pe comandã pentru a o selecta
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Sterge comanda selectatã
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Circulă fără oprire până la destinaţia selectată
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Introdu o comandã înaintea celei selectate sau adaugã o comandã la sfârsitul listei
--- a/src/lang/turkish.txt	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/lang/turkish.txt	Sun Jun 17 21:31:00 2007 +0000
@@ -1390,6 +1390,16 @@
 STR_NETWORK_LANG_ENGLISH                                        :İngilizce
 STR_NETWORK_LANG_GERMAN                                         :Almanca
 STR_NETWORK_LANG_FRENCH                                         :Fransızca
+STR_NETWORK_LANG_LITHUANIAN                                     :Litvanyaca
+STR_NETWORK_LANG_NORWEGIAN                                      :Norveççe
+STR_NETWORK_LANG_PORTUGUESE                                     :Portekizce
+STR_NETWORK_LANG_ROMANIAN                                       :Romanca
+STR_NETWORK_LANG_RUSSIAN                                        :Rusça
+STR_NETWORK_LANG_SLOVAK                                         :Slovakça
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovence
+STR_NETWORK_LANG_SPANISH                                        :İspanyolca
+STR_NETWORK_LANG_TURKISH                                        :Türkçe
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukraynaca
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Çok oyunculu oyun lobisi
@@ -1583,6 +1593,7 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Ön-sinayalli ray
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Çıkış-sinyalli ray
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Ön+çikis-sinyalli ray
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Önce tren istasyonu kaldırılmalı
 
 
 
@@ -1590,7 +1601,9 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Önce yol silinmeli
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Yol çalışmaları
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Yol Yapımı
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Tramvay Yapımı
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Köprü Seç
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}...tek yönlü yollar kesişemez
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Yol yapılamıyor...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Buraya tramvay yapılamaz...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Yol kaldırılamıyor...
@@ -2727,6 +2740,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Araba listesi - bilgi için arabayı tıklayın
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Seçili arabayı al
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Fiyat: {CURRENCY}{}Hız: {VELOCITY}{}Bakım: {CURRENCY}/sene{}Kapasite: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapasite: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Arabayı adlandır
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Araba adlandırılamıyor...
@@ -3016,6 +3031,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Garajdaki bütün araçları satmak üzeresiniz. Emin misiniz?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Yanlış gar türü
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Gardaki tüm trenleri sat
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Garajdaki tüm arabaları sat
--- a/src/main_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/main_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -61,6 +61,7 @@
 
 void CcGiveMoney(bool success, TileIndex tile, uint32 p1, uint32 p2)
 {
+#ifdef ENABLE_NETWORK
 	if (!success) return;
 
 	char msg[20];
@@ -72,6 +73,7 @@
 	} else {
 		NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, NETWORK_SERVER_INDEX);
 	}
+#endif /* ENABLE_NETWORK */
 }
 
 void HandleOnEditText(const char *str)
--- a/src/misc.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/misc.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -270,6 +270,21 @@
 	return i;
 }
 
+int CountBitsSet(uint32 value)
+{
+	int num;
+
+	/* This loop is only called once for every bit set by clearing the lowest
+	 * bit in each loop. The number of bits is therefore equal to the number of
+	 * times the loop was called. It was found at the following website:
+	 * http://graphics.stanford.edu/~seander/bithacks.html */
+
+	for (num = 0; value != 0; num++) {
+		value &= value - 1;
+	}
+
+	return num;
+}
 
 static void Save_NAME()
 {
--- a/src/misc_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/misc_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -134,28 +134,22 @@
 		return_cmd_error(STR_702B_MAXIMUM_PERMITTED_LOAN);
 	}
 
-	/* Invalid method */
-	if (p2 >= 3) return CMD_ERROR;
-
-	/* Invalid amount to increase the loan with */
-	if (p2 == 2 && (((int32)p1 < LOAN_INTERVAL) || p->current_loan + (int32)p1 > _economy.max_loan || (p1 % LOAN_INTERVAL) != 0)) return CMD_ERROR;
+	int32 loan;
+	switch (p2) {
+		default: return CMD_ERROR; // Invalid method
+		case 0: // Take some extra loan
+			loan = LOAN_INTERVAL;
+			break;
+		case 1: // Take a loan as big as possible
+			loan = _economy.max_loan - p->current_loan;
+			break;
+		case 2: // Take the given amount of loan
+			if ((((int32)p1 < LOAN_INTERVAL) || p->current_loan + (int32)p1 > _economy.max_loan || (p1 % LOAN_INTERVAL) != 0)) return CMD_ERROR;
+			loan = p1;
+			break;
+	}
 
 	if (flags & DC_EXEC) {
-		int32 loan;
-		/* Amount to loan */
-		switch (p2) {
-			default: NOT_REACHED();
-			case 0:
-				loan = LOAN_INTERVAL;
-				break;
-			case 1:
-				loan = _economy.max_loan - p->current_loan;
-				break;
-			case 2:
-				loan = p1;
-				break;
-		}
-
 		p->money64 += loan;
 		p->current_loan += loan;
 		UpdatePlayerMoney32(p);
@@ -182,14 +176,14 @@
 	int32 loan;
 	switch (p2) {
 		default: return CMD_ERROR; // Invalid method
-		case 0:
+		case 0: // Pay back one step
 			loan = min(p->current_loan, LOAN_INTERVAL);
 			break;
-		case 1:
+		case 1: // Pay back as much as possible
 			loan = max(min(p->current_loan, p->player_money), (int32)LOAN_INTERVAL);
 			loan -= loan % LOAN_INTERVAL;
 			break;
-		case 2:
+		case 2: // Repay the given amount of loan
 			if ((p1 % LOAN_INTERVAL != 0) || ((int32)p1 < LOAN_INTERVAL)) return CMD_ERROR; // Invalid amount to loan
 			loan = p1;
 			break;
--- a/src/misc_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/misc_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -37,6 +37,7 @@
 #include "player_face.h"
 #include "fileio.h"
 
+#include "fileio.h"
 #include "fios.h"
 /* Variables to display file lists */
 FiosItem *_fios_list;
@@ -1407,28 +1408,27 @@
 	static FiosItem o_dir;
 
 	switch (e->event) {
-	case WE_CREATE: { // Set up OPENTTD button
+	case WE_CREATE: // Set up OPENTTD button
 		o_dir.type = FIOS_TYPE_DIRECT;
 		switch (_saveload_mode) {
 			case SLD_SAVE_GAME:
 			case SLD_LOAD_GAME:
-				ttd_strlcpy(&o_dir.name[0], _paths.save_dir, sizeof(o_dir.name));
+				FioGetDirectory(o_dir.name, lengthof(o_dir.name), SAVE_DIR);
 				break;
 
 			case SLD_SAVE_SCENARIO:
 			case SLD_LOAD_SCENARIO:
-				ttd_strlcpy(&o_dir.name[0], _paths.scenario_dir, sizeof(o_dir.name));
+				FioGetDirectory(o_dir.name, lengthof(o_dir.name), SCENARIO_DIR);
 				break;
 
 			case SLD_LOAD_HEIGHTMAP:
-				ttd_strlcpy(&o_dir.name[0], _paths.heightmap_dir, sizeof(o_dir.name));
+				FioGetDirectory(o_dir.name, lengthof(o_dir.name), HEIGHTMAP_DIR);
 				break;
 
 			default:
-				ttd_strlcpy(&o_dir.name[0], _paths.personal_dir, sizeof(o_dir.name));
+				ttd_strlcpy(o_dir.name, _personal_dir, lengthof(o_dir.name));
 		}
 		break;
-		}
 
 	case WE_PAINT: {
 		int pos;
--- a/src/music_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/music_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -7,6 +7,7 @@
 #include "table/strings.h"
 #include "table/sprites.h"
 #include "functions.h"
+#include "fileio.h"
 #include "window.h"
 #include "gfx.h"
 #include "sound.h"
@@ -90,9 +91,9 @@
 
 static void DoPlaySong()
 {
-	char filename[256];
-	snprintf(filename, sizeof(filename), "%s%s",
-		_paths.gm_dir, origin_songs_specs[_music_wnd_cursong - 1].filename);
+	char filename[MAX_PATH];
+	FioFindFullPath(filename, lengthof(filename), GM_DIR,
+			origin_songs_specs[_music_wnd_cursong - 1].filename);
 	_music_driver->play_song(filename);
 }
 
@@ -105,20 +106,14 @@
 {
 	uint i = 0;
 	uint j = 0;
-	char filename[256];
 
 	memset(_cur_playlist, 0, sizeof(_cur_playlist));
 	do {
-		if (_playlists[msf.playlist][i] != 0) {  // Don't evaluate playlist terminator
-			snprintf(filename, sizeof(filename),  "%s%s",
-				_paths.gm_dir, origin_songs_specs[(_playlists[msf.playlist][i]) - 1].filename);
-
-			/* we are now checking for the existence of that file prior
-			 * to add it to the list of available songs */
-			if (FileExists(filename)) {
-				_cur_playlist[j] = _playlists[msf.playlist][i];
-				j++;
-			}
+		/* We are now checking for the existence of that file prior
+		 * to add it to the list of available songs */
+		if (FioCheckFileExists(origin_songs_specs[_playlists[msf.playlist][i]].filename, GM_DIR)) {
+			_cur_playlist[j] = _playlists[msf.playlist][i];
+			j++;
 		}
 	} while (_playlists[msf.playlist][i++] != 0 && i < lengthof(_cur_playlist) - 1);
 
--- a/src/network/network_client.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/network/network_client.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -20,6 +20,7 @@
 #include "../console.h"
 #include "../variables.h"
 #include "../helpers.hpp"
+#include "../fileio.h"
 
 // This file handles all the client-commands
 
@@ -268,7 +269,7 @@
 //   DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p
 // **********
 
-extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
+extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir);
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FULL)
 {
@@ -488,7 +489,6 @@
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP)
 {
-	static char filename[256];
 	static FILE *file_pointer;
 
 	byte maptype;
@@ -499,10 +499,7 @@
 
 	// First packet, init some stuff
 	if (maptype == MAP_PACKET_START) {
-		// The name for the temp-map
-		snprintf(filename, lengthof(filename), "%s%snetwork_client.tmp",  _paths.autosave_dir, PATHSEP);
-
-		file_pointer = fopen(filename, "wb");
+		file_pointer = FioFOpenFile("network_client.tmp", "wb", AUTOSAVE_DIR);;
 		if (file_pointer == NULL) {
 			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
 			return NETWORK_RECV_STATUS_SAVEGAME;
@@ -544,7 +541,7 @@
 		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
 
 		/* The map is done downloading, load it */
-		if (!SafeSaveOrLoad(filename, SL_LOAD, GM_NORMAL)) {
+		if (!SafeSaveOrLoad("network_client.tmp", SL_LOAD, GM_NORMAL, AUTOSAVE_DIR)) {
 			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
 			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
 			return NETWORK_RECV_STATUS_SAVEGAME;
--- a/src/network/network_server.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/network/network_server.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -24,6 +24,7 @@
 #include "../variables.h"
 #include "../genworld.h"
 #include "../helpers.hpp"
+#include "../fileio.h"
 
 // This file handles all the server-commands
 
@@ -307,14 +308,13 @@
 	}
 
 	if (cs->status == STATUS_AUTH) {
-		char filename[256];
+		const char *filename = "network_server.tmp";
 		Packet *p;
 
 		// Make a dump of the current game
-		snprintf(filename, lengthof(filename), "%s%snetwork_server.tmp",  _paths.autosave_dir, PATHSEP);
-		if (SaveOrLoad(filename, SL_SAVE) != SL_OK) error("network savedump failed");
+		if (SaveOrLoad(filename, SL_SAVE, AUTOSAVE_DIR) != SL_OK) error("network savedump failed");
 
-		file_pointer = fopen(filename, "rb");
+		file_pointer = FioFOpenFile(filename, "rb", AUTOSAVE_DIR);
 		fseek(file_pointer, 0, SEEK_END);
 
 		if (ftell(file_pointer) == 0) error("network savedump failed - zero sized savegame?");
--- a/src/newgrf.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -76,7 +76,7 @@
 static byte *_preload_sprite = NULL;
 
 /* Indicates which are the newgrf features currently loaded ingame */
-uint8 _loaded_newgrf_features;
+GRFLoadedFeatures _loaded_newgrf_features;
 
 enum GrfDataType {
 	GDT_SOUND,
@@ -539,7 +539,7 @@
 		case 0x27: // Miscellaneous flags
 			FOR_EACH_OBJECT {
 				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei[i].misc_flags, EF_USES_2CC);
 			}
 			break;
 
@@ -661,7 +661,7 @@
 		case 0x1C: // Miscellaneous flags
 			FOR_EACH_OBJECT {
 				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei[i].misc_flags, EF_USES_2CC);
 			}
 			break;
 
@@ -772,7 +772,7 @@
 		case 0x17: // Miscellaneous flags
 			FOR_EACH_OBJECT {
 				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei[i].misc_flags, EF_USES_2CC);
 			}
 			break;
 
@@ -888,7 +888,7 @@
 		case 0x17: // Miscellaneous flags
 			FOR_EACH_OBJECT {
 				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei[i].misc_flags, EF_USES_2CC);
 			}
 			break;
 
@@ -1297,7 +1297,7 @@
 				 * FinaliseHouseArray() for more details. */
 				if (housespec[i]->min_date < 1930) housespec[i]->min_date = 1930;
 			}
-			SETBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES);
+			_loaded_newgrf_features.has_newhouses = true;
 			break;
 
 		case 0x09: // Building flags
@@ -2045,7 +2045,7 @@
 	);
 
 	for (uint16 i = 0; i < num_sets * num_ents; i++) {
-		LoadNextSprite(_cur_spriteid++, _file_index);
+		LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
 		_nfo_line++;
 	}
 }
@@ -2101,6 +2101,7 @@
 
 	if (feature != _cur_grffile->spriteset_feature) {
 		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping",
+				setid, type,
 				_cur_grffile->spriteset_feature, feature);
 		return NULL;
 	}
@@ -2959,7 +2960,7 @@
 	}
 
 	for (; num > 0; num--) {
-		LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index);
+		LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line);
 		_nfo_line++;
 	}
 }
@@ -3278,7 +3279,9 @@
 		_skip_sprites = -1;
 
 		/* If an action 8 hasn't been encountered yet, disable the grf. */
-		if (_cur_grfconfig->status != GCS_ACTIVATED) _cur_grfconfig->status = GCS_DISABLED;
+		if (_cur_grfconfig->status != GCS_ACTIVATED && _cur_grfconfig->status != GCS_INITIALISED) {
+			_cur_grfconfig->status = GCS_DISABLED;
+		}
 	}
 }
 
@@ -3357,7 +3360,7 @@
 		);
 
 		for (uint j = 0; j < num_sprites; j++) {
-			LoadNextSprite(first_sprite + j, _file_index); // XXX
+			LoadNextSprite(first_sprite + j, _file_index, _nfo_line); // XXX
 			_nfo_line++;
 		}
 	}
@@ -4080,7 +4083,7 @@
 
 		for (uint c = 0; c < num_char; c++) {
 			SetUnicodeGlyph(size, base_char + c, _cur_spriteid);
-			LoadNextSprite(_cur_spriteid++, _file_index);
+			LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
 			_nfo_line++;
 		}
 	}
@@ -4226,7 +4229,7 @@
 	                   |                                        (0 << 0x0C)  // newagerating
 	                   |       ((_patches.build_on_slopes ? 1 : 0) << 0x0D)  // buildonslopes
 	                   |         ((_patches.full_load_any ? 1 : 0) << 0x0E)  // fullloadany
-	                   |                                        (0 << 0x0F)  // planespeed
+	                   |                                        (1 << 0x0F)  // planespeed - TODO depends on patch when implemented
 	                   |                                        (0 << 0x10)  // moreindustriesperclimate - obsolete
 	                   |                                        (0 << 0x11)  // moretoylandfeatures
 	                   |                                        (1 << 0x12)  // newstations
@@ -4489,7 +4492,9 @@
 	_traininfo_vehicle_pitch = 0;
 	_traininfo_vehicle_width = 29;
 
-	_loaded_newgrf_features = 0;
+	_loaded_newgrf_features.has_2CC           = false;
+	_loaded_newgrf_features.has_newhouses     = false;
+	_loaded_newgrf_features.has_newindustries = false,
 
 	_signal_base = 0;
 	_coast_base = 0;
--- a/src/newgrf.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf.h	Sun Jun 17 21:31:00 2007 +0000
@@ -88,14 +88,14 @@
 extern SpriteID _signal_base;
 extern SpriteID _coast_base;
 
-enum GRFLoadedFeatures {
-	GRFLOADED_2CC,             // Set if any vehicle is loaded which uses 2cc (two company colours).
-	GRFLOADED_NEWHOUSES,       // Set if there are any newhouses loaded.
-	GRFLOADED_NEWINDUSTRIES,   // Set if there are any newindustries loaded.
+struct GRFLoadedFeatures {
+	bool has_2CC;             ///< Set if any vehicle is loaded which uses 2cc (two company colours).
+	bool has_newhouses;       ///< Set if there are any newhouses loaded.
+	bool has_newindustries;   ///< Set if there are any newindustries loaded.
 };
 
 /* Indicates which are the newgrf features currently loaded ingame */
-extern uint8 _loaded_newgrf_features;
+extern GRFLoadedFeatures _loaded_newgrf_features;
 
 void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage);
 void LoadNewGRF(uint load_index, uint file_index);
--- a/src/newgrf_config.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_config.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -363,14 +363,16 @@
 /* Scan for all NewGRFs */
 void ScanNewGRFFiles()
 {
-	uint num;
+	Searchpath sp;
+	char path[MAX_PATH];
+	uint num = 0;
 
 	ClearGRFConfigList(&_all_grfs);
 
 	DEBUG(grf, 1, "Scanning for NewGRFs");
-	num  = ScanPath(_paths.data_dir, strlen(_paths.data_dir));
-	if (_paths.second_data_dir != NULL) {
-		num += ScanPath(_paths.second_data_dir, strlen(_paths.second_data_dir));
+	FOR_ALL_SEARCHPATHS(sp) {
+		FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR);
+		num += ScanPath(path, strlen(path));
 	}
 	DEBUG(grf, 1, "Scan complete, found %d files", num);
 }
--- a/src/newgrf_engine.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_engine.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -245,6 +245,8 @@
 static byte MapAircraftMovementState(const Vehicle *v)
 {
 	const Station *st = GetStation(v->u.air.targetairport);
+	if (st->airport_tile == 0) return AMS_TTDP_FLIGHT_TO_TOWER;
+
 	const AirportFTAClass *afc = st->Airport();
 	uint16 amdflag = afc->MovingData(v->u.air.pos)->flag;
 
--- a/src/newgrf_house.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_house.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -83,7 +83,7 @@
 {
 	HouseClassID class_id = GetHouseSpecs(house_id)->class_id;
 
-	if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
+	if (!_loaded_newgrf_features.has_newhouses) return;
 
 	/* If there are 255 buildings of this type in this town, there are also
 	 * at least that many houses of the same class in the town, and
@@ -111,7 +111,7 @@
 {
 	HouseClassID class_id = GetHouseSpecs(house_id)->class_id;
 
-	if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
+	if (!_loaded_newgrf_features.has_newhouses) return;
 
 	if (t->building_counts.id_count[house_id] > 0) t->building_counts.id_count[house_id]--;
 	if (_building_counts.id_count[house_id] > 0)   _building_counts.id_count[house_id]--;
@@ -129,7 +129,7 @@
  */
 void AfterLoadCountBuildings()
 {
-	if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
+	if (!_loaded_newgrf_features.has_newhouses) return;
 
 	for (TileIndex t = 0; t < MapSize(); t++) {
 		if (!IsTileType(t, MP_HOUSE)) continue;
--- a/src/newgrf_industries.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_industries.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -227,16 +227,17 @@
 	return NULL;
 }
 
-static void NewIndustryResolver(ResolverObject *res, IndustryType ind_id, TileIndex tile, Industry *indus)
+static void NewIndustryResolver(ResolverObject *res, TileIndex tile, Industry *indus)
 {
-	res->GetRandomBits = NULL;//IndustryTileGetRandomBits;
-	res->GetTriggers   = NULL;//IndustryTileGetTriggers;
-	res->SetTriggers   = NULL;//IndustryTileSetTriggers;
+	res->GetRandomBits = IndustryTileGetRandomBits;
+	res->GetTriggers   = IndustryTileGetTriggers;
+	res->SetTriggers   = IndustryTileSetTriggers;
 	res->GetVariable   = IndustryGetVariable;
 	res->ResolveReal   = IndustryResolveReal;
 
 	res->u.industry.tile = tile;
 	res->u.industry.ind  = indus;
+	res->u.industry.gfx  = INVALID_INDUSTRYTILE;
 
 	res->callback        = 0;
 	res->callback_param1 = 0;
@@ -251,7 +252,7 @@
 	ResolverObject object;
 	const SpriteGroup *group;
 
-	NewIndustryResolver(&object, industry->type, tile, industry);
+	NewIndustryResolver(&object, tile, industry);
 	object.callback = callback;
 	object.callback_param1 = param1;
 	object.callback_param2 = param2;
--- a/src/newgrf_industries.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_industries.h	Sun Jun 17 21:31:00 2007 +0000
@@ -8,8 +8,14 @@
 #include "industry.h"
 #include "newgrf_spritegroup.h"
 
+/* in newgrf_industry.cpp */
 uint32 IndustryGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available);
 uint16 GetIndustryCallback(uint16 callback, uint32 param1, uint32 param2, Industry *industry, TileIndex tile);
 uint32 GetIndustryIDAtOffset(TileIndex new_tile, TileIndex old_tile, const Industry *i);
 
+/* in newgrf_industrytiles.cpp*/
+uint32 IndustryTileGetRandomBits(const ResolverObject *object);
+uint32 IndustryTileGetTriggers(const ResolverObject *object);
+void IndustryTileSetTriggers(const ResolverObject *object, int triggers);
+
 #endif /* NEWGRF_INDUSTRIES_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_industrytiles.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,160 @@
+/* $Id$ */
+
+/** @file newgrf_industrytiles.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "functions.h"
+#include "variables.h"
+#include "debug.h"
+#include "viewport.h"
+#include "landscape.h"
+#include "newgrf.h"
+#include "industry.h"
+#include "newgrf_commons.h"
+#include "newgrf_spritegroup.h"
+#include "newgrf_callbacks.h"
+#include "newgrf_industries.h"
+#include "industry_map.h"
+#include "clear_map.h"
+#include "table/sprites.h"
+#include "sprite.h"
+
+/**
+ * Based on newhouses equivalent, but adapted for newindustries
+ * @param parameter from callback.  It's in fact a pair of coordinates
+ * @param tile TileIndex from which the callback was initiated
+ * @param index of the industry been queried for
+ * @return a construction of bits obeying the newgrf format
+ */
+static uint32 GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index)
+{
+	byte tile_type;
+	bool is_same_industry;
+
+	tile = GetNearbyTile(parameter, tile);
+	is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index);
+	tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1 | (is_same_industry ? 1 : 0);
+
+	return GetTileType(tile) << 24 | (TileHeight(tile) * 8) << 16 | tile_type << 8 | GetTileSlope(tile, NULL);
+}
+
+/** This is the position of the tile relative to the northernmost tile of the industry.
+ * Format: 00yxYYXX
+ * Variable  Content
+ * x         the x offset from the northernmost tile
+ * XX        same, but stored in a byte instead of a nibble
+ * y         the y offset from the northernmost tile
+ * YY        same, but stored in a byte instead of a nibble
+ * @param tile TileIndex of the tile to evaluate
+ * @param ind_tile northernmost tile of the industry
+ */
+static uint32 GetRelativePosition(TileIndex tile, TileIndex ind_tile)
+{
+	byte x = TileX(tile) - TileX(ind_tile);
+	byte y = TileY(tile) - TileY(ind_tile);
+
+	return ((y & 0xF) << 20) | ((x & 0xF) << 16) | (y << 8) | x;
+}
+
+static uint32 IndustryTileGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
+{
+	const Industry *inds = object->u.industry.ind;
+	TileIndex tile       = object->u.industry.tile;
+
+	if (object->scope == VSG_SCOPE_PARENT) {
+		return IndustryGetVariable(object, variable, parameter, available);
+	}
+
+	switch (variable) {
+		 /* Construction state of the tile: a value between 0 and 3 */
+		case 0x40 : return (IsTileType(tile, MP_INDUSTRY)) ? GetIndustryConstructionStage(tile) : 0;
+
+		case 0x41 : return GetTerrainType(tile);
+
+		/* Current town zone of the tile in the nearest town */
+		case 0x42 : return GetTownRadiusGroup(ClosestTownFromTile(tile, (uint)-1), tile);
+
+		/* Relative position */
+		case 0x43 : return GetRelativePosition(tile, inds->xy);
+
+		/* Animation frame. Like house variable 46 but can contain anything 0..FF. */
+		case 0x44 : return (IsTileType(tile, MP_INDUSTRY)) ? GetIndustryAnimationState(tile) : 0;
+
+		/* Land info of nearby tiles */
+		case 0x60 : return GetNearbyIndustryTileInformation(parameter, tile, inds->index);
+
+		case 0x61 : {/* Animation stage of nearby tiles */
+			tile = GetNearbyTile(parameter, tile);
+			if (IsTileType(tile, MP_INDUSTRY) && GetIndustryByTile(tile) == inds) {
+				return GetIndustryAnimationState(tile);
+			}
+			return 0xFFFFFFFF;
+		}
+
+		/* Get industry tile ID at offset */
+		case 0x62 : return GetIndustryIDAtOffset(GetNearbyTile(parameter, tile), tile, inds);
+	}
+
+	return 0;
+}
+
+static const SpriteGroup *IndustryTileResolveReal(const ResolverObject *object, const SpriteGroup *group)
+{
+	/* IndustryTile do not have 'real' groups.  Or do they?? */
+	return NULL;
+}
+
+uint32 IndustryTileGetRandomBits(const ResolverObject *object)
+{
+	const TileIndex tile = object->u.industry.tile;
+	return (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) ? 0 : GetIndustryRandomBits(tile);
+}
+
+uint32 IndustryTileGetTriggers(const ResolverObject *object)
+{
+	const TileIndex tile = object->u.industry.tile;
+	return (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) ? 0 : GetIndustryTriggers(tile);
+}
+
+void IndustryTileSetTriggers(const ResolverObject *object, int triggers)
+{
+	const TileIndex tile = object->u.industry.tile;
+	if (IsTileType(tile, MP_INDUSTRY)) SetIndustryTriggers(tile, triggers);
+}
+
+static void NewIndustryTileResolver(ResolverObject *res, IndustryGfx gfx, TileIndex tile, Industry *indus)
+{
+	res->GetRandomBits = IndustryTileGetRandomBits;
+	res->GetTriggers   = IndustryTileGetTriggers;
+	res->SetTriggers   = IndustryTileSetTriggers;
+	res->GetVariable   = IndustryTileGetVariable;
+	res->ResolveReal   = IndustryTileResolveReal;
+
+	res->u.industry.tile = tile;
+	res->u.industry.ind  = indus;
+	res->u.industry.gfx  = gfx;
+
+	res->callback        = 0;
+	res->callback_param1 = 0;
+	res->callback_param2 = 0;
+	res->last_value      = 0;
+	res->trigger         = 0;
+	res->reseed          = 0;
+}
+
+uint16 GetIndustryTileCallback(uint16 callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile)
+{
+	ResolverObject object;
+	const SpriteGroup *group;
+
+	NewIndustryTileResolver(&object, gfx_id, tile, industry);
+	object.callback = callback;
+	object.callback_param1 = param1;
+	object.callback_param2 = param2;
+
+	group = Resolve(GetIndustryTileSpec(gfx_id)->grf_prop.spritegroup, &object);
+	if (group == NULL || group->type != SGT_CALLBACK) return CALLBACK_FAILED;
+
+	return group->g.callback.result;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_industrytiles.h	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,11 @@
+/* $Id$ */
+
+/** @file newgrf_industrytiles.h */
+
+#ifndef NEWGRF_INDUSTRYTILES_H
+#define NEWGRF_INDUSTRYTILES_H
+
+void DrawNewIndustryTile(TileInfo *ti, IndustryGfx gfx);
+uint16 GetIndustryTileCallback(uint16 callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile);
+
+#endif /* NEWGRF_INDUSTRYTILES_H */
--- a/src/newgrf_spritegroup.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_spritegroup.h	Sun Jun 17 21:31:00 2007 +0000
@@ -200,6 +200,7 @@
 		struct {
 			TileIndex tile;
 			Industry *ind;
+			IndustryGfx gfx;
 		} industry;
 		struct {
 			const struct CargoSpec *cs;
--- a/src/newgrf_text.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/newgrf_text.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -438,7 +438,7 @@
 	for (i=0; i < lengthof(iso_codes); i++) {
 		if (strncmp(iso_codes[i].code, iso_name, strlen(iso_codes[i].code)) == 0) {
 			/* We found a match, so let's use it. */
-			ret = i;
+			ret = iso_codes[i].grfLangID;
 			break;
 		}
 	}
--- a/src/oldloader.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/oldloader.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -22,7 +22,7 @@
 #include "signs.h"
 #include "debug.h"
 #include "depot.h"
-#include "network/network.h"
+#include "newgrf_config.h"
 #include "ai/ai.h"
 #include "date.h"
 
@@ -330,7 +330,11 @@
 		Vehicle *u;
 
 		/* We haven't used this bit for stations for ages */
-		if (v->type == VEH_ROAD) CLRBIT(v->u.road.state, RVS_IS_STOPPING);
+		if (v->type == VEH_ROAD &&
+				v->u.road.state != RVSB_IN_DEPOT &&
+				v->u.road.state != RVSB_WORMHOLE) {
+			CLRBIT(v->u.road.state, RVS_IS_STOPPING);
+		}
 
 		FOR_ALL_VEHICLES_FROM(u, v->index + 1) {
 			/* If a vehicle has the same orders, add the link to eachother
--- a/src/openttd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/openttd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -65,7 +65,7 @@
 #include "newgrf_commons.h"
 #include "player_face.h"
 #include "group.h"
-#include "blitter/blitter.hpp"
+#include "blitter/factory.hpp"
 
 #include "bridge_map.h"
 #include "clear_map.h"
@@ -319,8 +319,6 @@
 
 static void LoadIntroGame()
 {
-	char filename[256];
-
 	_game_mode = GM_MENU;
 
 	/* Clear transparency options */
@@ -333,14 +331,8 @@
 	ResetWindowSystem();
 	SetupColorsAndInitialWindow();
 
-	/* Generate a world. */
-	snprintf(filename, lengthof(filename), "%sopntitle.dat",  _paths.data_dir);
-#if defined SECOND_DATA_DIR
-	if (SaveOrLoad(filename, SL_LOAD) != SL_OK) {
-		snprintf(filename, lengthof(filename), "%sopntitle.dat",  _paths.second_data_dir);
-	}
-#endif
-	if (SaveOrLoad(filename, SL_LOAD) != SL_OK) {
+	/* Load the default opening screen savegame */
+	if (SaveOrLoad("opntitle.dat", SL_LOAD, DATA_DIR) != SL_OK) {
 		GenerateWorld(GW_EMPTY, 64, 64); // if failed loading, make empty world.
 		WaitTillGeneratedWorld();
 	}
@@ -410,6 +402,7 @@
 			strcpy(musicdriver, "null");
 			strcpy(sounddriver, "null");
 			strcpy(videodriver, "dedicated");
+			strcpy(blitter, "null");
 			dedicated = true;
 			if (mgo.opt != NULL) {
 				/* Use the existing method for parsing (openttd -n).
@@ -483,6 +476,11 @@
 	if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
 	if (generation_seed != GENERATE_NEW_SEED) _patches_newgame.generation_seed = generation_seed;
 
+	/* The width and height must be at least 1 pixel, this
+	 * way all internal drawing routines work correctly. */
+	if (_cur_resolution[0] == 0) _cur_resolution[0] = 1;
+	if (_cur_resolution[1] == 0) _cur_resolution[1] = 1;
+
 #if defined(ENABLE_NETWORK)
 	if (dedicated_host) snprintf(_network_server_bind_ip_host, NETWORK_HOSTNAME_LENGTH, "%s", dedicated_host);
 	if (dedicated_port) _network_server_port = dedicated_port;
@@ -763,7 +761,7 @@
 	ResetGRFConfig(true);
 
 	/* Load game */
-	if (SaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode) != SL_OK) {
+	if (SaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, SCENARIO_DIR) != SL_OK) {
 		LoadIntroGame();
 		ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
 	}
@@ -785,12 +783,20 @@
 	MarkWholeScreenDirty();
 }
 
-bool SafeSaveOrLoad(const char *filename, int mode, int newgm)
+/** Load the specified savegame but on error do different things.
+ * If loading fails due to corrupt savegame, bad version, etc. go back to
+ * a previous correct state. In the menu for example load the intro game again.
+ * @param filename file to be loaded
+ * @param mode mode of loading, either SL_LOAD or SL_OLD_LOAD
+ * @param newgm switch to this mode of loading fails due to some unknown error
+ * @param subdir default directory to look for filename, set to 0 if not needed */
+bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir)
 {
 	byte ogm = _game_mode;
 
 	_game_mode = newgm;
-	switch (SaveOrLoad(filename, mode)) {
+	assert(mode == SL_LOAD || mode == SL_OLD_LOAD);
+	switch (SaveOrLoad(filename, mode, subdir)) {
 		case SL_OK: return true;
 
 		case SL_REINIT:
@@ -863,7 +869,7 @@
 		_opt_ptr = &_opt;
 		ResetGRFConfig(true);
 
-		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL)) {
+		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
 			LoadIntroGame();
 			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
 		} else {
@@ -897,7 +903,7 @@
 		break;
 
 	case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
-		if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR)) {
+		if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
 			_opt_ptr = &_opt;
 
 			SetLocalPlayer(OWNER_NONE);
@@ -913,7 +919,7 @@
 		break;
 
 	case SM_SAVE: /* Save game */
-		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE) != SL_OK) {
+		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
 			ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
 		} else {
 			DeleteWindowById(WC_SAVELOAD, 0);
@@ -970,9 +976,11 @@
 	}
 }
 
+/** Create an autosave. The default name is "autosave#.sav". However with
+ * the patch setting 'keep_all_autosave' the name defaults to company-name + date */
 static void DoAutosave()
 {
-	char buf[200];
+	char buf[MAX_PATH];
 
 #if defined(PSP)
 	/* Autosaving in networking is too time expensive for the PSP */
@@ -982,27 +990,21 @@
 
 	if (_patches.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
 		const Player *p = GetPlayer(_local_player);
-		char* s = buf;
-
-		s += snprintf(buf, lengthof(buf), "%s%s", _paths.autosave_dir, PATHSEP);
 
 		SetDParam(0, p->name_1);
 		SetDParam(1, p->name_2);
 		SetDParam(2, _date);
-		s = GetString(s, STR_4004, lastof(buf));
-		strecpy(s, ".sav", lastof(buf));
-	} else { // generate a savegame name and number according to _patches.max_num_autosaves
-		snprintf(buf, lengthof(buf), "%s%sautosave%d.sav", _paths.autosave_dir, PATHSEP, _autosave_ctr);
+		GetString(buf, STR_4004, lastof(buf));
+		ttd_strlcpy(buf, ".sav", sizeof(buf));
+	} else {
+		/* generate a savegame name and number according to _patches.max_num_autosaves */
+		snprintf(buf, sizeof(buf), "autosave%d.sav", _autosave_ctr);
 
-		_autosave_ctr++;
-		if (_autosave_ctr >= _patches.max_num_autosaves) {
-			/* we reached the limit for numbers of autosaves. We will start over */
-			_autosave_ctr = 0;
-		}
+		if (++_autosave_ctr >= _patches.max_num_autosaves) _autosave_ctr = 0;
 	}
 
 	DEBUG(sl, 2, "Autosaving to '%s'", buf);
-	if (SaveOrLoad(buf, SL_SAVE) != SL_OK)
+	if (SaveOrLoad(buf, SL_SAVE, AUTOSAVE_DIR) != SL_OK)
 		ShowErrorMessage(INVALID_STRING_ID, STR_AUTOSAVE_FAILED, 0, 0);
 }
 
@@ -1309,7 +1311,7 @@
 	WP(w,vp_d).dest_scrollpos_y = _saved_scrollpos_y;
 
 	vp = w->viewport;
-	vp->zoom = _saved_scrollpos_zoom;
+	vp->zoom = (ZoomLevel)min(_saved_scrollpos_zoom, ZOOM_LVL_MAX);
 	vp->virtual_width = ScaleByZoom(vp->width, vp->zoom);
 	vp->virtual_height = ScaleByZoom(vp->height, vp->zoom);
 
--- a/src/order_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/order_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -554,7 +554,13 @@
 
 			int sel = GetOrderFromOrderWndPt(w, e->we.click.pt.y, v);
 
-			if (sel == INVALID_ORDER) return;
+			if (sel == INVALID_ORDER) {
+				/* This was a click on an empty part of the orders window, so
+				 * deselect the currently selected order. */
+				WP(w,order_d).sel = -1;
+				SetWindowDirty(w);
+				return;
+			}
 
 			if (_ctrl_pressed && sel < v->num_orders) {
 				const Order *ord = GetVehicleOrder(v, sel);
--- a/src/ottdres.rc	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/ottdres.rc	Sun Jun 17 21:31:00 2007 +0000
@@ -65,8 +65,8 @@
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,5,0,0
- PRODUCTVERSION 0,5,0,0
+ FILEVERSION 0,5,99,0
+ PRODUCTVERSION 0,5,99,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -91,7 +91,7 @@
             VALUE "OriginalFilename", "openttd.exe\0"
             VALUE "PrivateBuild", "\0"
             VALUE "ProductName", "OpenTTD\0"
-            VALUE "ProductVersion", "0.0.0.0\0"
+            VALUE "ProductVersion", "Development Version\0"
             VALUE "SpecialBuild", "-\0"
         END
     END
--- a/src/player.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/player.h	Sun Jun 17 21:31:00 2007 +0000
@@ -19,13 +19,13 @@
 	int64 company_value;
 };
 
-typedef uint32 PlayerFace;
-
+/* The "steps" in loan size, in British Pounds! */
 enum {
-	/** The stepping in pounds for loans */
-	LOAN_INTERVAL = 10000,
+	LOAN_INTERVAL        = 10000,
 };
 
+typedef uint32 PlayerFace;
+
 struct Player {
 	uint32 name_2;
 	uint16 name_1;
--- a/src/player_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/player_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -156,15 +156,19 @@
 		PlayerID player = (PlayerID)w->window_number;
 		const Player *p = GetPlayer(player);
 
+		/* Borrow/repay buttons only exist for local player */
 		if (player == _local_player) {
-			/* borrow/repay buttons only exist for local player */
+			/* Borrow button only shows when there is any more money to loan */
+			SetWindowWidgetDisabledState(w, 6, p->current_loan == _economy.max_loan);
+
+			/* Repay button only shows when there is any more money to repay */
 			SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
 		}
 
 		SetDParam(0, p->name_1);
 		SetDParam(1, p->name_2);
 		SetDParam(2, GetPlayerNameString(player, 3));
-		SetDParam(4, 10000);
+		SetDParam(4, LOAN_INTERVAL);
 		DrawWindowWidgets(w);
 
 		DrawPlayerEconomyStats(p, (byte)WP(w, def_d).data_1);
@@ -325,7 +329,7 @@
 	switch (e->event) {
 		case WE_CREATE:
 			LowerWindowWidget(w, WP(w, livery_d).livery_class + 2);
-			if (!HASBIT(_loaded_newgrf_features, GRFLOADED_2CC)) {
+			if (!_loaded_newgrf_features.has_2CC) {
 				HideWindowWidget(w, 11);
 				HideWindowWidget(w, 12);
 			}
@@ -367,7 +371,7 @@
 					DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOR(p->livery[scheme].colour1), 152, y);
 					DrawString(165, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour1, sel ? 0xC : 2);
 
-					if (HASBIT(_loaded_newgrf_features, GRFLOADED_2CC)) {
+					if (_loaded_newgrf_features.has_2CC) {
 						DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOR(p->livery[scheme].colour2), 277, y);
 						DrawString(290, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour2, sel ? 0xC : 2);
 					}
@@ -795,7 +799,7 @@
 				}
 
 				case PCW_WIDGET_COLOR_SCHEME: {
-					Window *wf = AllocateWindowDescFront(HASBIT(_loaded_newgrf_features, GRFLOADED_2CC) ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
+					Window *wf = AllocateWindowDescFront(_loaded_newgrf_features.has_2CC ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
 					if (wf != NULL) {
 						wf->caption_color = wf->window_number;
 						WP(wf, livery_d).livery_class = LC_OTHER;
--- a/src/roadveh_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/roadveh_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -1085,15 +1085,8 @@
 
 static int PickRandomBit(uint bits)
 {
-	uint num = 0;
-	uint b = bits;
 	uint i;
-
-	do {
-		if (b & 1) num++;
-	} while (b >>= 1);
-
-	num = RandomRange(num);
+	uint num = RandomRange(CountBitsSet(bits));
 
 	for (i = 0; !(bits & 1) || (int)--num >= 0; bits >>= 1, i++) {}
 	return i;
--- a/src/saveload.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/saveload.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -1561,7 +1561,7 @@
  * @param mode Save or load. Load can also be a TTD(Patch) game. Use SL_LOAD, SL_OLD_LOAD or SL_SAVE
  * @return Return the results of the action. SL_OK, SL_ERROR or SL_REINIT ("unload" the game)
  */
-SaveOrLoadResult SaveOrLoad(const char *filename, int mode)
+SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb)
 {
 	uint32 hdr[2];
 	const SaveLoadFormat *fmt;
@@ -1583,7 +1583,12 @@
 		return SL_OK;
 	}
 
-	_sl.fh = (mode == SL_SAVE) ? fopen(filename, "wb") : fopen(filename, "rb");
+	_sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
+
+	/* Make it a little easier to load savegames from the console */
+	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", SAVE_DIR);
+	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
+
 	if (_sl.fh == NULL) {
 		DEBUG(sl, 0, "Cannot open savegame '%s' for saving/loading.", filename);
 		return SL_ERROR;
@@ -1721,9 +1726,7 @@
 /** Do a save when exiting the game (patch option) _patches.autosave_on_exit */
 void DoExitSave()
 {
-	char buf[200];
-	snprintf(buf, sizeof(buf), "%s%sexit.sav", _paths.autosave_dir, PATHSEP);
-	SaveOrLoad(buf, SL_SAVE);
+	SaveOrLoad("exit.sav", SL_SAVE, AUTOSAVE_DIR);
 }
 
 #if 0
--- a/src/saveload.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/saveload.h	Sun Jun 17 21:31:00 2007 +0000
@@ -5,6 +5,8 @@
 #ifndef SAVELOAD_H
 #define SAVELOAD_H
 
+#include "fileio.h"
+
 #ifdef SIZE_MAX
 #undef SIZE_MAX
 #endif
@@ -26,7 +28,7 @@
 	SL_BMP      =  4,
 };
 
-SaveOrLoadResult SaveOrLoad(const char *filename, int mode);
+SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb);
 void WaitTillSaved();
 void DoExitSave();
 
--- a/src/screenshot.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/screenshot.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -8,12 +8,15 @@
 #include "table/strings.h"
 #include "gfx.h"
 #include "hal.h"
+#include "fileio.h"
 #include "viewport.h"
 #include "player.h"
 #include "screenshot.h"
 #include "variables.h"
 #include "date.h"
+#include "string.h"
 #include "helpers.hpp"
+#include "blitter/factory.hpp"
 #include "fileio.h"
 
 char _screenshot_format_name[8];
@@ -22,7 +25,7 @@
 ScreenshotType current_screenshot_type;
 
 /* called by the ScreenShot proc to generate screenshot lines. */
-typedef void ScreenshotCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n);
+typedef void ScreenshotCallback(void *userdata, void *buf, uint y, uint pitch, uint n);
 typedef bool ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette);
 
 struct ScreenshotFormat {
@@ -72,10 +75,11 @@
 	FILE *f;
 	uint i, padw;
 	uint n, maxlines;
+	uint pal_size = 0;
+	uint bpp = pixelformat / 8;
 
-	/* only implemented for 8bit images so far. */
-	if (pixelformat != 8)
-		return false;
+	/* only implemented for 8bit and 32bit images so far. */
+	if (pixelformat != 8 && pixelformat != 32) return false;
 
 	f = fopen(name, "wb");
 	if (f == NULL) return false;
@@ -83,18 +87,20 @@
 	/* each scanline must be aligned on a 32bit boundary */
 	padw = ALIGN(w, 4);
 
+	if (pixelformat == 8) pal_size = sizeof(RgbQuad) * 256;
+
 	/* setup the file header */
 	bfh.type = TO_LE16('MB');
-	bfh.size = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256 + padw * h);
+	bfh.size = TO_LE32(sizeof(bfh) + sizeof(bih) + pal_size + padw * h * bpp);
 	bfh.reserved = 0;
-	bfh.off_bits = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256);
+	bfh.off_bits = TO_LE32(sizeof(bfh) + sizeof(bih) + pal_size);
 
 	/* setup the info header */
 	bih.size = TO_LE32(sizeof(BitmapInfoHeader));
 	bih.width = TO_LE32(w);
 	bih.height = TO_LE32(h);
 	bih.planes = TO_LE16(1);
-	bih.bitcount = TO_LE16(8);
+	bih.bitcount = TO_LE16(pixelformat);
 	bih.compression = 0;
 	bih.sizeimage = 0;
 	bih.xpels = 0;
@@ -102,24 +108,26 @@
 	bih.clrused = 0;
 	bih.clrimp = 0;
 
-	/* convert the palette to the windows format */
-	for (i = 0; i != 256; i++) {
-		rq[i].red   = palette[i].r;
-		rq[i].green = palette[i].g;
-		rq[i].blue  = palette[i].b;
-		rq[i].reserved = 0;
+	if (pixelformat == 8) {
+		/* convert the palette to the windows format */
+		for (i = 0; i != 256; i++) {
+			rq[i].red   = palette[i].r;
+			rq[i].green = palette[i].g;
+			rq[i].blue  = palette[i].b;
+			rq[i].reserved = 0;
+		}
 	}
 
 	/* write file header and info header and palette */
 	if (fwrite(&bfh, sizeof(bfh), 1, f) != 1) return false;
 	if (fwrite(&bih, sizeof(bih), 1, f) != 1) return false;
-	if (fwrite(rq, sizeof(rq), 1, f) != 1) return false;
+	if (pixelformat == 8) if (fwrite(rq, sizeof(rq), 1, f) != 1) return false;
 
 	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / padw, 16, 128);
 
 	/* now generate the bitmap bits */
-	Pixel *buff = MallocT<Pixel>(padw * maxlines); // by default generate 128 lines at a time.
+	void *buff = MallocT<uint8>(padw * maxlines * bpp); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		fclose(f);
 		return false;
@@ -137,7 +145,7 @@
 
 		/* write each line */
 		while (n)
-			if (fwrite(buff + (--n) * padw, padw, 1, f) != 1) {
+			if (fwrite((uint8 *)buff + (--n) * padw * bpp, padw * bpp, 1, f) != 1) {
 				free(buff);
 				fclose(f);
 				return false;
@@ -173,12 +181,12 @@
 	FILE *f;
 	uint i, y, n;
 	uint maxlines;
+	uint bpp = pixelformat / 8;
 	png_structp png_ptr;
 	png_infop info_ptr;
 
-	/* only implemented for 8bit images so far. */
-	if (pixelformat != 8)
-		return false;
+	/* only implemented for 8bit and 32bit images so far. */
+	if (pixelformat != 8 && pixelformat != 32) return false;
 
 	f = fopen(name, "wb");
 	if (f == NULL) return false;
@@ -207,31 +215,53 @@
 
 	png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
 
-	png_set_IHDR(png_ptr, info_ptr, w, h, pixelformat, PNG_COLOR_TYPE_PALETTE,
+	png_set_IHDR(png_ptr, info_ptr, w, h, 8, pixelformat == 8 ? PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_RGB,
 		PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
-	/* convert the palette to the .PNG format. */
-	for (i = 0; i != 256; i++) {
-		rq[i].red   = palette[i].r;
-		rq[i].green = palette[i].g;
-		rq[i].blue  = palette[i].b;
+	if (pixelformat == 8) {
+		/* convert the palette to the .PNG format. */
+		for (i = 0; i != 256; i++) {
+			rq[i].red   = palette[i].r;
+			rq[i].green = palette[i].g;
+			rq[i].blue  = palette[i].b;
+		}
+
+		png_set_PLTE(png_ptr, info_ptr, rq, 256);
 	}
 
-	png_set_PLTE(png_ptr, info_ptr, rq, 256);
 	png_write_info(png_ptr, info_ptr);
 	png_set_flush(png_ptr, 512);
 
+	if (pixelformat == 32) {
+		png_color_8 sig_bit;
+
+		/* Save exact color/alpha resolution */
+		sig_bit.alpha = 0;
+		sig_bit.blue  = 8;
+		sig_bit.green = 8;
+		sig_bit.red   = 8;
+		sig_bit.gray  = 8;
+		png_set_sBIT(png_ptr, info_ptr, &sig_bit);
+
+#ifdef TTD_LITTLE_ENDIAN
+		png_set_bgr(png_ptr);
+		png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
+#else
+		png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
+#endif
+	}
+
 	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / w, 16, 128);
 
 	/* now generate the bitmap bits */
-	Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
+	void *buff = MallocT<uint8>(w * maxlines * bpp); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		png_destroy_write_struct(&png_ptr, &info_ptr);
 		fclose(f);
 		return false;
 	}
-	memset(buff, 0, w * maxlines); // zero the buffer to have the padding bytes set to 0
+	memset(buff, 0, w * maxlines * bpp);
 
 	y = 0;
 	do {
@@ -244,7 +274,7 @@
 
 		/* write them to png */
 		for (i = 0; i != n; i++)
-			png_write_row(png_ptr, buff + i * w);
+			png_write_row(png_ptr, (png_bytep)buff + i * w * bpp);
 	} while (y != h);
 
 	png_write_end(png_ptr, info_ptr);
@@ -288,6 +318,10 @@
 	PcxHeader pcx;
 	bool success;
 
+	if (pixelformat == 32) {
+		DEBUG(misc, 0, "Can't convert a 32bpp screenshot to PCX format. Please pick an other format.");
+		return false;
+	}
 	if (pixelformat != 8 || w == 0)
 		return false;
 
@@ -321,7 +355,7 @@
 	maxlines = clamp(65536 / w, 16, 128);
 
 	/* now generate the bitmap bits */
-	Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
+	uint8 *buff = MallocT<uint8>(w * maxlines); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		fclose(f);
 		return false;
@@ -340,14 +374,14 @@
 
 		/* write them to pcx */
 		for (i = 0; i != n; i++) {
-			const Pixel* bufp = buff + i * w;
+			const uint8 *bufp = buff + i * w;
 			byte runchar = bufp[0];
 			uint runcount = 1;
 			uint j;
 
 			/* for each pixel... */
 			for (j = 1; j < w; j++) {
-				Pixel ch = bufp[j];
+				uint8 ch = bufp[j];
 
 				if (ch != runchar || runcount >= 0x3f) {
 					if (runcount > 1 || (runchar & 0xC0) == 0xC0)
@@ -447,17 +481,15 @@
 }
 
 /* screenshot generator that dumps the current video buffer */
-static void CurrentScreenCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
+static void CurrentScreenCallback(void *userdata, void *buf, uint y, uint pitch, uint n)
 {
-	for (; n > 0; --n) {
-		memcpy(buf, _screen.dst_ptr + y * _screen.pitch, _screen.width * sizeof(Pixel));
-		++y;
-		buf += pitch;
-	}
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	void *src = blitter->MoveTo(_screen.dst_ptr, 0, y);
+	blitter->CopyToBuffer(src, buf, _screen.width, n, pitch);
 }
 
 /* generate a large piece of the world */
-static void LargeWorldCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
+static void LargeWorldCallback(void *userdata, void *buf, uint y, uint pitch, uint n)
 {
 	ViewPort *vp = (ViewPort *)userdata;
 	DrawPixelInfo dpi, *old_dpi;
@@ -492,12 +524,12 @@
 
 static char *MakeScreenshotName(const char *ext)
 {
-	static char filename[256];
-	char *base;
+	static char filename[MAX_PATH];
 	int serial;
+	size_t len;
 
 	if (_game_mode == GM_EDITOR || _game_mode == GM_MENU || _local_player == PLAYER_SPECTATOR) {
-		sprintf(_screenshot_name, "screenshot");
+		ttd_strlcpy(_screenshot_name, "screenshot", lengthof(_screenshot_name));
 	} else {
 		const Player* p = GetPlayer(_local_player);
 		SetDParam(0, p->name_1);
@@ -506,16 +538,16 @@
 		GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
 	}
 
+	/* Add extension to screenshot file */
 	SanitizeFilename(_screenshot_name);
-	base = strchr(_screenshot_name, 0);
-	base[0] = '.'; strcpy(base + 1, ext);
+	len = strlen(_screenshot_name);
+	snprintf(&_screenshot_name[len], lengthof(_screenshot_name) - len, ".%s", ext);
 
-	serial = 0;
-	for (;;) {
-		snprintf(filename, sizeof(filename), "%s%s", _paths.personal_dir, _screenshot_name);
-		if (!FileExists(filename))
-			break;
-		sprintf(base, " #%d.%s", ++serial, ext);
+	for (serial = 1;; serial++) {
+		snprintf(filename, lengthof(filename), "%s%s", _personal_dir, _screenshot_name);
+		if (!FileExists(filename)) break;
+		/* If file exists try another one with same name, but just with a higher index */
+		snprintf(&_screenshot_name[len], lengthof(_screenshot_name) - len, "#%d.%s", serial, ext);
 	}
 
 	return filename;
@@ -534,7 +566,7 @@
 static bool MakeSmallScreenshot()
 {
 	const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
-	return sf->proc(MakeScreenshotName(sf->extension), CurrentScreenCallback, NULL, _screen.width, _screen.height, 8, _cur_palette);
+	return sf->proc(MakeScreenshotName(sf->extension), CurrentScreenCallback, NULL, _screen.width, _screen.height, BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(), _cur_palette);
 }
 
 static bool MakeWorldScreenshot()
@@ -553,7 +585,7 @@
 	vp.height = vp.virtual_height;
 
 	sf = _screenshot_formats + _cur_screenshot_format;
-	return sf->proc(MakeScreenshotName(sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, 8, _cur_palette);
+	return sf->proc(MakeScreenshotName(sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(), _cur_palette);
 }
 
 bool MakeScreenshot()
--- a/src/settings.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/settings.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -1219,14 +1219,13 @@
 
 /* win32_v.c only settings */
 #ifdef WIN32
-extern bool _force_full_redraw, _double_size, _window_maximize;
+extern bool _force_full_redraw, _window_maximize;
 extern uint _display_hz, _fullscreen_bpp;
 
 static const SettingDescGlobVarList _win32_settings[] = {
 	 SDTG_VAR("display_hz",     SLE_UINT, S, 0, _display_hz,       0, 0, 120, 0, STR_NULL, NULL),
 	SDTG_BOOL("force_full_redraw",        S, 0, _force_full_redraw,false,        STR_NULL, NULL),
 	 SDTG_VAR("fullscreen_bpp", SLE_UINT, S, 0, _fullscreen_bpp,   8, 8,  32, 0, STR_NULL, NULL),
-	SDTG_BOOL("double_size",              S, 0, _double_size,      false,        STR_NULL, NULL),
 	SDTG_BOOL("window_maximize",          S, 0, _window_maximize,  false,        STR_NULL, NULL),
 	 SDTG_END()
 };
@@ -1251,6 +1250,9 @@
 	  SDTG_VAR("small_size",       SLE_UINT, S, 0, _freetype.small_size,   6, 0, 72, 0, STR_NULL, NULL),
 	  SDTG_VAR("medium_size",      SLE_UINT, S, 0, _freetype.medium_size, 10, 0, 72, 0, STR_NULL, NULL),
 	  SDTG_VAR("large_size",       SLE_UINT, S, 0, _freetype.large_size,  16, 0, 72, 0, STR_NULL, NULL),
+	 SDTG_BOOL("small_aa",                   S, 0, _freetype.small_aa,    false,    STR_NULL, NULL),
+	 SDTG_BOOL("medium_aa",                  S, 0, _freetype.medium_aa,   false,    STR_NULL, NULL),
+	 SDTG_BOOL("large_aa",                   S, 0, _freetype.large_aa,    false,    STR_NULL, NULL),
 #endif
 	  SDTG_VAR("sprite_cache_size",SLE_UINT, S, 0, _sprite_cache_size,     4, 1, 64, 0, STR_NULL, NULL),
 	  SDTG_END()
--- a/src/ship_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/ship_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -280,7 +280,8 @@
 
 	if (order->type  == v->current_order.type &&
 			order->flags == v->current_order.flags &&
-			order->dest  == v->current_order.dest)
+			order->dest  == v->current_order.dest &&
+			(order->type != OT_GOTO_STATION || GetStation(order->dest)->dock_tile != 0))
 		return;
 
 	v->current_order = *order;
@@ -294,6 +295,8 @@
 		st = GetStation(order->dest);
 		if (st->dock_tile != 0) {
 			v->dest_tile = TILE_ADD(st->dock_tile, ToTileIndexDiff(GetDockOffset(st->dock_tile)));
+		} else {
+			v->cur_order_index++;
 		}
 	} else if (order->type == OT_GOTO_DEPOT) {
 		v->dest_tile = GetDepot(order->dest)->xy;
--- a/src/smallmap_gui.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/smallmap_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -25,6 +25,7 @@
 #include "town.h"
 #include "sound.h"
 #include "variables.h"
+#include "blitter/factory.hpp"
 
 static const Widget _smallmap_widgets[] = {
 {  WWT_CLOSEBOX,   RESIZE_NONE,    13,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},
@@ -167,41 +168,27 @@
 	_legend_land_owners,
 };
 
-#if defined(OTTD_ALIGNMENT)
-	static inline void WRITE_PIXELS(Pixel* d, uint32 val)
-	{
-#	if defined(TTD_BIG_ENDIAN)
-		d[0] = GB(val, 24, 8);
-		d[1] = GB(val, 16, 8);
-		d[2] = GB(val,  8, 8);
-		d[3] = GB(val,  0, 8);
-#	elif defined(TTD_LITTLE_ENDIAN)
-		d[0] = GB(val,  0, 8);
-		d[1] = GB(val,  8, 8);
-		d[2] = GB(val, 16, 8);
-		d[3] = GB(val, 24, 8);
-#	endif
-	}
+static inline void WRITE_PIXELS(void *d, uint32 val)
+{
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	uint8 *val8 = (uint8 *)&val;
 
-/* need to use OR, otherwise we will overwrite the wrong pixels at the edges :( */
-	static inline void WRITE_PIXELS_OR(Pixel *d, uint32 val)
-	{
-#	if defined(TTD_BIG_ENDIAN)
-		d[0] |= GB(val, 24, 8);
-		d[1] |= GB(val, 16, 8);
-		d[2] |= GB(val,  8, 8);
-		d[3] |= GB(val,  0, 8);
-#	elif defined(TTD_LITTLE_ENDIAN)
-		d[0] |= GB(val,  0, 8);
-		d[1] |= GB(val,  8, 8);
-		d[2] |= GB(val, 16, 8);
-		d[3] |= GB(val, 24, 8);
-#	endif
-	}
-#else
-#	define WRITE_PIXELS(dst, val)   *(uint32*)(dst) = (val);
-#	define WRITE_PIXELS_OR(dst,val) *(uint32*)(dst) |= (val);
-#endif
+	blitter->SetPixel(d, 0, 0, val8[0]);
+	blitter->SetPixel(d, 1, 0, val8[1]);
+	blitter->SetPixel(d, 2, 0, val8[2]);
+	blitter->SetPixel(d, 3, 0, val8[3]);
+}
+
+static inline void WRITE_PIXELS_OR(void *d, uint32 val)
+{
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	uint8 *val8 = (uint8 *)&val;
+
+	blitter->SetPixelIfEmpty(d, 0, 0, val8[0]);
+	blitter->SetPixelIfEmpty(d, 1, 0, val8[1]);
+	blitter->SetPixelIfEmpty(d, 2, 0, val8[2]);
+	blitter->SetPixelIfEmpty(d, 3, 0, val8[3]);
+}
 
 #define MKCOLOR(x) TO_LE32X(x)
 
@@ -296,9 +283,10 @@
  * @param proc Pointer to the colour function
  * @see GetSmallMapPixels(TileIndex)
  */
-static void DrawSmallMapStuff(Pixel *dst, uint xc, uint yc, int pitch, int reps, uint32 mask, GetSmallMapPixels *proc)
+static void DrawSmallMapStuff(void *dst, uint xc, uint yc, int pitch, int reps, uint32 mask, GetSmallMapPixels *proc)
 {
-	Pixel *dst_ptr_end = _screen.dst_ptr + _screen.width * _screen.height - _screen.width;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	void *dst_ptr_end = blitter->MoveTo(_screen.dst_ptr, _screen.width, _screen.height - 1);
 
 	do {
 		/* check if the tile (xc,yc) is within the map range */
@@ -308,7 +296,7 @@
 				WRITE_PIXELS_OR(dst, proc(TileXY(xc, yc)) & mask);
 		}
 	/* switch to next tile in the column */
-	} while (xc++, yc++, dst += pitch, --reps != 0);
+	} while (xc++, yc++, dst = blitter->MoveTo(dst, pitch, 0), --reps != 0);
 }
 
 
@@ -528,9 +516,10 @@
  */
 static void DrawSmallMap(DrawPixelInfo *dpi, Window *w, int type, bool show_towns)
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	DrawPixelInfo *old_dpi;
 	int dx,dy, x, y, x2, y2;
-	Pixel *ptr;
+	void *ptr;
 	int tile_x;
 	int tile_y;
 	ViewPort *vp;
@@ -582,7 +571,7 @@
 		}
 	}
 
-	ptr = dpi->dst_ptr - dx - 4;
+	ptr = blitter->MoveTo(dpi->dst_ptr, -dx - 4, 0);
 	x = - dx - 4;
 	y = 0;
 
@@ -609,7 +598,6 @@
 		/* number of lines */
 		reps = (dpi->height - y + 1) / 2;
 		if (reps > 0) {
-//			assert(ptr >= dpi->dst_ptr);
 			DrawSmallMapStuff(ptr, tile_x, tile_y, dpi->pitch * 2, reps, mask, _smallmap_draw_procs[type]);
 		}
 
@@ -617,13 +605,13 @@
 		if (y == 0) {
 			tile_y++;
 			y++;
-			ptr += dpi->pitch;
+			ptr = blitter->MoveTo(ptr, 0, 1);
 		} else {
 			tile_x--;
 			y--;
-			ptr -= dpi->pitch;
+			ptr = blitter->MoveTo(ptr, 0, -1);
 		}
-		ptr += 2;
+		ptr = blitter->MoveTo(ptr, 2, 0);
 		x += 2;
 	}
 
@@ -666,12 +654,11 @@
 				}
 
 				/* Calculate pointer to pixel and the color */
-				ptr = dpi->dst_ptr + y * dpi->pitch + x;
 				color = (type == 1) ? _vehicle_type_colors[v->type] : 0xF;
 
 				/* And draw either one or two pixels depending on clipping */
-				ptr[0] = color;
-				if (!skip) ptr[1] = color;
+				blitter->SetPixel(dpi->dst_ptr, x, y, color);
+				if (!skip) blitter->SetPixel(dpi->dst_ptr, x + 1, y, color);
 			}
 		}
 	}
--- a/src/sound.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/sound.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -211,7 +211,7 @@
 
 			StartSound(
 				sound,
-				left / (vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
+				left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
 				(GetSound(sound)->volume * msf.effect_vol * _vol_factor_by_zoom[vp->zoom]) >> 15
 			);
 			return;
--- a/src/spritecache.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/spritecache.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -4,6 +4,8 @@
 
 #include "stdafx.h"
 #include "openttd.h"
+#include "variables.h"
+#include "string.h"
 #include "debug.h"
 #include "functions.h"
 #include "macros.h"
@@ -12,7 +14,10 @@
 #include "fileio.h"
 #include "helpers.hpp"
 #include "spriteloader/grf.hpp"
-#include "blitter/blitter.hpp"
+#ifdef WITH_PNG
+#include "spriteloader/png.hpp"
+#endif /* WITH_PNG */
+#include "blitter/factory.hpp"
 
 /* Default of 4MB spritecache */
 uint _sprite_cache_size = 4;
@@ -22,6 +27,8 @@
 	void *ptr;
 	uint32 file_pos;
 	int16 lru;
+	uint32 id;
+	const char *grf_name;
 };
 
 
@@ -132,6 +139,28 @@
 		file_pos = GetSpriteCache(SPR_IMG_QUERY)->file_pos;
 	}
 
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 32) {
+#ifdef WITH_PNG
+		/* Try loading 32bpp graphics in case we are 32bpp output */
+		SpriteLoaderPNG sprite_loader;
+		SpriteLoader::Sprite sprite;
+
+		if (sprite_loader.LoadSprite(&sprite, sc->grf_name, sc->id)) {
+			sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
+			free(sprite.data);
+
+			return sc->ptr;
+		}
+		/* If the PNG couldn't be loaded, fall back to 8bpp grfs */
+#else
+		static bool show_once = true;
+		if (show_once) {
+			DEBUG(misc, 0, "You are running a 32bpp blitter, but this build is without libpng support; falling back to 8bpp graphics");
+			show_once = false;
+		}
+#endif /* WITH_PNG */
+	}
+
 	FioSeekToFile(file_pos);
 
 	/* Read the size and type */
@@ -203,7 +232,7 @@
 	SpriteLoaderGrf sprite_loader;
 	SpriteLoader::Sprite sprite;
 
-	if (!sprite_loader.LoadSprite(&sprite, file_pos)) return NULL;
+	if (!sprite_loader.LoadSprite(&sprite, sc->grf_name, file_pos)) return NULL;
 	if (id == 142) sprite.height = 10; // Compensate for a TTD bug
 	sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
 	free(sprite.data);
@@ -212,7 +241,7 @@
 }
 
 
-bool LoadNextSprite(int load_index, byte file_index)
+bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id)
 {
 	SpriteCache *sc;
 	uint32 file_pos = FioGetPos() | (file_index << 24);
@@ -227,6 +256,20 @@
 	sc->file_pos = file_pos;
 	sc->ptr = NULL;
 	sc->lru = 0;
+	sc->id = file_sprite_id;
+
+	const char *fio_grf_name = FioGetFilename();
+	const char *t = strrchr(fio_grf_name, PATHSEPCHAR);
+	char *grf_name;
+	if (t == NULL) grf_name = strdup(fio_grf_name);
+	else           grf_name = strdup(t);
+	/* Make the string lowercase and strip extension */
+	char *t2 = strrchr(grf_name, '.');
+	if (t2 != NULL) *t2 = '\0';
+	strtolower(grf_name);
+
+	free((char *)sc->grf_name);
+	sc->grf_name = grf_name;
 
 	return true;
 }
@@ -239,6 +282,8 @@
 
 	scnew->file_pos = scold->file_pos;
 	scnew->ptr = NULL;
+	scnew->id = scold->id;
+	scnew->grf_name = strdup(scold->grf_name);
 }
 
 
--- a/src/spritecache.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/spritecache.h	Sun Jun 17 21:31:00 2007 +0000
@@ -31,7 +31,7 @@
 void GfxInitSpriteMem();
 void IncreaseSpriteLRU();
 
-bool LoadNextSprite(int load_index, byte file_index);
+bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id);
 void DupSprite(SpriteID old_spr, SpriteID new_spr);
 void SkipSprites(uint count);
 
--- a/src/spriteloader/grf.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/spriteloader/grf.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -8,7 +8,7 @@
 #include "../debug.h"
 #include "grf.hpp"
 
-bool SpriteLoaderGrf::LoadSprite(SpriteLoader::Sprite *sprite, uint32 file_pos)
+bool SpriteLoaderGrf::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos)
 {
 	/* Open the right file and go to the correct position */
 	FioSeekToFile(file_pos);
@@ -95,6 +95,10 @@
 			sprite->data[i].m = dest[i];
 	}
 
+	/* Make sure to mark all transparent pixels transparent on the alpha channel too */
+	for (int i = 0; i < sprite->width * sprite->height; i++)
+		if (sprite->data[i].m != 0) sprite->data[i].a = 0xFF;
+
 	free(dest_orig);
 	return true;
 }
--- a/src/spriteloader/grf.hpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/spriteloader/grf.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -12,7 +12,7 @@
 	/**
 	 * Load a sprite from the disk and return a sprite struct which is the same for all loaders.
 	 */
-	bool LoadSprite(SpriteLoader::Sprite *sprite, uint32 file_pos);
+	bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos);
 };
 
 #endif /* SPRITELOADER_GRF_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/png.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,186 @@
+/* $Id$ */
+
+/** @file grf.cpp */
+
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "../fileio.h"
+#include "../variables.h"
+#include "../debug.h"
+#include "png.hpp"
+#include <png.h>
+
+#define PNG_SLOT 62
+
+static void PNGAPI png_my_read(png_structp png_ptr, png_bytep data, png_size_t length)
+{
+	FioReadBlock(data, length);
+}
+
+static void PNGAPI png_my_error(png_structp png_ptr, png_const_charp message)
+{
+	DEBUG(sprite, 0, "ERROR (libpng): %s - %s", message, (char *)png_get_error_ptr(png_ptr));
+	longjmp(png_ptr->jmpbuf, 1);
+}
+
+static void PNGAPI png_my_warning(png_structp png_ptr, png_const_charp message)
+{
+	DEBUG(sprite, 0, "WARNING (libpng): %s - %s", message, (char *)png_get_error_ptr(png_ptr));
+}
+
+static bool OpenPNGFile(const char *filename, uint32 id, bool mask)
+{
+	char png_file[MAX_PATH];
+
+	snprintf(png_file, sizeof(png_file), "sprites" PATHSEP "%s" PATHSEP "%d%s.png", filename, id, mask ? "m" : "");
+	if (FioCheckFileExists(png_file)) {
+		FioOpenFile(PNG_SLOT, png_file);
+		return true;
+	}
+
+	/* TODO -- Add TAR support */
+	return false;
+}
+
+static bool LoadPNG(SpriteLoader::Sprite *sprite, const char *filename, uint32 id, bool mask)
+{
+	png_byte header[8];
+	png_structp png_ptr;
+	png_infop info_ptr, end_info;
+	uint bit_depth, color_type;
+	uint i, pixelsize;
+	png_bytep row_pointer;
+	SpriteLoader::CommonPixel *dst;
+
+	if (!OpenPNGFile(filename, id, mask)) return mask; // If mask is true, and file not found, continue true anyway, as it isn't a show-stopper
+
+	/* Check the header */
+	FioReadBlock(header, 8);
+	if (png_sig_cmp(header, 0, 8) != 0) return false;
+
+	/* Create the reader */
+	png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, png_my_error, png_my_warning);
+	if (png_ptr == NULL) return false;
+
+	/* Create initial stuff */
+	info_ptr = png_create_info_struct(png_ptr);
+	if (info_ptr == NULL) {
+		png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+		return false;
+	}
+	end_info = png_create_info_struct(png_ptr);
+	if (end_info == NULL) {
+		png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+		return false;
+	}
+
+	/* Make sure that upon error, we can clean up graceful */
+	if (setjmp(png_jmpbuf(png_ptr))) {
+		png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+		return false;
+	}
+
+	/* Read the file */
+	png_set_read_fn(png_ptr, NULL, png_my_read);
+	png_set_sig_bytes(png_ptr, 8);
+
+	png_read_info(png_ptr, info_ptr);
+
+	if (!mask) {
+		/* Read the text chunks */
+		png_textp text_ptr;
+		int num_text = 0;
+		png_get_text(png_ptr, info_ptr, &text_ptr, &num_text);
+		if (num_text == 0) DEBUG(misc, 0, "Warning: PNG Sprite '%s/%d.png' doesn't have x_offs and y_offs; expect graphical problems", filename, id);
+		for (int i = 0; i < num_text; i++) {
+			/* x_offs and y_offs are in the text-chunk of PNG */
+			if (strcmp("x_offs", text_ptr[i].key) == 0) sprite->x_offs = strtol(text_ptr[i].text, NULL, 0);
+			if (strcmp("y_offs", text_ptr[i].key) == 0) sprite->y_offs = strtol(text_ptr[i].text, NULL, 0);
+		}
+
+		sprite->height = info_ptr->height;
+		sprite->width  = info_ptr->width;
+		sprite->data = CallocT<SpriteLoader::CommonPixel>(sprite->width * sprite->height);
+	}
+
+	bit_depth  = png_get_bit_depth(png_ptr, info_ptr);
+	color_type = png_get_color_type(png_ptr, info_ptr);
+
+	if (mask && (bit_depth != 8 || color_type != PNG_COLOR_TYPE_PALETTE)) {
+		DEBUG(misc, 0, "Ignoring mask for SpriteID %d as it isn't a 8 bit palette image", id);
+		return true;
+	}
+
+	if (!mask) {
+		if (bit_depth == 16) png_set_strip_16(png_ptr);
+
+		if (color_type == PNG_COLOR_TYPE_PALETTE) {
+			png_set_palette_to_rgb(png_ptr);
+			color_type = PNG_COLOR_TYPE_RGB;
+		}
+		if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+			png_set_gray_to_rgb(png_ptr);
+			color_type = PNG_COLOR_TYPE_RGB;
+		}
+
+#ifdef TTD_LITTLE_ENDIAN
+		png_set_bgr(png_ptr);
+#else
+		if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_swap_alpha(png_ptr);
+#endif
+
+		if (color_type == PNG_COLOR_TYPE_RGB) {
+#ifdef TTD_LITTLE_ENDIAN
+			png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
+#else
+			png_set_filler(png_ptr, 0xff, PNG_FILLER_BEFORE);
+#endif
+		}
+
+		pixelsize = sizeof(uint32);
+	} else {
+		pixelsize = sizeof(uint8);
+	}
+
+	row_pointer = (png_byte *)malloc(info_ptr->width * pixelsize);
+	if (row_pointer == NULL) {
+		png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+		return false;
+	}
+
+	for (i = 0; i < info_ptr->height; i++) {
+		png_read_row(png_ptr, row_pointer, NULL);
+
+		dst = sprite->data + i * info_ptr->width;
+
+		for (uint x = 0; x < info_ptr->width; x++) {
+			if (mask) {
+				if (row_pointer[x * sizeof(uint8)] != 0) {
+					dst[x].b = 0;
+					dst[x].g = 0;
+					dst[x].r = 0;
+					/* Alpha channel is used from the original image (to allow transparency in remap colors) */
+					dst[x].m = row_pointer[x * sizeof(uint8)];
+				}
+			} else {
+				dst[x].b = row_pointer[x * sizeof(uint32) + 0];
+				dst[x].g = row_pointer[x * sizeof(uint32) + 1];
+				dst[x].r = row_pointer[x * sizeof(uint32) + 2];
+				dst[x].a = row_pointer[x * sizeof(uint32) + 3];
+				dst[x].m = 0;
+			}
+		}
+	}
+
+	free(row_pointer);
+	png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+
+	return true;
+}
+
+bool SpriteLoaderPNG::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos)
+{
+	if (!LoadPNG(sprite, filename, file_pos, false)) return false;
+	if (!LoadPNG(sprite, filename, file_pos, true)) return false;
+	return true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/png.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -0,0 +1,18 @@
+/* $Id$ */
+
+/** @file png.hpp */
+
+#ifndef SPRITELOADER_PNG_HPP
+#define SPRITELOADER_PNG_HPP
+
+#include "spriteloader.hpp"
+
+class SpriteLoaderPNG : public SpriteLoader {
+public:
+	/**
+	 * Load a sprite from the disk and return a sprite struct which is the same for all loaders.
+	 */
+	bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos);
+};
+
+#endif /* SPRITELOADER_PNG_HPP */
--- a/src/spriteloader/spriteloader.hpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/spriteloader/spriteloader.hpp	Sun Jun 17 21:31:00 2007 +0000
@@ -26,7 +26,7 @@
 	/**
 	 * Load a sprite from the disk and return a sprite struct which is the same for all loaders.
 	 */
-	virtual bool LoadSprite(SpriteLoader::Sprite *sprite, uint32 file_pos) = 0;
+	virtual bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos) = 0;
 
 	virtual ~SpriteLoader() { }
 };
--- a/src/station_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/station_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -626,7 +626,7 @@
 			return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
 		}
 
-		if (!EnsureNoVehicle(tile_cur)) return CMD_ERROR;
+		if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR;
 
 		uint z;
 		Slope tileh = GetTileSlope(tile_cur, &z);
--- a/src/stdafx.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/stdafx.h	Sun Jun 17 21:31:00 2007 +0000
@@ -288,11 +288,7 @@
 # define TO_BE32X(x)  BSWAP32(x)
 #endif /* TTD_BIG_ENDIAN */
 
-#if !defined(GAME_DATA_DIR)
-# define GAME_DATA_DIR ""
-#endif
-
-#if !defined(PERSONAL_DIR)
+#if !defined(WITH_PERSONAL_DIR)
 # define PERSONAL_DIR ""
 #endif
 
--- a/src/strings.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/strings.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -23,6 +23,7 @@
 #include "music.h"
 #include "date.h"
 #include "industry.h"
+#include "fileio.h"
 #include "helpers.hpp"
 #include "cargotype.h"
 #include "group.h"
@@ -1101,7 +1102,11 @@
 	}
 }
 
+#ifdef ENABLE_NETWORK
 extern void SortNetworkLanguages();
+#else /* ENABLE_NETWORK */
+static inline void SortNetworkLanguages() {}
+#endif /* ENABLE_NETWORK */
 extern void SortTownGeneratorNames();
 
 bool ReadLanguagePack(int lang_index)
@@ -1291,8 +1296,15 @@
  */
 void InitializeLanguagePacks()
 {
+	Searchpath sp;
 	Language files[MAX_LANG];
-	uint language_count = GetLanguageList(files, 0, lengthof(files), _paths.lang_dir);
+	uint language_count = 0;
+
+	FOR_ALL_SEARCHPATHS(sp) {
+		char path[MAX_PATH];
+		FioAppendDirectory(path, lengthof(path), sp, LANG_DIR);
+		language_count += GetLanguageList(files, language_count, lengthof(files), path);
+	}
 	if (language_count == 0) error("No available language packs (invalid versions?)");
 
 	/* Sort the language names alphabetically */
--- a/src/table/files.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/table/files.h	Sun Jun 17 21:31:00 2007 +0000
@@ -61,7 +61,7 @@
 	{ "elrailsw.grf",  { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } },
 	{ "openttd.grf",   { 0x20, 0x64, 0x4a, 0xf6, 0x75, 0x26, 0x5b, 0x92, 0xbb, 0x6f, 0x8d, 0x0e, 0x34, 0x7e, 0xa6, 0xe3 } },
 	{ "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } },
-	{ "roadstops.grf", { 0x8c, 0xd9, 0x45, 0x21, 0x28, 0x82, 0x96, 0x45, 0x33, 0x22, 0x7a, 0xb9, 0x0d, 0xf3, 0x67, 0x4a } },
+	{ "roadstops.grf", { 0xa1, 0x5b, 0xb3, 0x52, 0x60, 0x12, 0x3c, 0xb7, 0x7b, 0x73, 0x09, 0xc1, 0x1a, 0xb4, 0xd0, 0xb8 } },
 	{ "group.grf",     { 0xe8, 0x52, 0x5f, 0x1c, 0x3e, 0xf9, 0x91, 0x9d, 0x0f, 0x70, 0x8c, 0x8a, 0x21, 0xa4, 0xc7, 0x02 } },
 	{ "tramtrkw.grf",  { 0x83, 0x0a, 0xf4, 0x9f, 0x29, 0x10, 0x48, 0xfd, 0x76, 0xe9, 0xda, 0xac, 0x5d, 0xa2, 0x30, 0x45 } },
 	{ "oneway.grf",    { 0xbb, 0xc6, 0xa3, 0xb2, 0xb3, 0xa0, 0xc9, 0x3c, 0xc9, 0xee, 0x24, 0x7c, 0xb6, 0x51, 0x74, 0x63 } },
--- a/src/table/station_land.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/table/station_land.h	Sun Jun 17 21:31:00 2007 +0000
@@ -961,29 +961,29 @@
 
 // drive-through truck stop X
 static const DrawTileSeqStruct _station_display_datas_0168[] = {
-	{  1,  0,  0,  14,  3, 10, SPR_TRUCK_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  1, 13,  0,  14,  1, 10, SPR_TRUCK_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  16,  3, 16, SPR_TRUCK_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0, 13,  0,  16,  3, 16, SPR_TRUCK_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
 // drive-through truck stop Y
 static const DrawTileSeqStruct _station_display_datas_0169[] = {
-	{ 13,  1,  0,  1, 14, 10, SPR_TRUCK_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  1,  0,  3, 14, 10, SPR_TRUCK_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{ 13,  0,  0,  3, 16, 16, SPR_TRUCK_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  3, 16, 16, SPR_TRUCK_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
 // drive-through bus stop X
 static const DrawTileSeqStruct _station_display_datas_0170[] = {
-	{  5,  0,  0,  8,  3, 10, SPR_BUS_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  5, 14,  0,  8,  1, 10, SPR_BUS_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  16,  3, 16, SPR_BUS_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0, 13,  0,  16,  3, 16, SPR_BUS_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
 // drive-through bus stop Y
 static const DrawTileSeqStruct _station_display_datas_0171[] = {
-	{ 13,  5,  0,  1,  8, 10, SPR_BUS_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  5,  0,  3,  8, 10, SPR_BUS_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{ 13,  0,  0,  3,  16, 16, SPR_BUS_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  3,  16, 16, SPR_BUS_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
--- a/src/texteff.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/texteff.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -16,6 +16,7 @@
 #include "string.h"
 #include "variables.h"
 #include "table/sprites.h"
+#include "blitter/factory.hpp"
 #include <stdarg.h> /* va_list */
 #include "date.h"
 
@@ -54,9 +55,7 @@
 /* The chatbox grows from the bottom so the coordinates are pixels from
  * the left and pixels from the bottom. The height is the maximum height */
 static const Oblong _textmsg_box = {10, 30, 500, 150};
-static Pixel _textmessage_backup[150 * 500]; // (height * width)
-
-extern void memcpy_pitch(void *dst, void *src, int w, int h, int srcpitch, int dstpitch);
+static uint8 _textmessage_backup[150 * 500 * 4]; // (height * width)
 
 static inline uint GetTextMessageCount()
 {
@@ -128,6 +127,7 @@
 void UndrawTextMessage()
 {
 	if (_textmessage_visible) {
+		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 		/* Sometimes we also need to hide the cursor
 		 *   This is because both textmessage and the cursor take a shot of the
 		 *   screen before drawing.
@@ -163,11 +163,7 @@
 
 		_textmessage_visible = false;
 		/* Put our 'shot' back to the screen */
-		memcpy_pitch(
-			_screen.dst_ptr + x + y * _screen.pitch,
-			_textmessage_backup,
-			width, height, _textmsg_box.width, _screen.pitch);
-
+		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height, _textmsg_box.width);
 		/* And make sure it is updated next time */
 		_video_driver->make_dirty(x, y, width, height);
 
@@ -202,6 +198,7 @@
 /** Draw the textmessage-box */
 void DrawTextMessage()
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	if (!_textmessage_dirty) return;
 
 	/* First undraw if needed */
@@ -227,10 +224,7 @@
 	if (width <= 0 || height <= 0) return;
 
 	/* Make a copy of the screen as it is before painting (for undraw) */
-	memcpy_pitch(
-		_textmessage_backup,
-		_screen.dst_ptr + x + y * _screen.pitch,
-		width, height, _screen.pitch, _textmsg_box.width);
+	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height, _textmsg_box.width);
 
 	_cur_dpi = &_screen; // switch to _screen painting
 
--- a/src/town_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/town_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -1668,7 +1668,7 @@
 		for (i = 0; i < HOUSE_MAX; i++) {
 			hs = GetHouseSpecs(i);
 			if ((~hs->building_availability & bitmask) == 0 && hs->enabled) {
-				if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
+				if (_loaded_newgrf_features.has_newhouses) {
 					probability_max += hs->probability;
 					cumulative_probs[num] = probability_max;
 				}
@@ -1677,7 +1677,7 @@
 		}
 
 		for (;;) {
-			if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
+			if (_loaded_newgrf_features.has_newhouses) {
 				uint r = RandomRange(probability_max);
 				for (i = 0; i < num; i++) if (cumulative_probs[i] >= r) break;
 
@@ -1688,7 +1688,7 @@
 
 			hs = GetHouseSpecs(house);
 
-			if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
+			if (_loaded_newgrf_features.has_newhouses) {
 				if (hs->override != 0) hs = GetHouseSpecs(hs->override);
 
 				if ((hs->extra_flags & BUILDING_IS_HISTORICAL) && !_generating_world) continue;
--- a/src/train_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/train_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -2732,10 +2732,10 @@
 			(v->u.rail.track == TRACK_BIT_WORMHOLE && (v->direction & 2) != (realcoll->direction & 2)))
 		return;
 
-	/* two drivers + passangers killed in train v */
+	/* two drivers + passengers killed in train v */
 	uint num = 2 + CountPassengersInTrain(v);
 	if (!(coll->vehstatus & VS_CRASHED))
-		/* two drivers + passangers killed in train coll (if it was not crashed already) */
+		/* two drivers + passengers killed in train coll (if it was not crashed already) */
 		num += 2 + CountPassengersInTrain(coll);
 
 	SetVehicleCrashed(v);
--- a/src/variables.h	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/variables.h	Sun Jun 17 21:31:00 2007 +0000
@@ -264,21 +264,6 @@
 
 VARDEF Cheats _cheats;
 
-struct Paths {
-	char *personal_dir;  // includes cfg file and save folder
-	char *game_data_dir; // includes data, gm, lang
-	char *data_dir;
-	char *gm_dir;
-	char *lang_dir;
-	char *save_dir;
-	char *autosave_dir;
-	char *scenario_dir;
-	char *heightmap_dir;
-	char *second_data_dir;
-};
-
-VARDEF Paths _paths;
-
 /* NOSAVE: Used in palette animations only, not really important. */
 VARDEF int _timer_counter;
 
--- a/src/vehicle.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/vehicle.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -43,7 +43,7 @@
 #include "group.h"
 #include "economy.h"
 
-#define INVALID_COORD (-0x8000)
+#define INVALID_COORD (0x7fffffff)
 #define GEN_HASH(x, y) ((GB((y), 6, 6) << 6) + GB((x), 7, 6))
 
 
@@ -456,12 +456,12 @@
 	return NULL;
 }
 
-static void UpdateNewVehiclePosHash(Vehicle *v)
+static void UpdateNewVehiclePosHash(Vehicle *v, bool remove)
 {
 	Vehicle **old_hash = v->old_new_hash;
 	Vehicle **new_hash;
 
-	if (v->tile == INVALID_TILE || v->tile == 0) {
+	if (remove) {
 		new_hash = NULL;
 	} else {
 		int x = GB(TileX(v->tile), HASH_RES, HASH_BITS);
@@ -503,7 +503,7 @@
 
 static void UpdateVehiclePosHash(Vehicle* v, int x, int y)
 {
-	UpdateNewVehiclePosHash(v);
+	UpdateNewVehiclePosHash(v, x == INVALID_COORD);
 
 	Vehicle **old_hash, **new_hash;
 	int old_x = v->left_coord;
@@ -540,6 +540,8 @@
 
 void ResetVehiclePosHash()
 {
+	Vehicle *v;
+	FOR_ALL_VEHICLES(v) { v->old_new_hash = NULL; }
 	memset(_vehicle_position_hash, 0, sizeof(_vehicle_position_hash));
 	memset(_new_vehicle_position_hash, 0, sizeof(_new_vehicle_position_hash));
 }
@@ -685,7 +687,6 @@
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
 	}
 
-	v->tile = INVALID_TILE;
 	UpdateVehiclePosHash(v, INVALID_COORD, 0);
 	v->next_hash = NULL;
 	v->next_new_hash = NULL;
@@ -888,17 +889,29 @@
 	const int b = dpi->top + dpi->height;
 
 	/* The hash area to scan */
-	const int xl = GB(l - 70, 7, 6);
-	const int xu = GB(r,      7, 6);
-	const int yl = GB(t - 70, 6, 6) << 6;
-	const int yu = GB(b,      6, 6) << 6;
-
-	int x;
-	int y;
-
-	for (y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) {
-		for (x = xl;; x = (x + 1) & 0x3F) {
-			const Vehicle *v = _vehicle_position_hash[(x + y) & 0xFFFF];
+	int xl, xu, yl, yu;
+
+	if (dpi->width + 70 < (1 << (7 + 6))) {
+		xl = GB(l - 70, 7, 6);
+		xu = GB(r,      7, 6);
+	} else {
+		/* scan whole hash row */
+		xl = 0;
+		xu = 0x3F;
+	}
+
+	if (dpi->height + 70 < (1 << (6 + 6))) {
+		yl = GB(t - 70, 6, 6) << 6;
+		yu = GB(b,      6, 6) << 6;
+	} else {
+		/* scan whole column */
+		yl = 0;
+		yu = 0x3F << 6;
+	}
+
+	for (int y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) {
+		for (int x = xl;; x = (x + 1) & 0x3F) {
+			const Vehicle *v = _vehicle_position_hash[x + y]; // already masked & 0xFFF
 
 			while (v != NULL) {
 				if (!(v->vehstatus & VS_HIDDEN) &&
--- a/src/video/cocoa_v.mm	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/video/cocoa_v.mm	Sun Jun 17 21:31:00 2007 +0000
@@ -71,6 +71,8 @@
 #include "../variables.h"
 #include "cocoa_v.h"
 #include "cocoa_keys.h"
+#include "../blitter/factory.hpp"
+#include "../fileio.h"
 
 #undef Point
 #undef Rect
@@ -950,6 +952,10 @@
 
 static void QZ_UpdateWindowPalette(uint start, uint count)
 {
+	/* We can only update the palette in 8bpp for now */
+	/* TODO -- We need support for other bpps too! */
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
+
 	uint i;
 
 	switch (_cocoa_video_data.device_bpp) {
@@ -1726,6 +1732,8 @@
 
 static void QZ_VideoInit()
 {
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 0) error("Can't use a blitter that blits 0 bpp for normal visuals");
+
 	memset(&_cocoa_video_data, 0, sizeof(_cocoa_video_data));
 
 	/* Initialize the video settings; this data persists between mode switches */
@@ -2047,6 +2055,22 @@
 	_cocoa_video_dialog = false;
 }
 
+/* This is needed since OS X application bundles do not have a
+ * current directory and the data files are 'somewhere' in the bundle */
+void cocoaSetApplicationBundleDir()
+{
+	char tmp[MAXPATHLEN];
+	CFURLRef url = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
+	if (CFURLGetFileSystemRepresentation(url, true, (unsigned char*)tmp, MAXPATHLEN)) {
+		AppendPathSeparator(tmp, lengthof(tmp));
+		_searchpaths[SP_APPLICATION_BUNDLE_DIR] = strdup(tmp);
+	} else {
+		_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
+	}
+
+	CFRelease(url);
+}
+
 /* These are called from main() to prevent a _NSAutoreleaseNoPool error when
  * exiting before the cocoa video driver has been loaded
  */
--- a/src/video/dedicated_v.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/video/dedicated_v.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -13,6 +13,8 @@
 #include "../console.h"
 #include "../variables.h"
 #include "../genworld.h"
+#include "../fileio.h"
+#include "../blitter/factory.hpp"
 #include "dedicated_v.h"
 
 #ifdef BEOS_NET_SERVER
@@ -112,17 +114,20 @@
 #endif
 
 
-static Pixel *_dedicated_video_mem;
+static void *_dedicated_video_mem;
 
-extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
+extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir);
 extern void SwitchMode(int new_mode);
 
 
 static const char *DedicatedVideoStart(const char * const *parm)
 {
+	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
+	if (bpp == 0) _dedicated_video_mem = NULL;
+	else          _dedicated_video_mem = malloc(_cur_resolution[0] * _cur_resolution[1] * (bpp / 8));
+
 	_screen.width = _screen.pitch = _cur_resolution[0];
 	_screen.height = _cur_resolution[1];
-	_dedicated_video_mem = (Pixel *)malloc(_cur_resolution[0] * _cur_resolution[1] * sizeof(Pixel));
 
 	SetDebugString("net=6");
 
@@ -254,7 +259,7 @@
 		_switch_mode = SM_NONE;
 		/* First we need to test if the savegame can be loaded, else we will end up playing the
 		 *  intro game... */
-		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL)) {
+		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, BASE_DIR)) {
 			/* Loading failed, pop out.. */
 			DEBUG(net, 0, "Loading requested map failed, aborting");
 			_networking = false;
--- a/src/video/null_v.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/video/null_v.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -5,19 +5,21 @@
 #include "../gfx.h"
 #include "../variables.h"
 #include "../window.h"
+#include "../debug.h"
+#include "../blitter/factory.hpp"
 #include "null_v.h"
 
-static Pixel *_null_video_mem = NULL;
-
 static const char* NullVideoStart(const char* const* parm)
 {
 	_screen.width = _screen.pitch = _cur_resolution[0];
 	_screen.height = _cur_resolution[1];
-	_null_video_mem = (Pixel *)malloc(_cur_resolution[0] * _cur_resolution[1] * sizeof(Pixel));
+	/* Do not render, nor blit */
+	DEBUG(misc, 1, "Forcing blitter 'null'...");
+	BlitterFactoryBase::SelectBlitter("null");
 	return NULL;
 }
 
-static void NullVideoStop() { free(_null_video_mem); }
+static void NullVideoStop() { }
 
 static void NullVideoMakeDirty(int left, int top, int width, int height) {}
 
@@ -27,7 +29,7 @@
 
 	for (i = 0; i < 1000; i++) {
 		GameLoop();
-		_screen.dst_ptr = _null_video_mem;
+		_screen.dst_ptr = NULL;
 		UpdateWindows();
 	}
 }
--- a/src/video/sdl_v.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/video/sdl_v.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -13,6 +13,7 @@
 #include "../window.h"
 #include "../network/network.h"
 #include "../variables.h"
+#include "../blitter/factory.hpp"
 #include "sdl_v.h"
 #include <SDL.h>
 
@@ -36,6 +37,10 @@
 
 static void UpdatePalette(uint start, uint count)
 {
+	/* We can only update the palette in 8bpp for now */
+	/* TODO -- We need support for other bpps too! */
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
+
 	SDL_Color pal[256];
 	uint i;
 
@@ -172,10 +177,13 @@
 	extern const char _openttd_revision[];
 	SDL_Surface *newscreen, *icon;
 	char caption[50];
+	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 
 	GetAvailableVideoMode(&w, &h);
 
-	DEBUG(driver, 1, "SDL: using mode %dx%d", w, h);
+	DEBUG(driver, 1, "SDL: using mode %dx%dx%d", w, h, bpp);
+
+	if (bpp == 0) error("Can't use a blitter that blits 0 bpp for normal visuals");
 
 	/* Give the application an icon */
 	icon = SDL_CALL SDL_LoadBMP(ICON_DIR PATHSEP "openttd.32.bmp");
@@ -189,14 +197,13 @@
 	}
 
 	// DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK
-	newscreen = SDL_CALL SDL_SetVideoMode(w, h, 8, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
+	newscreen = SDL_CALL SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
 	if (newscreen == NULL)
 		return false;
 
 	_screen.width = newscreen->w;
 	_screen.height = newscreen->h;
-	_screen.pitch = newscreen->pitch / sizeof(Pixel);
-
+	_screen.pitch = newscreen->pitch / (bpp / 8);
 	_sdl_screen = newscreen;
 	InitPalette();
 
@@ -469,7 +476,7 @@
 				(keys[SDLK_DOWN]  ? 8 : 0);
 			GameLoop();
 
-			_screen.dst_ptr = (Pixel*)_sdl_screen->pixels;
+			_screen.dst_ptr = _sdl_screen->pixels;
 			UpdateWindows();
 			if (++pal_tick > 4) {
 				CheckPaletteAnim();
@@ -478,7 +485,7 @@
 			DrawSurfaceToScreen();
 		} else {
 			SDL_CALL SDL_Delay(1);
-			_screen.dst_ptr = (Pixel*)_sdl_screen->pixels;
+			_screen.dst_ptr = _sdl_screen->pixels;
 			DrawTextMessage();
 			DrawMouseCursor();
 			DrawSurfaceToScreen();
--- a/src/video/win32_v.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/video/win32_v.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -9,6 +9,7 @@
 #include "../variables.h"
 #include "../win32.h"
 #include "../window.h"
+#include "../blitter/factory.hpp"
 #include "win32_v.h"
 #include <windows.h>
 #include <tchar.h>
@@ -16,26 +17,26 @@
 static struct {
 	HWND main_wnd;
 	HBITMAP dib_sect;
-	Pixel *bitmap_bits;
-	Pixel *buffer_bits;
-	Pixel *alloced_bits;
+	void *buffer_bits;
 	HPALETTE gdi_palette;
 	int width;
 	int height;
 	int width_org;
 	int height_org;
+	bool minimized;
 	bool fullscreen;
-	bool double_size;
 	bool has_focus;
 	bool running;
 } _wnd;
 
 bool _force_full_redraw;
-bool _double_size;
 bool _window_maximize;
 uint _display_hz;
 uint _fullscreen_bpp;
 static uint16 _bck_resolution[2];
+#if !defined(WINCE)
+static DEVMODE _fullscreen_dm;
+#endif
 #if !defined(UNICODE)
 uint _codepage;
 #endif
@@ -63,6 +64,10 @@
 
 static void UpdatePalette(HDC dc, uint start, uint count)
 {
+	/* We can only update the palette in 8bpp for now */
+	/* TODO -- We need support for other bpps too! */
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
+
 	RGBQUAD rgb[256];
 	uint i;
 
@@ -136,11 +141,6 @@
 
 static void ClientSizeChanged(int w, int h)
 {
-	if (_wnd.double_size) {
-		w /= 2;
-		h /= 2;
-	}
-
 	// allocate new dib section of the new size
 	if (AllocateDibSection(w, h)) {
 		// mark all palette colors dirty
@@ -319,11 +319,6 @@
 				DrawMouseCursor();
 			}
 
-			if (_wnd.double_size) {
-				x /= 2;
-				y /= 2;
-			}
-
 			if (_cursor.fix_at) {
 				int dx = x - _cursor.pos.x;
 				int dy = y - _cursor.pos.y;
@@ -334,10 +329,6 @@
 					pt.x = _cursor.pos.x;
 					pt.y = _cursor.pos.y;
 
-					if (_wnd.double_size) {
-						pt.x *= 2;
-						pt.y *= 2;
-					}
 					ClientToScreen(hwnd, &pt);
 					SetCursorPos(pt.x, pt.y);
 				}
@@ -400,13 +391,6 @@
 			 * WM_KEYDOWN only handles CTRL+ commands and special keys like VK_LEFT, etc. */
 			if (keycode == 0 || (keycode > WKC_PAUSE && GB(keycode, 13, 4) == 0)) return 0;
 
-			if (keycode == ('D' | WKC_CTRL) && !_wnd.fullscreen) {
-				_double_size ^= 1;
-				_wnd.double_size = _double_size;
-				ClientSizeChanged(_wnd.width, _wnd.height);
-				MarkWholeScreenDirty();
-			}
-
 			HandleKeypress(0 | (keycode << 16));
 			return 0;
 		}
@@ -432,7 +416,8 @@
 			break;
 
 		case WM_SIZE:
-			if (wParam != SIZE_MINIMIZED) {
+			_wnd.minimized = (wParam == SIZE_MINIMIZED);
+			if (!_wnd.minimized) {
 				/* Set maximized flag when we maximize (obviously), but also when we
 				 * switched to fullscreen from a maximized state */
 				_window_maximize = (wParam == SIZE_MAXIMIZED || (_window_maximize && _fullscreen));
@@ -455,16 +440,8 @@
 
 			w = r->right - r->left - (r2.right - r2.left);
 			h = r->bottom - r->top - (r2.bottom - r2.top);
-			if (_wnd.double_size) {
-				w /= 2;
-				h /= 2;
-			}
 			w = clamp(w, 64, MAX_SCREEN_WIDTH);
 			h = clamp(h, 64, MAX_SCREEN_HEIGHT);
-			if (_wnd.double_size) {
-				w *= 2;
-				h *= 2;
-			}
 			SetRect(&r2, 0, 0, w, h);
 
 			AdjustWindowRect(&r2, GetWindowLong(hwnd, GWL_STYLE), FALSE);
@@ -534,6 +511,21 @@
 
 		case WM_ACTIVATEAPP:
 			_wnd.has_focus = (wParam != 0);
+#if !defined(WINCE)
+			if (_wnd.fullscreen) {
+				if (_wnd.has_focus && _wnd.minimized) {
+					/* Restore the game window */
+					ShowWindow(hwnd, SW_RESTORE);
+					ChangeDisplaySettings(&_fullscreen_dm, CDS_FULLSCREEN);
+					/* Force palette update */
+					SendMessage(hwnd, WM_QUERYNEWPALETTE, 0, 0);
+				} else if (!_wnd.has_focus && !_wnd.minimized) {
+					/* Minimise the window and restore desktop */
+					ShowWindow(hwnd, SW_MINIMIZE);
+					ChangeDisplaySettings(NULL, 0);
+				}
+			}
+#endif
 			break;
 	}
 	return DefWindowProc(hwnd, msg, wParam, lParam);
@@ -567,8 +559,6 @@
 {
 	_fullscreen = full_screen;
 
-	_wnd.double_size = _double_size && !full_screen;
-
 	// recreate window?
 	if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) {
 		DestroyWindow(_wnd.main_wnd);
@@ -579,21 +569,22 @@
 	/* WinCE is always fullscreen */
 #else
 	if (full_screen) {
-		DEVMODE settings;
+		/* Make sure we are always at least the screen-depth of the blitter */
+		if (_fullscreen_bpp < BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth()) _fullscreen_bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 
-		memset(&settings, 0, sizeof(settings));
-		settings.dmSize = sizeof(settings);
-		settings.dmFields =
+		memset(&_fullscreen_dm, 0, sizeof(_fullscreen_dm));
+		_fullscreen_dm.dmSize = sizeof(_fullscreen_dm);
+		_fullscreen_dm.dmFields =
 			(_fullscreen_bpp != 0 ? DM_BITSPERPEL : 0) |
 			DM_PELSWIDTH |
 			DM_PELSHEIGHT |
 			(_display_hz != 0 ? DM_DISPLAYFREQUENCY : 0);
-		settings.dmBitsPerPel = _fullscreen_bpp;
-		settings.dmPelsWidth  = _wnd.width_org;
-		settings.dmPelsHeight = _wnd.height_org;
-		settings.dmDisplayFrequency = _display_hz;
+		_fullscreen_dm.dmBitsPerPel = _fullscreen_bpp;
+		_fullscreen_dm.dmPelsWidth  = _wnd.width_org;
+		_fullscreen_dm.dmPelsHeight = _wnd.height_org;
+		_fullscreen_dm.dmDisplayFrequency = _display_hz;
 
-		if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
+		if (ChangeDisplaySettings(&_fullscreen_dm, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
 			MakeWindow(false);
 			return;
 		}
@@ -649,49 +640,37 @@
 {
 	BITMAPINFO *bi;
 	HDC dc;
+	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 
 	w = clamp(w, 64, MAX_SCREEN_WIDTH);
 	h = clamp(h, 64, MAX_SCREEN_HEIGHT);
 
+	if (bpp == 0) error("Can't use a blitter that blits 0 bpp for normal visuals");
+
 	if (w == _screen.width && h == _screen.height)
 		return false;
 
 	_screen.width = w;
 	_screen.pitch = ALIGN(w, 4);
 	_screen.height = h;
-
-	if (_wnd.alloced_bits) {
-		free(_wnd.alloced_bits);
-		_wnd.alloced_bits = NULL;
-	}
-
 	bi = (BITMAPINFO*)alloca(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
 	memset(bi, 0, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
 	bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 
-	if (_wnd.double_size) {
-		w = ALIGN(w, 4);
-		_wnd.alloced_bits = _wnd.buffer_bits = (Pixel *)malloc(w * h * sizeof(Pixel));
-		w *= 2;
-		h *= 2;
-	}
-
 	bi->bmiHeader.biWidth = _wnd.width = w;
 	bi->bmiHeader.biHeight = -(_wnd.height = h);
 
 	bi->bmiHeader.biPlanes = 1;
-	bi->bmiHeader.biBitCount = 8;
+	bi->bmiHeader.biBitCount = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 	bi->bmiHeader.biCompression = BI_RGB;
 
 	if (_wnd.dib_sect) DeleteObject(_wnd.dib_sect);
 
 	dc = GetDC(0);
-	_wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.bitmap_bits, NULL, 0);
+	_wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.buffer_bits, NULL, 0);
 	if (_wnd.dib_sect == NULL) error("CreateDIBSection failed");
 	ReleaseDC(0, dc);
 
-	if (!_wnd.double_size) _wnd.buffer_bits = _wnd.bitmap_bits;
-
 	return true;
 }
 
@@ -723,7 +702,7 @@
 	 * Doesn't really matter since we don't pass a string anyways, but still
 	 * a letdown */
 	for (i = 0; EnumDisplaySettingsA(NULL, i, &dm) != 0; i++) {
-		if (dm.dmBitsPerPel == 8 && IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH + 1) &&
+		if (dm.dmBitsPerPel == BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() && IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH + 1) &&
 				IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT + 1)) {
 			uint j;
 
@@ -786,43 +765,13 @@
 #if !defined(WINCE)
 	if (_wnd.fullscreen) ChangeDisplaySettings(NULL, 0);
 #endif
-	if (_wnd.double_size) {
-		_cur_resolution[0] *= 2;
-		_cur_resolution[1] *= 2;
-	}
-
 	MyShowCursor(true);
 }
 
-// simple upscaler by 2
-static void filter(int left, int top, int width, int height)
-{
-	uint p = _screen.pitch;
-	const Pixel *s = _wnd.buffer_bits + top * p + left;
-	Pixel *d = _wnd.bitmap_bits + top * p * 4 + left * 2;
-
-	for (; height > 0; height--) {
-		int i;
-
-		for (i = 0; i != width; i++) {
-			d[i * 2] = d[i * 2 + 1] = d[i * 2 + p * 2] = d[i * 2 + 1 + p * 2] = s[i];
-		}
-		s += p;
-		d += p * 4;
-	}
-}
-
 static void Win32GdiMakeDirty(int left, int top, int width, int height)
 {
 	RECT r = { left, top, left + width, top + height };
 
-	if (_wnd.double_size) {
-		filter(left, top, width, height);
-		r.left *= 2;
-		r.top *= 2;
-		r.right *= 2;
-		r.bottom *= 2;
-	}
 	InvalidateRect(_wnd.main_wnd, &r, FALSE);
 }
 
--- a/src/viewport.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/viewport.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -24,6 +24,7 @@
 #include "variables.h"
 #include "train.h"
 #include "roadveh.h"
+#include "blitter/factory.hpp"
 
 #define VIEWPORT_DRAW_MEM (65536 * 2)
 
@@ -1269,7 +1270,7 @@
 	x = UnScaleByZoom(vd.dpi.left - (vp->virtual_left & mask), vp->zoom) + vp->left;
 	y = UnScaleByZoom(vd.dpi.top - (vp->virtual_top & mask), vp->zoom) + vp->top;
 
-	vd.dpi.dst_ptr = old_dpi->dst_ptr + x - old_dpi->left + (y - old_dpi->top) * old_dpi->pitch;
+	vd.dpi.dst_ptr = BlitterFactoryBase::GetCurrentBlitter()->MoveTo(old_dpi->dst_ptr, x - old_dpi->left, y - old_dpi->top);
 
 	vd.parent_list = parent_list;
 	vd.eof_parent_list = endof(parent_list);
--- a/src/water_cmd.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/water_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -618,6 +618,21 @@
  */
 static Vehicle *FindFloodableVehicleOnTile(TileIndex tile)
 {
+	if (IsTileType(tile, MP_STATION) && IsAirport(tile)) {
+		const Station *st = GetStationByTile(tile);
+		const AirportFTAClass *airport = st->Airport();
+		for (uint x = 0; x < airport->size_x; x++) {
+			for (uint y = 0; y < airport->size_y; y++) {
+				tile = TILE_ADDXY(st->airport_tile, x, y);
+				Vehicle *v = FindVehicleOnTileZ(tile, 1 + airport->delta_z);
+				if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v;
+			}
+		}
+
+		/* No vehicle could be flooded on this airport anymore */
+		return NULL;
+	}
+
 	if (!IsBridgeTile(tile)) return FindVehicleOnTileZ(tile, 0);
 
 	TileIndex end = GetOtherBridgeEnd(tile);
@@ -642,10 +657,20 @@
 	if (!(v->vehstatus & VS_CRASHED)) {
 		uint16 pass = 0;
 
-		if (v->type == VEH_TRAIN || v->type == VEH_ROAD) {
+		if (v->type == VEH_TRAIN || v->type == VEH_ROAD || v->type == VEH_AIRCRAFT) {
+			if (v->type == VEH_AIRCRAFT) {
+				/* Crashing aircraft are always at z_pos == 1, never on z_pos == 0,
+				 * because that's always the shadow. Except for the heliport, because
+				 * that station has a big z_offset for the aircraft. */
+				if (!IsTileType(v->tile, MP_STATION) || !IsAirport(v->tile) || GetTileMaxZ(v->tile) != 0) return;
+				const Station *st = GetStationByTile(v->tile);
+				const AirportFTAClass *airport = st->Airport();
+
+				if (v->z_pos != airport->delta_z + 1) return;
+			}
 			Vehicle *u;
 
-			v = GetFirstVehicleInChain(v);
+			if (v->type != VEH_AIRCRAFT) v = GetFirstVehicleInChain(v);
 			u = v;
 
 			/* crash all wagons, and count passengers */
@@ -657,12 +682,22 @@
 
 			v = u;
 
-			if (v->type == VEH_TRAIN) {
-				if (IsFrontEngine(v)) pass += 4; // driver
-				v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast
-			} else {
-				if (IsRoadVehFront(v)) pass += 1; // driver
-				v->u.road.crashed_ctr = 2000; // max 2220, disappear pretty fast
+			switch (v->type) {
+				default: NOT_REACHED();
+				case VEH_TRAIN:
+					if (IsFrontEngine(v)) pass += 4; // driver
+					v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast
+					break;
+
+				case VEH_ROAD:
+					if (IsRoadVehFront(v)) pass += 1; // driver
+					v->u.road.crashed_ctr = 2000; // max 2220, disappear pretty fast
+					break;
+
+				case VEH_AIRCRAFT:
+					pass += 2; // driver
+					v->u.air.crashed_counter = 9000; // max 10000, disappear pretty fast
+					break;
 			}
 
 			RebuildVehicleLists();
--- a/src/win32.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/win32.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -23,11 +23,13 @@
 #include "variables.h"
 #include "win32.h"
 #include "fios.h" // opendir/readdir/closedir
+#include "fileio.h"
 #include <ctype.h>
 #include <tchar.h>
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <shlobj.h>
 
 static bool _has_console;
 
@@ -224,7 +226,7 @@
 
 static bool EmergencySave()
 {
-	SaveOrLoad("crash.sav", SL_SAVE);
+	SaveOrLoad("crash.sav", SL_SAVE, BASE_DIR);
 	return true;
 }
 
@@ -958,22 +960,54 @@
 	return buf;
 }
 
-extern char *BuildWithFullPath(const char *dir);
 
 void DetermineBasePaths(const char *exe)
 {
-	_paths.personal_dir = MallocT<char>(MAX_PATH);
-	getcwd(_paths.personal_dir, MAX_PATH);
+	char tmp[MAX_PATH];
+	TCHAR path[MAX_PATH];
+#ifdef WITH_PERSONAL_DIR
+	SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, path);
+	strncpy(tmp, WIDE_TO_MB_BUFFER(path, tmp, lengthof(tmp)), lengthof(tmp));
+	AppendPathSeparator(tmp, MAX_PATH);
+	ttd_strlcat(tmp, PERSONAL_DIR, MAX_PATH);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
 
-	_paths.game_data_dir = BuildWithFullPath(GAME_DATA_DIR);
-#if defined(SECOND_DATA_DIR)
-	_paths.second_data_dir = BuildWithFullPath(SECOND_DATA_DIR);
+	SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP_TYPE_CURRENT, path);
+	strncpy(tmp, WIDE_TO_MB_BUFFER(path, tmp, lengthof(tmp)), lengthof(tmp));
+	AppendPathSeparator(tmp, MAX_PATH);
+	ttd_strlcat(tmp, PERSONAL_DIR, MAX_PATH);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_SHARED_DIR] = strdup(tmp);
 #else
-	_paths.second_data_dir = NULL;
+	_searchpaths[SP_PERSONAL_DIR] = NULL;
+	_searchpaths[SP_SHARED_DIR]   = NULL;
 #endif
 
-	_paths.personal_dir[0] = toupper(_paths.personal_dir[0]);
-	AppendPathSeparator(_paths.personal_dir,  MAX_PATH);
+	/* Get the path to working directory of OpenTTD */
+	getcwd(tmp, lengthof(tmp));
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_WORKING_DIR] = strdup(tmp);
+
+	if (!GetModuleFileName(NULL, path, lengthof(path))) {
+		DEBUG(misc, 0, "GetModuleFileName failed (%d)\n", GetLastError());
+		_searchpaths[SP_BINARY_DIR] = NULL;
+	} else {
+		TCHAR exec_dir[MAX_PATH];
+		_tcsncpy(path, MB_TO_WIDE_BUFFER(exe, path, lengthof(path)), lengthof(path));
+		if (!GetFullPathName(path, lengthof(exec_dir), exec_dir, NULL)) {
+			DEBUG(misc, 0, "GetFullPathName failed (%d)\n", GetLastError());
+			_searchpaths[SP_BINARY_DIR] = NULL;
+		} else {
+			strncpy(tmp, WIDE_TO_MB_BUFFER(exec_dir, tmp, lengthof(tmp)), lengthof(tmp));
+			char *s = strrchr(tmp, PATHSEPCHAR);
+			*(s + 1) = '\0';
+			_searchpaths[SP_BINARY_DIR] = strdup(tmp);
+		}
+	}
+
+	_searchpaths[SP_INSTALLATION_DIR]       = NULL;
+	_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
 }
 
 /**
--- a/src/window.cpp	Tue Jun 12 19:52:26 2007 +0000
+++ b/src/window.cpp	Sun Jun 17 21:31:00 2007 +0000
@@ -17,6 +17,7 @@
 #include "table/sprites.h"
 #include "genworld.h"
 #include "helpers.hpp"
+#include "blitter/factory.hpp"
 
 /* delta between mouse cursor and upper left corner of dragged window */
 static Point _drag_delta;
@@ -270,7 +271,7 @@
 		dp->left = left - (*wz)->left;
 		dp->top = top - (*wz)->top;
 		dp->pitch = _screen.pitch;
-		dp->dst_ptr = _screen.dst_ptr + top * _screen.pitch + left;
+		dp->dst_ptr = BlitterFactoryBase::GetCurrentBlitter()->MoveTo(_screen.dst_ptr, left, top);
 		dp->zoom = ZOOM_LVL_NORMAL;
 		CallWindowEventNP(*wz, WE_PAINT);
 	}