(svn r10213) [gamebalance] -Sync: r10100:10200 from trunk gamebalance
authorcelestar
Tue, 19 Jun 2007 07:21:01 +0000
branchgamebalance
changeset 9913 e79cd19772dd
parent 9912 1ac8aac92385
(svn r10213) [gamebalance] -Sync: r10100:10200 from trunk
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/ai/ai.cpp
src/ai/ai.h
src/ai/default/default.cpp
src/ai/trolly/build.cpp
src/ai/trolly/pathfinder.cpp
src/ai/trolly/trolly.cpp
src/ai/trolly/trolly.h
src/aircraft_cmd.cpp
src/airport_movement.h
src/autoreplace_cmd.cpp
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/8bpp_slow.cpp
src/blitter/8bpp_slow.hpp
src/blitter/base.hpp
src/blitter/blitter.hpp
src/blitter/factory.hpp
src/blitter/null.cpp
src/blitter/null.hpp
src/bridge_gui.cpp
src/clear_cmd.cpp
src/command.cpp
src/command.h
src/console_cmds.cpp
src/dummy_land.cpp
src/economy.cpp
src/engine.cpp
src/engine.h
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/group_cmd.cpp
src/industry_cmd.cpp
src/industry_map.h
src/intro_gui.cpp
src/landscape.cpp
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/czech.txt
src/lang/danish.txt
src/lang/dutch.txt
src/lang/esperanto.txt
src/lang/estonian.txt
src/lang/french.txt
src/lang/hungarian.txt
src/lang/italian.txt
src/lang/japanese.txt
src/lang/korean.txt
src/lang/norwegian_bokmal.txt
src/lang/piglatin.txt
src/lang/romanian.txt
src/lang/slovenian.txt
src/lang/swedish.txt
src/lang/turkish.txt
src/lang/ukrainian.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_config.h
src/newgrf_engine.cpp
src/newgrf_gui.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/newgrf_text.h
src/oldloader.cpp
src/openttd.cpp
src/openttd.h
src/order_cmd.cpp
src/order_gui.cpp
src/ottdres.rc
src/player.h
src/player_gui.cpp
src/players.cpp
src/rail_cmd.cpp
src/rail_gui.cpp
src/road_cmd.cpp
src/roadveh_cmd.cpp
src/saveload.cpp
src/saveload.h
src/screenshot.cpp
src/settings.cpp
src/settings_gui.cpp
src/ship_cmd.cpp
src/signs.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/tree_cmd.cpp
src/tunnelbridge_cmd.cpp
src/unmovable_cmd.cpp
src/variables.h
src/vehicle.cpp
src/vehicle.h
src/vehicle_gui.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/waypoint.cpp
src/waypoint.h
src/win32.cpp
src/window.cpp
src/yapf/yapf_costrail.hpp
--- a/Makefile.in	Wed Jun 13 12:05:56 2007 +0000
+++ b/Makefile.in	Tue Jun 19 07:21:01 2007 +0000
@@ -228,11 +228,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'
@@ -257,4 +252,3 @@
 	$(Q)cp -R "$(BUNDLE_DIR)/scenario" "$(INSTALL_DATA_DIR)"
 endif # INSTALL_PERSONAL_DIR
 endif # OSXAPP
-endif # ENABLE_INSTALL
--- a/Makefile.lang.in	Wed Jun 13 12:05:56 2007 +0000
+++ b/Makefile.lang.in	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/Makefile.src.in	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/config.lib	Tue Jun 19 07:21:01 2007 +0000
@@ -22,17 +22,15 @@
 	awk="awk"
 	os="DETECT"
 	endian="AUTO"
+	cpu_type="DETECT"
 	revision=""
 	config_log="config.log"
 	prefix_dir="/usr/local"
 	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"
@@ -45,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"
@@ -62,7 +61,7 @@
 	with_fontconfig="1"
 	with_psp_config="1"
 
-	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip awk lipo os 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 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_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_distcc with_ccache 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 CC CXX CFLAGS LDFLAGS"
 }
 
 detect_params() {
@@ -92,6 +91,9 @@
 			--os)                         prev_p="os";;
 			--os=*)                       os="$optarg";;
 
+			--cpu-type)                   prev_p="cpu_type";;
+			--cpu-type=*)                 cpu_type="$optarg";;
+
 			--revision=*)                 revision="$optarg";;
 
 			--cc-build)                   prevp_p="cc_build";;
@@ -130,20 +132,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";;
@@ -240,6 +233,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";;
@@ -301,6 +298,7 @@
 
 	endian=`echo $endian | tr '[a-z]' '[A-Z]'`
 	os=`echo $os | tr '[a-z]' '[A-Z]'`
+	cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'`
 
 	# Check if all params have valid values
 
@@ -316,6 +314,12 @@
 		echo " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP]"
 		exit 1
 	fi
+	# cpu_type can be either 32 or 64
+	if [ -z "`echo $cpu_type | grep '^32$\|^64$\|^DETECT$'`" ]; then
+		echo "configure: error: invalid option --cpu-type=$cpu_type"
+		echo " Available options are: --cpu-type[=DETECT|32|64]"
+		exit 1
+	fi
 	# enable_debug should be between 0 and 4
 	if [ -z "`echo $enable_debug | grep '^[0123]$'`" ]; then
 		echo "configure: error: invalid option --enable-debug=$enable_debug"
@@ -359,6 +363,7 @@
 	fi
 	check_lipo
 	check_makedepend
+	detect_cputype
 
 	if [ "$enable_static" = "1" ]; then
 		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "OSX" ]; then
@@ -546,6 +551,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"
@@ -589,21 +623,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
@@ -686,6 +705,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() {
@@ -984,29 +1027,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"
@@ -1030,6 +1055,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() {
@@ -1467,6 +1497,9 @@
 	# $2 - library name ('zlib', sets $zlib)
 	# $3 - static library name (libz.a)
 	# $4 - header name (zlib.h)
+	# $5 - force static (if non-empty)
+
+	if [ -n "$5" ]; then force_static="1"; fi
 
 	# 0 means no, 1 is auto-detect, 2 is force
 	if [ "$1" = "0" ]; then
@@ -1491,7 +1524,7 @@
 		fi
 
 		eval "res=\$$2"
-		if [ -n "$res" ] && [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
+		if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
 			eval "res=\$$2"
 			log 2 "  trying $res... found"
 			# Now find the static lib, if needed
@@ -1854,6 +1887,25 @@
 	fi
 }
 
+detect_cputype() {
+	if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
+		log 1 "forcing cpu-type... $cpu_type bits"
+		return;
+	fi
+	echo "#include \"src/stdafx.h\"" > tmp.64bit.cpp
+	echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
+	echo "int main() { return 0; }" >> tmp.64bit.cpp
+	execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
+	cpu_type="`eval $execute 2>/dev/null`"
+	ret=$?
+	log 2 "executing $execute"
+	log 2 "  returned $cpu_type"
+	log 2 "  exit code $ret"
+	if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
+	log 1 "detecting cpu-type... $cpu_type bits"
+	rm -f tmp.64bit tmp.64bit.cpp
+}
+
 make_sed() {
 	# We check here if we are PPC, because then we need to enable FOUR_BYTE_BOOL
 	#  We do this here, and not sooner, so universal builds also have this
@@ -1935,7 +1987,6 @@
 		s#!!REVISION!!#$revision#g;
 		s#!!AWK!!#$awk#g;
 		s#!!GCC295!!#$gcc295#g;
-		s#!!ENABLE_INSTALL!!#$enable_install#g;
 		s#!!DISTCC!!#$distcc#g;
 	"
 }
@@ -2051,18 +2102,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/configure	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/generate	Tue Jun 19 07:21:01 2007 +0000
@@ -31,12 +31,31 @@
 
 # First, collect the list of Windows files
 sdl_config="1"
+png_config="1"
 os="MSVC"
 enable_dedicated="0"
 with_cocoa="0"
 enable_directmusic="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 '
@@ -52,6 +71,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; }
@@ -167,6 +187,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/langs.vcproj	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/langs_vs80.vcproj	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/openttd.vcproj	Tue Jun 19 07:21:01 2007 +0000
@@ -30,7 +30,7 @@
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="1"
 				AdditionalIncludeDirectories="..\objs\langs"
-				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"
-				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
@@ -633,6 +636,9 @@
 				RelativePath=".\..\src\sprite.h">
 			</File>
 			<File
+				RelativePath=".\..\src\spritecache.h">
+			</File>
+			<File
 				RelativePath=".\..\src\station.h">
 			</File>
 			<File
@@ -968,6 +974,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
@@ -980,13 +1004,22 @@
 				RelativePath=".\..\src\blitter\8bpp_optimized.hpp">
 			</File>
 			<File
-				RelativePath=".\..\src\blitter\8bpp_slow.cpp">
+				RelativePath=".\..\src\blitter\8bpp_simple.cpp">
 			</File>
 			<File
-				RelativePath=".\..\src\blitter\8bpp_slow.hpp">
+				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
@@ -999,6 +1032,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>
@@ -1030,6 +1069,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/openttd.vcproj.in	Tue Jun 19 07:21:01 2007 +0000
@@ -30,7 +30,7 @@
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="1"
 				AdditionalIncludeDirectories="..\objs\langs"
-				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"
-				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	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Tue Jun 19 07:21:01 2007 +0000
@@ -59,7 +59,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs"
-				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"
-				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"
-				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"
-				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>
@@ -1072,6 +1076,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\spritecache.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\station.h"
 				>
 			</File>
@@ -1512,6 +1520,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>
@@ -1528,15 +1560,27 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\blitter\8bpp_slow.cpp"
+				RelativePath=".\..\src\blitter\8bpp_simple.cpp"
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\blitter\8bpp_slow.hpp"
+				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>
@@ -1552,6 +1596,14 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\spriteloader\png.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\spriteloader\spriteloader.hpp"
 				>
 			</File>
@@ -1592,6 +1644,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industrytiles.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.cpp"
 				>
 			</File>
--- a/projects/openttd_vs80.vcproj.in	Wed Jun 13 12:05:56 2007 +0000
+++ b/projects/openttd_vs80.vcproj.in	Tue Jun 19 07:21:01 2007 +0000
@@ -59,7 +59,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs"
-				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"
-				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"
-				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"
-				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	Wed Jun 13 12:05:56 2007 +0000
+++ b/source.list	Tue Jun 19 07:21:01 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
@@ -178,6 +179,7 @@
 slope.h
 sound.h
 sprite.h
+spritecache.h
 station.h
 stdafx.h
 string.h
@@ -293,17 +295,30 @@
 ai/trolly/trolly.cpp
 
 # 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_slow.cpp
-blitter/8bpp_slow.hpp
-blitter/blitter.hpp
+blitter/8bpp_simple.cpp
+blitter/8bpp_simple.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
@@ -315,6 +330,7 @@
 newgrf_engine.cpp
 newgrf_house.cpp
 newgrf_industries.cpp
+newgrf_industrytiles.cpp
 newgrf_sound.cpp
 newgrf_spritegroup.cpp
 newgrf_station.cpp
--- a/src/ai/ai.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/ai.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -81,10 +81,10 @@
 /**
  * Executes a raw DoCommand for the AI.
  */
-int32 AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback)
+CommandCost AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback)
 {
 	PlayerID old_lp;
-	int32 res = 0;
+	CommandCost res = 0;
 	const char* tmp_cmdtext;
 
 	/* If you enable DC_EXEC with DC_QUERY_COST you are a really strange
@@ -135,7 +135,7 @@
 }
 
 
-int32 AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
+CommandCost AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
 {
 	return AI_DoCommandCc(tile, p1, p2, flags, procc, NULL);
 }
--- a/src/ai/ai.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/ai.h	Tue Jun 19 07:21:01 2007 +0000
@@ -43,8 +43,8 @@
 void AI_RunGameLoop();
 void AI_Initialize();
 void AI_Uninitialize();
-int32 AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
-int32 AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback);
+CommandCost AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+CommandCost AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback);
 
 /** Is it allowed to start a new AI.
  * This function checks some boundries to see if we should launch a new AI.
--- a/src/ai/default/default.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/default/default.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -136,7 +136,7 @@
 {
 	EngineID best_veh_index = INVALID_ENGINE;
 	byte best_veh_score = 0;
-	int32 ret;
+	CommandCost ret;
 	EngineID i;
 
 	for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
@@ -152,7 +152,7 @@
 		}
 
 		ret = DoCommand(tile, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
-		if (!CmdFailed(ret) && ret <= money && rvi->ai_rank >= best_veh_score) {
+		if (CmdSucceeded(ret) && ret <= money && rvi->ai_rank >= best_veh_score) {
 			best_veh_score = rvi->ai_rank;
 			best_veh_index = i;
 		}
@@ -172,7 +172,7 @@
 		const RoadVehicleInfo *rvi = RoadVehInfo(i);
 		const Engine* e = GetEngine(i);
 		int32 rating;
-		int32 ret;
+		CommandCost ret;
 
 		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
 			continue;
@@ -207,7 +207,7 @@
 
 	for (i = AIRCRAFT_ENGINES_INDEX; i != AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; i++) {
 		const Engine* e = GetEngine(i);
-		int32 ret;
+		CommandCost ret;
 
 		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
 			continue;
@@ -216,7 +216,7 @@
 		if ((AircraftVehInfo(i)->subtype & AIR_CTOL) != flag) continue;
 
 		ret = DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_AIRCRAFT);
-		if (!CmdFailed(ret) && ret <= money && ret >= best_veh_cost) {
+		if (CmdSucceeded(ret) && ret <= money && ret >= best_veh_cost) {
 			best_veh_cost = ret;
 			best_veh_index = i;
 		}
@@ -331,8 +331,8 @@
 		BackupVehicleOrders(v, orderbak);
 		tile = v->tile;
 
-		if (!CmdFailed(DoCommand(0, v->index, 2, DC_EXEC, CMD_SELL_RAIL_WAGON)) &&
-				!CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE))) {
+		if (CmdSucceeded(DoCommand(0, v->index, 2, DC_EXEC, CMD_SELL_RAIL_WAGON)) &&
+				CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE))) {
 			VehicleID veh = _new_vehicle_id;
 			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
 			DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_TRAIN);
@@ -360,8 +360,8 @@
 		BackupVehicleOrders(v, orderbak);
 		tile = v->tile;
 
-		if (!CmdFailed(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH)) &&
-				!CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH))) {
+		if (CmdSucceeded(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH)) &&
+				CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH))) {
 			VehicleID veh = _new_vehicle_id;
 
 			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
@@ -389,8 +389,8 @@
 		BackupVehicleOrders(v, orderbak);
 		tile = v->tile;
 
-		if (!CmdFailed(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_AIRCRAFT)) &&
-				!CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) {
+		if (CmdSucceeded(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_AIRCRAFT)) &&
+				CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) {
 			VehicleID veh = _new_vehicle_id;
 			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
 			DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
@@ -654,7 +654,7 @@
 
 	/* Random value between 37 and 292. Low values are exponentially more likely
 	 * With 50% chance the value will be under 52 tiles */
-	int min_distance = 36 + 1 << (Random() % 9); // 0..8
+	int min_distance = 36 + (1 << (Random() % 9)); // 0..8
 
 	/* Make sure distance to closest station is < min_distance tiles. */
 	if (dist != 0xFFFF && dist > min_distance) return false;
@@ -1638,10 +1638,10 @@
 	return true;
 }
 
-static int32 AiDoBuildDefaultRailTrack(TileIndex tile, const AiDefaultBlockData* p, RailType railtype, byte flag)
+static CommandCost AiDoBuildDefaultRailTrack(TileIndex tile, const AiDefaultBlockData* p, RailType railtype, byte flag)
 {
-	int32 ret;
-	int32 total_cost = 0;
+	CommandCost ret;
+	CommandCost total_cost = 0;
 	Town *t = NULL;
 	int rating = 0;
 	int i, j, k;
@@ -1734,7 +1734,7 @@
 }
 
 // Returns rule and cost
-static int AiBuildDefaultRailTrack(TileIndex tile, byte p0, byte p1, byte p2, byte p3, byte dir, byte cargo, RailType railtype, int32* cost)
+static int AiBuildDefaultRailTrack(TileIndex tile, byte p0, byte p1, byte p2, byte p3, byte dir, byte cargo, RailType railtype, CommandCost* cost)
 {
 	int i;
 	const AiDefaultRailBlock *p;
@@ -1743,7 +1743,7 @@
 		if (p->p0 == p0 && p->p1 == p1 && p->p2 == p2 && p->p3 == p3 &&
 				(p->dir == 0xFF || p->dir == dir || ((p->dir - 1) & 3) == dir)) {
 			*cost = AiDoBuildDefaultRailTrack(tile, p->data, railtype, DC_NO_TOWN_RATING);
-			if (!CmdFailed(*cost) && AiCheckTrackResources(tile, p->data, cargo))
+			if (CmdSucceeded(*cost) && AiCheckTrackResources(tile, p->data, cargo))
 				return i;
 		}
 	}
@@ -1821,7 +1821,7 @@
 	int j;
 	AiBuildRec *aib;
 	int rule;
-	int32 cost;
+	CommandCost cost;
 
 	// time out?
 	if (++p->ai.timeout_counter == 1388) {
@@ -2067,9 +2067,9 @@
 	uint z;
 
 	if (GetTileSlope(tile, &z) == _dir_table_2[p[0] & 3] && z != 0) {
-		int32 cost = DoCommand(tile, arf->player->ai.railtype_to_use, 0, DC_AUTO, CMD_BUILD_TUNNEL);
-
-		if (!CmdFailed(cost) && cost <= (arf->player->player_money >> 4)) {
+		CommandCost cost = DoCommand(tile, arf->player->ai.railtype_to_use, 0, DC_AUTO, CMD_BUILD_TUNNEL);
+
+		if (CmdSucceeded(cost) && cost <= (arf->player->player_money >> 4)) {
 			AiBuildRailRecursive(arf, _build_tunnel_endtile, p[0] & 3);
 			if (arf->depth == 1) AiCheckRailPathBetter(arf, p);
 		}
@@ -2123,7 +2123,7 @@
 		do {
 			// Make sure the tile is not in the list of banned tiles and that a rail can be built here.
 			if (!AiIsTileBanned(arf->player, tile, p[0]) &&
-					!CmdFailed(DoCommand(tile, arf->player->ai.railtype_to_use, p[0], DC_AUTO | DC_NO_WATER | DC_NO_RAIL_OVERLAP, CMD_BUILD_SINGLE_RAIL))) {
+					CmdSucceeded(DoCommand(tile, arf->player->ai.railtype_to_use, p[0], DC_AUTO | DC_NO_WATER | DC_NO_RAIL_OVERLAP, CMD_BUILD_SINGLE_RAIL))) {
 				AiBuildRailRecursive(arf, tile, p[1]);
 			}
 
@@ -2211,7 +2211,7 @@
 		for (i = MAX_BRIDGES - 1; i != 0; i--) {
 			if (CheckBridge_Stuff(i, bridge_len)) {
 				int32 cost = DoCommand(arf.bridge_end_tile, p->ai.cur_tile_a, i | (p->ai.railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
-				if (!CmdFailed(cost) && cost < (p->player_money >> 5)) break;
+				if (CmdSucceeded(cost) && cost < (p->player_money >> 5)) break;
 			}
 		}
 
@@ -2465,7 +2465,7 @@
 	EngineID veh;
 	int i;
 	CargoID cargo;
-	int32 cost;
+	CommandCost cost;
 	Vehicle *v;
 	VehicleID loco_id;
 
@@ -2500,7 +2500,7 @@
 		if (++p->ai.state_counter == 1000) {
 			for (i = 0; p->ai.wagon_list[i] != INVALID_VEHICLE; i++) {
 				cost = DoCommand(tile, p->ai.wagon_list[i], 0, DC_EXEC, CMD_SELL_RAIL_WAGON);
-				assert(!CmdFailed(cost));
+				assert(CmdSucceeded(cost));
 			}
 			p->ai.state = AIS_0;
 		}
@@ -2509,7 +2509,7 @@
 
 	// Try to build the locomotive
 	cost = DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE);
-	assert(!CmdFailed(cost));
+	assert(CmdSucceeded(cost));
 	loco_id = _new_vehicle_id;
 
 	// Sell a vehicle if the train is double headed.
@@ -2605,10 +2605,10 @@
 }
 
 static bool _want_road_truck_station;
-static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag);
+static CommandCost AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag);
 
 // Returns rule and cost
-static int AiFindBestDefaultRoadBlock(TileIndex tile, byte direction, byte cargo, int32 *cost)
+static int AiFindBestDefaultRoadBlock(TileIndex tile, byte direction, byte cargo, CommandCost *cost)
 {
 	int i;
 	const AiDefaultRoadBlock *p;
@@ -2618,7 +2618,7 @@
 	for (i = 0; (p = _road_default_block_data[i]) != NULL; i++) {
 		if (p->dir == direction) {
 			*cost = AiDoBuildDefaultRoadBlock(tile, p->data, 0);
-			if (!CmdFailed(*cost) && AiCheckRoadResources(tile, p->data, cargo))
+			if (CmdSucceeded(*cost) && AiCheckRoadResources(tile, p->data, cargo))
 				return i;
 		}
 	}
@@ -2626,10 +2626,10 @@
 	return -1;
 }
 
-static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
+static CommandCost AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
 {
-	int32 ret;
-	int32 total_cost = 0;
+	CommandCost ret;
+	CommandCost total_cost = 0;
 	Town *t = NULL;
 	int rating = 0;
 	int roadflag = 0;
@@ -2721,7 +2721,7 @@
 	int j;
 	AiBuildRec *aib;
 	int rule;
-	int32 cost;
+	CommandCost cost;
 
 	// time out?
 	if (++p->ai.timeout_counter == 1388) {
@@ -2758,7 +2758,7 @@
 					p->ai.state_mode = -p->ai.state_mode;
 				}
 			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p, aib->use_tile)) {
-				int32 r;
+				CommandCost r;
 
 				// player has money, build it.
 				aib->cur_building_rule = rule;
@@ -2768,7 +2768,7 @@
 					_road_default_block_data[rule]->data,
 					DC_EXEC | DC_NO_TOWN_RATING
 				);
-				assert(!CmdFailed(r));
+				assert(CmdSucceeded(r));
 			}
 		} while (++aib, --j);
 	}
@@ -2916,7 +2916,7 @@
 		ROAD_NW | ROAD_SW,
 		ROAD_SE | ROAD_NE
 	};
-	return !CmdFailed(DoCommand(tile, _road_bits[type], 0, flags, CMD_BUILD_ROAD));
+	return CmdSucceeded(DoCommand(tile, _road_bits[type], 0, flags, CMD_BUILD_ROAD));
 }
 
 static inline void AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
@@ -2967,9 +2967,9 @@
 	uint z;
 
 	if (GetTileSlope(tile, &z) == _dir_table_2[p[0] & 3] && z != 0) {
-		int32 cost = DoCommand(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
-
-		if (!CmdFailed(cost) && cost <= (arf->player->player_money >> 4)) {
+		CommandCost cost = DoCommand(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
+
+		if (CmdSucceeded(cost) && cost <= (arf->player->player_money >> 4)) {
 			AiBuildRoadRecursive(arf, _build_tunnel_endtile, p[0] & 3);
 			if (arf->depth == 1)  AiCheckRoadPathBetter(arf, p);
 		}
@@ -3101,8 +3101,8 @@
 		 */
 		for (i = 10; i != 0; i--) {
 			if (CheckBridge_Stuff(i, bridge_len)) {
-				int32 cost = DoCommand(tile, p->ai.cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE);
-				if (!CmdFailed(cost) && cost < (p->player_money >> 5)) break;
+				CommandCost cost = DoCommand(tile, p->ai.cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE);
+				if (CmdSucceeded(cost) && cost < (p->player_money >> 5)) break;
 			}
 		}
 
@@ -3387,10 +3387,10 @@
 	p->ai.state_counter = 0;
 }
 
-static int32 AiDoBuildDefaultAirportBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
+static CommandCost AiDoBuildDefaultAirportBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
 {
 	uint32 avail_airports = GetValidAirports();
-	int32 total_cost = 0, ret;
+	CommandCost total_cost = 0, ret;
 
 	for (; p->mode == 0; p++) {
 		if (!HASBIT(avail_airports, p->attr)) return CMD_ERROR;
@@ -3424,7 +3424,7 @@
 	return true;
 }
 
-static int AiFindBestDefaultAirportBlock(TileIndex tile, byte cargo, byte heli, int32 *cost)
+static int AiFindBestDefaultAirportBlock(TileIndex tile, byte cargo, byte heli, CommandCost *cost)
 {
 	const AiDefaultBlockData *p;
 	uint i;
@@ -3435,7 +3435,7 @@
 		if (heli && !(GetAirport(p->attr)->flags & AirportFTAClass::HELICOPTERS)) continue;
 
 		*cost = AiDoBuildDefaultAirportBlock(tile, p, 0);
-		if (!CmdFailed(*cost) && AiCheckAirportResources(tile, p, cargo))
+		if (CmdSucceeded(*cost) && AiCheckAirportResources(tile, p, cargo))
 			return i;
 	}
 	return -1;
@@ -3446,7 +3446,7 @@
 	int i, j;
 	AiBuildRec *aib;
 	int rule;
-	int32 cost;
+	CommandCost cost;
 
 	// time out?
 	if (++p->ai.timeout_counter == 1388) {
@@ -3485,7 +3485,7 @@
 				}
 			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p, aib->use_tile)) {
 				// player has money, build it.
-				int32 r;
+				CommandCost r;
 
 				aib->cur_building_rule = rule;
 
@@ -3494,7 +3494,7 @@
 					_airport_default_block_data[rule],
 					DC_EXEC | DC_NO_TOWN_RATING
 				);
-				assert(!CmdFailed(r));
+				assert(CmdSucceeded(r));
 			}
 		} while (++aib, --j);
 	} while (--i);
--- a/src/ai/trolly/build.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/trolly/build.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -36,7 +36,7 @@
 //    numtracks : in case of AI_TRAIN: tracks of station
 //    direction : the direction of the station
 //    flag : flag passed to DoCommand (normally 0 to get the cost or DC_EXEC to build it)
-int AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag)
+CommandCost AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag)
 {
 	if (type == AI_TRAIN)
 		return AI_DoCommand(tile, direction + (numtracks << 8) + (length << 16), 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_RAILROAD_STATION);
@@ -53,7 +53,7 @@
 //   tile_a : starting point
 //   tile_b : end point
 //   flag : flag passed to DoCommand
-int AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag)
+CommandCost AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag)
 {
 	int bridge_type, bridge_len, type, type2;
 
@@ -90,15 +90,15 @@
 //   part : Which part we need to build
 //
 // TODO: skip already builded road-pieces (e.g.: cityroad)
-int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag)
+CommandCost AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag)
 {
 	int part = PathFinderInfo->position;
 	byte *route_extra = PathFinderInfo->route_extra;
 	TileIndex *route = PathFinderInfo->route;
 	int dir;
 	int old_dir = -1;
-	int cost = 0;
-	int res;
+	CommandCost cost = 0;
+	CommandCost res;
 	// We need to calculate the direction with the parent of the parent.. so we skip
 	//  the first pieces and the last piece
 	if (part < 1) part = 1;
@@ -206,7 +206,7 @@
 						return 0;
 					}
 
-					if (!CmdFailed(res)) cost += res;
+					if (CmdSucceeded(res)) cost += res;
 				}
 				// Go to the next tile
 				part++;
@@ -243,7 +243,7 @@
 			const RoadVehicleInfo *rvi = RoadVehInfo(i);
 			const Engine* e = GetEngine(i);
 			int32 rating;
-			int32 ret;
+			CommandCost ret;
 
 			/* Skip vehicles which can't take our cargo type */
 			if (rvi->cargo_type != p->ainew.cargo && !CanRefitTo(i, p->ainew.cargo)) continue;
@@ -293,7 +293,7 @@
 
 
 // Builds the best vehicle possible
-int AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag)
+CommandCost AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag)
 {
 	EngineID i = AiNew_PickVehicle(p);
 
@@ -307,9 +307,9 @@
 	}
 }
 
-int AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag)
+CommandCost AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag)
 {
-	int ret, ret2;
+	CommandCost ret, ret2;
 	if (p->ainew.tbt == AI_TRAIN) {
 		return AI_DoCommand(tile, 0, direction, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_TRAIN_DEPOT);
 	} else {
--- a/src/ai/trolly/pathfinder.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/trolly/pathfinder.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -23,18 +23,18 @@
 	Player *p = GetPlayer(_current_player);
 
 	if (dir == TEST_STATION_NO_DIR) {
-		int32 ret;
+		CommandCost ret;
 		// TODO: currently we only allow spots that can be access from al 4 directions...
 		//  should be fixed!!!
 		for (dir = 0; dir < 4; dir++) {
 			ret = AiNew_Build_Station(p, p->ainew.tbt, tile, 1, 1, dir, DC_QUERY_COST);
-			if (!CmdFailed(ret)) return true;
+			if (CmdSucceeded(ret)) return true;
 		}
 		return false;
 	}
 
 	// return true if command succeeded, so the inverse of CmdFailed()
-	return !CmdFailed(AiNew_Build_Station(p, p->ainew.tbt, tile, 1, 1, dir, DC_QUERY_COST));
+	return CmdSucceeded(AiNew_Build_Station(p, p->ainew.tbt, tile, 1, 1, dir, DC_QUERY_COST));
 }
 
 
@@ -214,7 +214,7 @@
 // What tiles are around us.
 static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *current)
 {
-	int ret;
+	CommandCost ret;
 	int dir;
 
 	Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
@@ -352,7 +352,7 @@
 			// Now simply check if a tunnel can be build
 			ret = AI_DoCommand(tile, (PathFinderInfo->rail_or_road?0:0x200), 0, DC_AUTO, CMD_BUILD_TUNNEL);
 			tileh = GetTileSlope(_build_tunnel_endtile, NULL);
-			if (!CmdFailed(ret) && (tileh == SLOPE_SW || tileh == SLOPE_SE || tileh == SLOPE_NW || tileh == SLOPE_NE)) {
+			if (CmdSucceeded(ret) && (tileh == SLOPE_SW || tileh == SLOPE_SE || tileh == SLOPE_NW || tileh == SLOPE_NE)) {
 				aystar->neighbours[aystar->num_neighbours].tile = _build_tunnel_endtile;
 				aystar->neighbours[aystar->num_neighbours].user_data[0] = AI_PATHFINDER_FLAG_TUNNEL + (dir << 8);
 				aystar->neighbours[aystar->num_neighbours++].direction = 0;
--- a/src/ai/trolly/trolly.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/trolly/trolly.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -642,7 +642,7 @@
 
 	if (new_tile == 0 && p->ainew.tbt == AI_BUS) {
 		uint x, y, i = 0;
-		int r;
+		CommandCost r;
 		uint best;
 		uint accepts[NUM_CARGO];
 		TileIndex found_spot[AI_FINDSTATION_TILE_RANGE*AI_FINDSTATION_TILE_RANGE * 4];
@@ -650,7 +650,7 @@
 		// To find a good spot we scan a range from the center, a get the point
 		//  where we get the most cargo and where it is buildable.
 		// TODO: also check for station of myself and make sure we are not
-		//   taking eachothers passangers away (bad result when it does not)
+		//   taking eachothers passengers away (bad result when it does not)
 		for (x = TileX(tile) - AI_FINDSTATION_TILE_RANGE; x <= TileX(tile) + AI_FINDSTATION_TILE_RANGE; x++) {
 			for (y = TileY(tile) - AI_FINDSTATION_TILE_RANGE; y <= TileY(tile) + AI_FINDSTATION_TILE_RANGE; y++) {
 				new_tile = TileXY(x, y);
@@ -788,7 +788,8 @@
 	// To make the depot stand in the middle of the route, we start from the center..
 	// But first we walk through the route see if we can find a depot that is ours
 	//  this keeps things nice ;)
-	int g, i, r;
+	int g, i;
+	CommandCost r;
 	DiagDirection j;
 	TileIndex tile;
 	assert(p->ainew.state == AI_STATE_FIND_DEPOT);
@@ -984,7 +985,7 @@
 // Build the stations
 static void AiNew_State_BuildStation(Player *p)
 {
-	int res = 0;
+	CommandCost res = 0;
 	assert(p->ainew.state == AI_STATE_BUILD_STATION);
 	if (p->ainew.temp == 0) {
 		if (!IsTileType(p->ainew.from_tile, MP_STATION))
@@ -1037,8 +1038,8 @@
 			// We don't want that, so try building some road left or right of the station
 			int dir1, dir2, dir3;
 			TileIndex tile;
-			int i, ret;
-			for (i=0;i<2;i++) {
+			CommandCost ret;
+			for (int i = 0; i < 2; i++) {
 				if (i == 0) {
 					tile = p->ainew.from_tile + TileOffsByDiagDir(p->ainew.from_direction);
 					dir1 = p->ainew.from_direction - 1;
@@ -1056,11 +1057,11 @@
 				}
 
 				ret = AI_DoCommand(tile, DiagDirToRoadBits(ReverseDiagDir((DiagDirection)dir1)), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-				if (!CmdFailed(ret)) {
+				if (CmdSucceeded(ret)) {
 					dir1 = TileOffsByDiagDir(dir1);
 					if (IsTileType(tile + dir1, MP_CLEAR) || IsTileType(tile + dir1, MP_TREES)) {
 						ret = AI_DoCommand(tile+dir1, AiNew_GetRoadDirection(tile, tile+dir1, tile+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-						if (!CmdFailed(ret)) {
+						if (CmdSucceeded(ret)) {
 							if (IsTileType(tile + dir1 + dir1, MP_CLEAR) || IsTileType(tile + dir1 + dir1, MP_TREES))
 								AI_DoCommand(tile+dir1+dir1, AiNew_GetRoadDirection(tile+dir1, tile+dir1+dir1, tile+dir1+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
 						}
@@ -1068,11 +1069,11 @@
 				}
 
 				ret = AI_DoCommand(tile, DiagDirToRoadBits(ReverseDiagDir((DiagDirection)dir2)), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-				if (!CmdFailed(ret)) {
+				if (CmdSucceeded(ret)) {
 					dir2 = TileOffsByDiagDir(dir2);
 					if (IsTileType(tile + dir2, MP_CLEAR) || IsTileType(tile + dir2, MP_TREES)) {
 						ret = AI_DoCommand(tile+dir2, AiNew_GetRoadDirection(tile, tile+dir2, tile+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-						if (!CmdFailed(ret)) {
+						if (CmdSucceeded(ret)) {
 							if (IsTileType(tile + dir2 + dir2, MP_CLEAR) || IsTileType(tile + dir2 + dir2, MP_TREES))
 								AI_DoCommand(tile+dir2+dir2, AiNew_GetRoadDirection(tile+dir2, tile+dir2+dir2, tile+dir2+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
 						}
@@ -1080,11 +1081,11 @@
 				}
 
 				ret = AI_DoCommand(tile, DiagDirToRoadBits((DiagDirection)dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-				if (!CmdFailed(ret)) {
+				if (CmdSucceeded(ret)) {
 					dir3 = TileOffsByDiagDir(dir3);
 					if (IsTileType(tile + dir3, MP_CLEAR) || IsTileType(tile + dir3, MP_TREES)) {
 						ret = AI_DoCommand(tile+dir3, AiNew_GetRoadDirection(tile, tile+dir3, tile+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-						if (!CmdFailed(ret)) {
+						if (CmdSucceeded(ret)) {
 							if (IsTileType(tile + dir3 + dir3, MP_CLEAR) || IsTileType(tile + dir3 + dir3, MP_TREES))
 								AI_DoCommand(tile+dir3+dir3, AiNew_GetRoadDirection(tile+dir3, tile+dir3+dir3, tile+dir3+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
 						}
@@ -1102,7 +1103,7 @@
 // Builds the depot
 static void AiNew_State_BuildDepot(Player *p)
 {
-	int res = 0;
+	CommandCost res = 0;
 	assert(p->ainew.state == AI_STATE_BUILD_DEPOT);
 
 	if (IsTileType(p->ainew.depot_tile, MP_STREET) && GetRoadTileType(p->ainew.depot_tile) == ROAD_TILE_DEPOT) {
@@ -1137,7 +1138,7 @@
 // Build vehicles
 static void AiNew_State_BuildVehicle(Player *p)
 {
-	int res;
+	CommandCost res;
 	assert(p->ainew.state == AI_STATE_BUILD_VEHICLE);
 
 	// Check if we need to build a vehicle
@@ -1277,7 +1278,7 @@
 
 			if (!AiNew_SetSpecialVehicleFlag(p, v, AI_VEHICLEFLAG_SELL)) return;
 			{
-				int ret = 0;
+				CommandCost ret = 0;
 				if (v->type == VEH_ROAD)
 					ret = AI_DoCommand(0, v->index, 0, DC_EXEC, CMD_SEND_ROADVEH_TO_DEPOT);
 				// This means we can not find a depot :s
--- a/src/ai/trolly/trolly.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ai/trolly/trolly.h	Tue Jun 19 07:21:01 2007 +0000
@@ -252,11 +252,11 @@
 
 // ai_build.c
 bool AiNew_Build_CompanyHQ(Player *p, TileIndex tile);
-int AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag);
-int AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag);
-int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag);
+CommandCost AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag);
+CommandCost AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag);
+CommandCost AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag);
 EngineID AiNew_PickVehicle(Player *p);
-int AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag);
-int AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag);
+CommandCost AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag);
+CommandCost AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag);
 
 #endif /* AI_TROLLY_H */
--- a/src/aircraft_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/aircraft_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -227,7 +227,7 @@
 	height = spr->height;
 }
 
-static int32 EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
+static CommandCost EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
 {
 	return GetEngineProperty(engine, 0x0B, avi->base_cost) * (_eco->GetPrice(CEconomy::AIRCRAFT_BASE) >> 3) >> 5;
 }
@@ -265,12 +265,12 @@
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  * return result of operation.  Could be cost, error
  */
-int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_player)) return_cmd_error(STR_AIRCRAFT_NOT_AVAILABLE);
 
 	const AircraftVehicleInfo *avi = AircraftVehInfo(p1);
-	int32 value = EstimateAircraftCost(p1, avi);
+	CommandCost value = EstimateAircraftCost(p1, avi);
 
 	/* to just query the cost, it is not neccessary to have a valid tile (automation/AI) */
 	if (flags & DC_QUERY_COST) return value;
@@ -476,7 +476,7 @@
  * @param p2 unused
  * @return result of operation.  Error or sold value
  */
-int32 CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -503,7 +503,7 @@
  * @param p2 unused
  * @return result of operation.  Nothing if everything went well
  */
-int32 CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -546,7 +546,7 @@
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  * @return o if everything went well
  */
-int32 CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (p2 & DEPOT_MASS_SEND) {
 		/* Mass goto depot requested */
@@ -623,7 +623,7 @@
  * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
-int32 CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	byte new_subtype = GB(p2, 8, 8);
 
@@ -668,7 +668,7 @@
 	}
 	_returned_refit_capacity = pass;
 
-	int32 cost = 0;
+	CommandCost cost = 0;
 	if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
 		cost = GetRefitCost(v->engine_type);
 	}
@@ -744,7 +744,7 @@
 
 	if (v->vehstatus & VS_STOPPED) return;
 
-	int32 cost = GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) *
+	CommandCost cost = GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) *
 		_eco->GetPrice(CEconomy::AIRCRAFT_RUNNING) / 364;
 
 	v->profit_this_year -= cost >> 8;
@@ -1380,7 +1380,7 @@
 		 */
 		const Station *st = GetStation(v->u.air.targetairport);
 		if (!st->IsValid() || st->airport_tile == 0) {
-			int32 ret;
+			CommandCost ret;
 			PlayerID old_player = _current_player;
 
 			_current_player = v->owner;
--- a/src/airport_movement.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/airport_movement.h	Tue Jun 19 07:21:01 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)
--- a/src/autoreplace_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/autoreplace_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -124,10 +124,10 @@
  * @param flags is the flags to use when calling DoCommand(). Mainly DC_EXEC counts
  * @return value is cost of the replacement or CMD_ERROR
  */
-static int32 ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
+static CommandCost ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
 {
-	int32 cost;
-	int32 sell_value;
+	CommandCost cost;
+	CommandCost sell_value;
 	Vehicle *old_v = *w;
 	const Player *p = GetPlayer(old_v->owner);
 	EngineID new_engine_type;
@@ -173,7 +173,7 @@
 
 	if (replacement_cargo_type != CT_NO_REFIT) {
 		/* add refit cost */
-		int32 refit_cost = GetRefitCost(new_engine_type);
+		CommandCost refit_cost = GetRefitCost(new_engine_type);
 		if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost += refit_cost; // pay for both ends
 		cost += refit_cost;
 	}
@@ -246,7 +246,7 @@
 			GetName(vehicle_name, old_v->string_id & 0x7FF, lastof(vehicle_name));
 		}
 	} else { // flags & DC_EXEC not set
-		int32 tmp_move = 0;
+		CommandCost tmp_move = 0;
 		if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v) && old_v->next != NULL) {
 			/* Verify that the wagons can be placed on the engine in question.
 			 * This is done by building an engine, test if the wagons can be added and then sell the test engine. */
@@ -295,12 +295,12 @@
  * @param display_costs If set, a cost animation is shown (only if check is false)
  * @return CMD_ERROR if something went wrong. Otherwise the price of the replace
  */
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
 {
 	Vehicle *w;
 	const Player *p = GetPlayer(v->owner);
 	byte flags = 0;
-	int32 cost, temp_cost = 0;
+	CommandCost cost, temp_cost = 0;
 	bool stopped;
 
 	/* Remember the length in case we need to trim train later on
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_base.cpp	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/blitter/8bpp_debug.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -1,3 +1,7 @@
+/* $Id$ */
+
+/** @file 8bpp_debug.cpp */
+
 #include "../stdafx.h"
 #include "../zoom.hpp"
 #include "../gfx.h"
@@ -8,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/blitter/8bpp_debug.hpp	Tue Jun 19 07:21:01 2007 +0000
@@ -1,29 +1,23 @@
 /* $Id$ */
 
-/** @file debug.hpp */
+/** @file 8bpp_debug.hpp */
 
 #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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/blitter/8bpp_optimized.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -1,3 +1,7 @@
+/* $Id$ */
+
+/** @file 8bpp_optimized.cpp */
+
 #include "../stdafx.h"
 #include "../zoom.hpp"
 #include "../gfx.h"
@@ -8,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/blitter/8bpp_optimized.hpp	Tue Jun 19 07:21:01 2007 +0000
@@ -1,29 +1,23 @@
 /* $Id$ */
 
-/** @file 8bpp_nice.hpp */
+/** @file 8bpp_optimized.hpp */
 
 #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-optimzed"; }
-
+	/* 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(); }
 };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_simple.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -0,0 +1,67 @@
+/* $Id$ */
+
+/** @file 8bpp_simple.cpp */
+
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "8bpp_simple.hpp"
+
+static FBlitter_8bppSimple iFBlitter_8bppSimple;
+
+void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const uint8 *src, *src_line;
+	uint8 *dst, *dst_line;
+
+	/* Find where to start reading in the source sprite */
+	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;
+		dst_line += bp->pitch;
+
+		src = src_line;
+		src_line += bp->sprite_width * ScaleByZoom(1, zoom);
+
+		for (int x = 0; x < bp->width; x++) {
+			uint color = 0;
+
+			switch (mode) {
+				case BM_COLOUR_REMAP:
+					color = bp->remap[*src];
+					break;
+
+				case BM_TRANSPARENT:
+					if (*src != 0) color = bp->remap[*dst];
+					break;
+
+				default:
+					color = *src;
+					break;
+			}
+			if (color != 0) *dst = color;
+			dst++;
+			src += ScaleByZoom(1, zoom);
+		}
+	}
+}
+
+Sprite *Blitter_8bppSimple::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width);;
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	/* Copy over only the 'remap' channel, as that is what we care about in 8bpp */
+	for (int i = 0; i < sprite->height * sprite->width; i++) {
+		dest_sprite->data[i] = sprite->data[i].m;
+	}
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_simple.hpp	Tue Jun 19 07:21:01 2007 +0000
@@ -0,0 +1,24 @@
+/* $Id$ */
+
+/** @file 8bpp_simple.hpp */
+
+#ifndef BLITTER_8BPP_SIMPLE_HPP
+#define BLITTER_8BPP_SIMPLE_HPP
+
+#include "8bpp_base.hpp"
+#include "factory.hpp"
+
+class Blitter_8bppSimple : public Blitter_8bppBase {
+public:
+	/* 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(); }
+};
+
+#endif /* BLITTER_8BPP_SIMPLE_HPP */
--- a/src/blitter/8bpp_slow.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-#include "../stdafx.h"
-#include "../zoom.hpp"
-#include "../gfx.h"
-#include "8bpp_slow.hpp"
-
-static FBlitter_8bppSimple iFBlitter_8bppSimple;
-
-void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
-{
-	const byte *src, *src_line;
-	Pixel8 *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;
-
-	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++) {
-			uint color = 0;
-
-			switch (mode) {
-				case BM_COLOUR_REMAP:
-					color = bp->remap[*src];
-					break;
-
-				case BM_TRANSPARENT:
-					if (*src != 0) color = bp->remap[*dst];
-					break;
-
-				default:
-					color = *src;
-					break;
-			}
-			if (color != 0) *dst = color;
-			dst++;
-			src += ScaleByZoom(1, zoom);
-		}
-	}
-}
-
-Sprite *Blitter_8bppSimple::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
-{
-	Sprite *dest_sprite;
-	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width);;
-
-	dest_sprite->height = sprite->height;
-	dest_sprite->width  = sprite->width;
-	dest_sprite->x_offs = sprite->x_offs;
-	dest_sprite->y_offs = sprite->y_offs;
-
-	/* Copy over only the 'remap' channel, as that is what we care about in 8bpp */
-	for (int i = 0; i < sprite->height * sprite->width; i++) {
-		dest_sprite->data[i] = sprite->data[i].m;
-	}
-
-	return dest_sprite;
-}
--- a/src/blitter/8bpp_slow.hpp	Wed Jun 13 12:05:56 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/* $Id$ */
-
-/** @file 8bpp.hpp */
-
-#ifndef BLITTER_8BPP_SIMPLE_HPP
-#define BLITTER_8BPP_SIMPLE_HPP
-
-#include "blitter.hpp"
-
-typedef Pixel Pixel8;
-
-class Blitter_8bppSimple : public Blitter {
-public:
-	uint8 GetScreenDepth() { return 8; }
-
-	void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
-
-	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(); }
-};
-
-#endif /* BLITTER_8BPP_SIMPLE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/base.hpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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/bridge_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/bridge_gui.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -114,7 +114,7 @@
 void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type)
 {
 	uint j = 0;
-	int32 ret;
+	CommandCost ret;
 	StringID errmsg;
 
 	DeleteWindowById(WC_BUILD_BRIDGE, 0);
--- a/src/clear_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/clear_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -37,7 +37,7 @@
 	int modheight_count;
 	int tile_table_count;
 
-	int32 cost;
+	CommandCost cost;
 
 	TileIndex *tile_table;
 	TerraformerHeightMod *modheight;
@@ -98,7 +98,7 @@
 static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
 {
 	int r;
-	int32 ret;
+	CommandCost ret;
 
 	assert(tile < MapSize());
 
@@ -233,7 +233,7 @@
  * @param p2 direction; eg up or down
  * @return error or cost of terraforming
  */
-int32 CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TerraformerState ts;
 	TileIndex t;
@@ -358,14 +358,16 @@
  * @param p2 unused
  * @return  error or cost of terraforming
  */
-int32 CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	int size_x, size_y;
 	int ex;
 	int ey;
 	int sx, sy;
 	uint h, curh;
-	int32 ret, cost, money;
+	int32 money;
+	CommandCost ret;
+	CommandCost cost;
 
 	if (p1 >= MapSize()) return CMD_ERROR;
 
@@ -419,9 +421,9 @@
  * @param p2 unused
  * @return error of cost of operation
  */
-int32 CmdPurchaseTile(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPurchaseTile(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -443,7 +445,7 @@
 }
 
 
-static int32 ClearTile_Clear(TileIndex tile, byte flags)
+static CommandCost ClearTile_Clear(TileIndex tile, byte flags)
 {
 	static const int32 clear_price_table[] = {
 		_eco->GetPrice(CEconomy::CLEAR_1),
@@ -454,7 +456,7 @@
 		_eco->GetPrice(CEconomy::PURCHASE_LAND),
 		_eco->GetPrice(CEconomy::CLEAR_2), // XXX unused?
 	};
-	int32 price;
+	CommandCost price;
 
 	if (IsClearGround(tile, CLEAR_GRASS) && GetClearDensity(tile) == 0) {
 		price = 0;
@@ -475,7 +477,7 @@
  * @param p2 unused
  * @return error or cost of operation
  */
-int32 CmdSellTile(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellTile(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
--- a/src/command.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/command.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -17,7 +17,7 @@
 
 const char* _cmd_text = NULL;
 
-#define DEF_COMMAND(yyyy) int32 yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+#define DEF_COMMAND(yyyy) CommandCost yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 
 DEF_COMMAND(CmdBuildRailroadTrack);
 DEF_COMMAND(CmdRemoveRailroadTrack);
@@ -351,9 +351,9 @@
 
 static int _docommand_recursive;
 
-int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
 {
-	int32 res;
+	CommandCost res;
 	CommandProc *proc;
 
 	/* Do not even think about executing out-of-bounds tile-commands */
@@ -425,7 +425,7 @@
  * the callback is called when the command succeeded or failed. */
 bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd)
 {
-	int32 res = 0, res2;
+	CommandCost res = 0, res2;
 	CommandProc *proc;
 	uint32 flags;
 	bool notest;
--- a/src/command.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/command.h	Tue Jun 19 07:21:01 2007 +0000
@@ -184,7 +184,7 @@
 	CMD_OFFLINE = 0x2, ///< the command cannot be executed in a multiplayer game; single-player only
 };
 
-typedef int32 CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
+typedef CommandCost CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
 
 struct Command {
 	CommandProc *proc;
@@ -199,15 +199,17 @@
  * @param res the resulting value from the command to be checked
  * @return Return true if the command failed, false otherwise
  */
-static inline bool CmdFailed(int32 res)
+static inline bool CmdFailed(CommandCost res)
 {
 	/* lower 16bits are the StringID of the possible error */
 	return res <= (CMD_ERROR | INVALID_STRING_ID);
 }
 
+static inline bool CmdSucceeded(CommandCost res) { return !CmdFailed(res); }
+
 /* command.cpp */
 typedef void CommandCallback(bool success, TileIndex tile, uint32 p1, uint32 p2);
-int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
 bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
 
 #ifdef ENABLE_NETWORK
--- a/src/console_cmds.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/console_cmds.cpp	Tue Jun 19 07:21:01 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/dummy_land.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/dummy_land.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -26,7 +26,7 @@
 	return SLOPE_FLAT;
 }
 
-static int32 ClearTile_Dummy(TileIndex tile, byte flags)
+static CommandCost ClearTile_Dummy(TileIndex tile, byte flags)
 {
 	return_cmd_error(STR_0001_OFF_EDGE_OF_MAP);
 }
--- a/src/economy.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/economy.cpp	Tue Jun 19 07:21:01 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 * _eco->GetPrice(CEconomy::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;
 	}
@@ -267,7 +259,7 @@
 			for (i = 0; i < 4; i++) {
 				if (p->share_owners[i] == old_player) {
 					/* Sell his shares */
-					int32 res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+					CommandCost res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
 					/* Because we are in a DoCommand, we can't just execute an other one and
 					 *  expect the money to be removed. We need to do it ourself! */
 					SubtractMoneyFromPlayer(res);
@@ -281,7 +273,7 @@
 			_current_player = p->share_owners[i];
 			if (_current_player != PLAYER_SPECTATOR) {
 				/* Sell the shares */
-				int32 res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+				CommandCost res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
 				/* Because we are in a DoCommand, we can't just execute an other one and
 				 *  expect the money to be removed. We need to do it ourself! */
 				SubtractMoneyFromPlayer(res);
@@ -355,7 +347,30 @@
 					DeleteWindowById(WC_VEHICLE_VIEW, v->index);
 					DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
 					DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
-					DeleteVehicle(v);
+
+					if (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && IsFreeWagon(v))) {
+						switch (v->type) {
+							default: NOT_REACHED();
+
+							case VEH_TRAIN: {
+								Vehicle *u = v;
+								do {
+									Vehicle *next = GetNextVehicle(u);
+									DeleteVehicle(u);
+									u = next;
+								} while (u != NULL);
+							} break;
+
+							case VEH_ROAD:
+							case VEH_SHIP:
+								DeleteVehicle(v);
+								break;
+
+							case VEH_AIRCRAFT:
+								DeleteVehicleChain(v);
+								break;
+						}
+					}
 				} else {
 					v->owner = new_player;
 					v->group_id = DEFAULT_GROUP;
@@ -1228,9 +1243,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];
 
@@ -1249,6 +1266,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(
@@ -1270,6 +1289,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);
 		}
 	}
 
@@ -1633,10 +1654,10 @@
  * @param p1 player to buy the shares from
  * @param p2 unused
  */
-int32 CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
-	int64 cost;
+	CommandCost cost;
 
 	/* Check if buying shares is allowed (protection against modified clients */
 	if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
@@ -1679,7 +1700,7 @@
  * @param p1 player to sell the shares from
  * @param p2 unused
  */
-int32 CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
 	int64 cost;
@@ -1715,7 +1736,7 @@
  * @param p1 player/company to buy up
  * @param p2 unused
  */
-int32 CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
 	PlayerID pid = (PlayerID)p1;
--- a/src/engine.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/engine.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -266,7 +266,7 @@
  * @param p1 engine-prototype offered
  * @param p2 unused
  */
-int32 CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Engine *e;
 
@@ -374,7 +374,7 @@
  * @param p1 engine ID to rename
  * @param p2 unused
  */
-int32 CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 
@@ -533,7 +533,7 @@
 	return er == NULL ? INVALID_ENGINE : er->to;
 }
 
-int32 AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags)
+CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags)
 {
 	EngineRenew *er;
 
@@ -560,7 +560,7 @@
 	return 0;
 }
 
-int32 RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags)
+CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags)
 {
 	EngineRenew *er = (EngineRenew *)(*erl);
 	EngineRenew *prev = NULL;
--- a/src/engine.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/engine.h	Tue Jun 19 07:21:01 2007 +0000
@@ -328,7 +328,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-int32 AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags);
+CommandCost AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags);
 
 /**
  * Remove an engine replacement from a given renewlist.
@@ -337,7 +337,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-int32 RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, GroupID group, uint32 flags);
+CommandCost RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, GroupID group, uint32 flags);
 
 /** When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists
  * @param type The type of engine
--- a/src/fileio.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/fileio.cpp	Tue Jun 19 07:21:01 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,68 +409,123 @@
  */
 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);
 }
+
+/**
+ * Sanitizes a filename, i.e. removes all illegal characters from it.
+ * @param filename the "\0" terminated filename
+ */
+void SanitizeFilename(char *filename)
+{
+	for (; *filename != '\0'; filename++) {
+		switch (*filename) {
+			/* The following characters are not allowed in filenames
+			 * on at least one of the supported operating systems: */
+			case ':': case '\\': case '*': case '?': case '/':
+				*filename = '_';
+				break;
+		}
+	}
+}
--- a/src/fileio.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/fileio.h	Tue Jun 19 07:21:01 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,12 +18,79 @@
 void FioOpenFile(int slot, const char *filename);
 void FioReadBlock(void *ptr, uint size);
 void FioSkipBytes(int n);
-
-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_FIRST_DIR,
+	SP_WORKING_DIR = SP_FIRST_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_FIRST_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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/fios.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/fontcache.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/fontcache.h	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/functions.h	Tue Jun 19 07:21:01 2007 +0000
@@ -20,9 +20,9 @@
 void TileLoop_Water(TileIndex tile);
 
 /* players.cpp */
-bool CheckPlayerHasMoney(int32 cost);
-void SubtractMoneyFromPlayer(int32 cost);
-void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost);
+bool CheckPlayerHasMoney(CommandCost cost);
+void SubtractMoneyFromPlayer(CommandCost cost);
+void SubtractMoneyFromPlayerFract(PlayerID player, CommandCost cost);
 bool CheckOwnership(Owner owner);
 bool CheckTileOwnership(TileIndex tile);
 StringID GetPlayerNameString(PlayerID player, uint index);
@@ -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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/gfx.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/gfx.h	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/gfxinit.cpp	Tue Jun 19 07:21:01 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/group_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/group_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -93,7 +93,7 @@
  * @param p1   vehicle type
  * @param p2   unused
  */
-int32 CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleType vt = (VehicleType)p1;
 	if (!IsPlayerBuildableVehicleType(vt)) return CMD_ERROR;
@@ -121,7 +121,7 @@
  *      - p1 bit 0-15 : GroupID
  * @param p2   unused
  */
-int32 CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1)) return CMD_ERROR;
 
@@ -167,7 +167,7 @@
  *   - p1 bit 0-15 : GroupID
  * @param p2   unused
  */
-int32 CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
 
@@ -199,7 +199,7 @@
  * @param p2   vehicle to add to a group
  *   - p2 bit 0-15 : VehicleID
  */
-int32 CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	GroupID new_g = p1;
 
@@ -245,7 +245,7 @@
  *  - p1 bit 0-15 : GroupID
  * @param p2   type of vehicles
  */
-int32 CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleType type = (VehicleType)p2;
 	if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
@@ -282,7 +282,7 @@
  * - p1 bit 0-15 : GroupID
  * @param p2   type of vehicles
  */
-int32 CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleType type = (VehicleType)p2;
 	if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
@@ -319,7 +319,7 @@
  * @param p2
  * - p2 bit 0    : 1 to set or 0 to clear protection.
  */
-int32 CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1)) return CMD_ERROR;
 
--- a/src/industry_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/industry_cmd.cpp	Tue Jun 19 07:21:01 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;
 		}
@@ -334,7 +336,7 @@
 	}
 }
 
-static int32 ClearTile_Industry(TileIndex tile, byte flags)
+static CommandCost ClearTile_Industry(TileIndex tile, byte flags)
 {
 	Industry *i = GetIndustryByTile(tile);
 	const IndustrySpec *indspec = GetIndustrySpec(i->type);
@@ -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) {
@@ -1465,7 +1469,7 @@
  * @param p2 unused
  * @return index of the newly create industry, or CMD_ERROR if it failed
  */
-int32 CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	int num;
 	const IndustryTileTable * const *itt;
--- a/src/industry_map.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/industry_map.h	Tue Jun 19 07:21:01 2007 +0000
@@ -160,7 +160,7 @@
 	_m[t].m2 = index;
 	_m[t].m3 = 0;
 	_m[t].m4 = 0;
-	_m[t].m5 = gfx;
+	SetIndustryGfx(t, gfx);
 }
 
 /**
@@ -246,4 +246,45 @@
 	_m[tile].m3 = state;
 }
 
+/**
+ * Get the random bits for this tile.
+ * Used for grf callbacks
+ * @param tile TileIndex of the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @return requested bits
+ * @todo implement the storage in map array
+ */
+static inline byte GetIndustryRandomBits(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return 0;
+}
+
+/**
+ * Get the activated triggers bits for this industry tile
+ * Used for grf callbacks
+ * @param tile TileIndex of the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @return requested triggers
+ * @todo implement the storage in map array
+ */
+static inline byte GetIndustryTriggers(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return 0;
+}
+
+
+/**
+ * Set the activated triggers bits for this industry tile
+ * Used for grf callbacks
+ * @param tile TileIndex of the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @todo implement the storage in map array
+ */
+static inline void SetIndustryTriggers(TileIndex tile, byte triggers)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+}
+
 #endif /* INDUSTRY_MAP_H */
--- a/src/intro_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/intro_gui.cpp	Tue Jun 19 07:21:01 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/landscape.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/landscape.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -367,7 +367,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdLandscapeClear(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdLandscapeClear(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -380,9 +380,9 @@
  * @param flags of operation to conduct
  * @param p2 unused
  */
-int32 CmdClearArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdClearArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost, ret, money;
+	CommandCost cost, ret, money;
 	int ex;
 	int ey;
 	int sx, sy;
--- a/src/lang/bulgarian.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/bulgarian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2765,6 +2765,7 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Списък с избор на МПС-та - натисни върху МПС за информация
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Купи посоченото МПС
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Цена: {CURRENCY}{}Скорост: {VELOCITY}{}Оперативен разход: {CURRENCY}/год{}Вместимост: {CARGO}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Преименувай МПС-то
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Не може да преименуваш МПС-то...
--- a/src/lang/catalan.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/catalan.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -922,7 +922,7 @@
 STR_CURR_NLG                                                    :Florins Holandesos (NLG)
 STR_CURR_NOK                                                    :Corones Noruegues (NOK)
 STR_CURR_PLN                                                    :Zloty Polac (PLN)
-STR_CURR_ROL                                                    :Leu RomanÚs (ROL)
+STR_CURR_ROL                                                    :Leu Romanès (ROL)
 STR_CURR_RUR                                                    :Rubles Russos (RUR)
 STR_CURR_SIT                                                    :Eslovè Tolar (SIT)
 STR_CURR_SEK                                                    :Corones Sueques (SEK)
@@ -2623,8 +2623,8 @@
 STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Els trens només es poden modificar quan estan parats dins d'una cotxera
 STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} Trens
 
-STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nous Vehicles
-STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nous vehicles de Via Electrificada
+STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nous Trens
+STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nous Trens de Via Electrificada
 STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Nous Trens Monorail
 STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nous Trens Maglev
 STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Vehicles amb Vies
@@ -2732,7 +2732,7 @@
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nou {STRING} disponible!
 STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nou {STRING} disponible!  -  {STRING}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nou/Nova {STRING} disponible!  -  {STRING}
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Automòbil en camí
@@ -2775,6 +2775,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/czech.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/czech.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -1127,7 +1127,7 @@
 STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Tvůrce krajiny: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :původní
 STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Maximální vzdálenost ropných rafinerií od okraje mapy {ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Maximální vzdálenost ropných rafinerií od okraje mapy: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Výška sněhové čáry: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Členitost krajiny (jen TerraGenesis): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :velmi rovná
@@ -2726,6 +2726,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nemohu přidat nový příkaz
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nemohu tento příkaz smazat...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nemohu tento příkaz změnit...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Nelze přesunout tento příkaz...
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nelze přeskočit současný příkaz...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nelze přeskočit na označený příkaz...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nemohu přesunout vozidlo...
@@ -2838,6 +2839,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Seznam silničních vozidel - klepni na vozidlo pro informace
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Koupit označené vozidlo
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cena: {CURRENCY}{}Rychlost: {VELOCITY}{}Cena provozu: {CURRENCY} ročně{}Kapacita: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacita: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Přejmenovat silniční vozidlo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nelze přejmenovat silniční vozidlo...
--- a/src/lang/danish.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/danish.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2775,6 +2775,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Liste over køretøjstyper - klik på køretøj for information
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Byg det markerede køretøj
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Pris: {CURRENCY}{}Hastighed: {VELOCITY}{}Driftsomkostninger: {CURRENCY}/år{}Kapacitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Giv køretøjet et navn
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan ikke give køretøjet et navn...
--- a/src/lang/dutch.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/dutch.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2662,6 +2662,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan nieuwe order niet invoegen...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan deze order niet verwijderen...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan deze order niet aanpassen...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan deze order niet verplaatsen...
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan huidige order niet overslaan...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan geselecteerde order niet overslaan...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan voertuig niet verplaatsen...
@@ -2774,6 +2775,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/esperanto.txt	Tue Jun 19 07:21:01 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}
 
@@ -2012,6 +2015,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helikopterejo
 STR_SV_STNAME_FOREST                                            :Arbaro de {STRING}
 
+
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -3186,3 +3190,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/estonian.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/estonian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -450,12 +450,12 @@
 ############ range for menu starts
 STR_0154_OPERATING_PROFIT_GRAPH                                 :Opereerimiskasumi graafik
 STR_0155_INCOME_GRAPH                                           :Tulugraafik
-STR_0156_DELIVERED_CARGO_GRAPH                                  :Transporditud kauba graafik
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Kohaleviidud kauba graafik
 STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Tegevustulemuste graafik
 STR_0158_COMPANY_VALUE_GRAPH                                    :Firmaväärtuse graafik
 STR_0159_CARGO_PAYMENT_RATES                                    :Veotasude määrad
 STR_015A_COMPANY_LEAGUE_TABLE                                   :Ettevõtete edetabel
-STR_PERFORMANCE_DETAIL_MENU                                     :Üksikasjalik tulemusreiting
+STR_PERFORMANCE_DETAIL_MENU                                     :Üksikasjalik tulemushinnang
 ############ range for menu ends
 
 STR_015B_OPENTTD                                                :{WHITE}OpenTTD lisainfo
@@ -472,7 +472,7 @@
 STR_SORT_BY_POPULATION                                          :{BLACK}Rahvastik
 STR_SORT_BY_PRODUCTION                                          :{BLACK}Toodang
 STR_SORT_BY_TYPE                                                :{BLACK}Tüüp
-STR_SORT_BY_TRANSPORTED                                         :{BLACK}Transporditud
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Veetud
 STR_SORT_BY_NAME                                                :{BLACK}Nimi
 STR_SORT_BY_DROPDOWN_NAME                                       :Nimi
 STR_SORT_BY_DATE                                                :{BLACK}Daatum
@@ -561,7 +561,7 @@
 STR_STICKY_BUTTON                                               :{BLACK}Keela selle akna sulgemine 'Sulge kõik aknad' nupu klõpsamisel
 STR_RESIZE_BUTTON                                               :{BLACK}Kliki ja venita, et akna suurust muuta
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Vajuta siia, et minna praegusesse vaikimisi valitud salvestamise/laadimise kausta
-STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Ehitiste jms. hävitamine
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Rajatiste lammutamine
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Maapinna madaldamine
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Maapinna kõrgendamine
 STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Kerimisriba - kerib nimistut üles/alla
@@ -864,12 +864,12 @@
 STR_FULL                                                        :Täielik
 STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
 STR_02BB_TOWN_DIRECTORY                                         :Linnanimistu
-STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Sõidukite disaini nimed
+STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Sõidukidisanide nimed
 STR_02BD                                                        :{BLACK}{STRING}
 STR_02BE_DEFAULT                                                :Vaikimisi valitud
 STR_02BF_CUSTOM                                                 :Omatehtud
 STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Salvesta oma nimega
-STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Sõidukite disaininimede valik
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Sõidukidisainide nimevalik
 STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Salvesta omatehtud disaininimed
 
 STR_CHECKMARK                                                   :{CHECKMARK}
@@ -929,7 +929,7 @@
 STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Vali linnanimede stiil
 
-STR_02F4_AUTOSAVE                                               :{BLACK}Automaatsalvestus
+STR_02F4_AUTOSAVE                                               :{BLACK}Isesalvestus
 STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Vali intervall, mille järel isesalvestus toimub
 STR_02F7_OFF                                                    :Väljas
@@ -1048,7 +1048,7 @@
 STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Valik, millises formaadis salvestatakse ekraanitõmmis
 
 STR_AUTOSAVE_1_MONTH                                            :Iga kuu
-STR_AUTOSAVE_FAILED                                             :{WHITE}Automaatsalvestus ebaõnnestus
+STR_AUTOSAVE_FAILED                                             :{WHITE}Isesalvestus ebaõnnestus
 
 STR_MONTH_JAN                                                   :Jaanuar
 STR_MONTH_FEB                                                   :Veebruar
@@ -1169,7 +1169,7 @@
 STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Maaala Generaator: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Algupärane
 STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Suurim kaugus kaardi äärest nafta puuraukudeni {ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Suurim kaugus kaardiservast naftapuuraukudeni {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Lumepiiri kõrgus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Maa mägisus (TerraGenesis ainult) : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Väga sile
@@ -1201,7 +1201,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Keri kaarti
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Väljas
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Kaardi kerimisrulliku kiirus: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaatne mängu peatamine uue mängu alustamisel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Mängu isepeatamine uue mängu alustamisel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Kasuta laiendatud sõidukinimekirja: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Enim ronge mängija kohta: {ORANGE}{STRING}
@@ -1235,7 +1235,7 @@
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Luba sujuv majandus (väiksemad muutused)
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Luba teiste ettevõtete aktsiate ostmine
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Venitades rajatavate signaalide paigutustihedus: {ORANGE}{STRING} ühik(ut)
-STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Ehita semaforid automaatselt enne: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Ehita ise semaforid enne: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Stsenaariumiredaktor ei tunnista "ilma teedeta" linnaplaneeringut
 STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vali linnale teedeplaneering: {ORANGE}{STRING}
@@ -1262,7 +1262,7 @@
 STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Algne linna suuruse kordaja: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Välimus
-STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Ehituskulud
+STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Ehitamine
 STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}Sõidukid
 STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}Jaamad
 STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}Majandus
@@ -1807,7 +1807,7 @@
 STR_201D_OFFICE_BLOCK                                           :Büroohoone
 STR_201E_STADIUM                                                :Staadion
 STR_201F_OLD_HOUSES                                             :Vanad majad
-STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Kohalik omavalitsus
+STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Omavalitsus
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Näita teavet kohaliku omavalitsuse kohta
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} kohalik omavalitsus
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ettevõtete hinnangud:
@@ -1859,7 +1859,7 @@
 STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Oma ettevõtte auks kuju ehitamine.{} Hind: {CURRENCY}
 STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Uute ärihoonete ehitamise rahastamine selles linnas.{} Hind: {CURRENCY}
 STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Üheks aastaks monopoolsete veoõiguste ostmine selles linnas. Linna omavalitsus lubab reisijate ja kauba veoks kasutada ainult sinu jaamasid.{} Hind: {CURRENCY}
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Linna omavalitusele ettevõtu reitingu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes korral tuleb trahvi maksta.{} Hind: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Linna omavalitusele ettevõtte hinnangu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes tuleb trahvi maksta.{} Hind: {CURRENCY}
 STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Liikluskaos linnas {TOWN}!{}{}Ettevõtte {COMPANY} poolt rahastatud teedeehitus tekitab 6 kuu jooksul maanteedel liiklushäireid!
 STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
 STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (ehitusel)
@@ -2025,7 +2025,7 @@
 STR_480A_STEEL_MILL                                             :terasetööstus
 STR_480B_FARM                                                   :talu
 STR_480C_COPPER_ORE_MINE                                        :vasemaagikaevandus
-STR_480D_OIL_WELLS                                              :nafta puurauk
+STR_480D_OIL_WELLS                                              :naftapuurauk
 STR_480E_BANK                                                   :pank
 STR_480F_FOOD_PROCESSING_PLANT                                  :toiduainetetööstus
 STR_4810_PAPER_MILL                                             :paberivabrik
@@ -2268,7 +2268,7 @@
 STR_700E_FINANCES                                               :{WHITE}{COMPANY} rahavoogude aruanne {BLACK}{PLAYERNAME}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Kulud/tulud
 STR_7010                                                        :{WHITE}{NUM}
-STR_7011_CONSTRUCTION                                           :{GOLD}Ehitamine
+STR_7011_CONSTRUCTION                                           :{GOLD}Ehituskulud
 STR_7012_NEW_VEHICLES                                           :{GOLD}Uus veerem
 STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Rongide käituskulud
 STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Mootorsõidukite käituskulud
@@ -2329,7 +2329,7 @@
 STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Näita selgitust graafikute juures
 STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Ettevõttegraafiku selgitus
 STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Klõpsa, et ettevõtte graafikut sisse ja välja lülitada
-STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Transporditud veoste kogus
+STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Veetud veoste kogus
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ettevõtte tegevushinnang (suurim hinnang saab olla 1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Firmaväärtus
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Ettevõtete edetabel
@@ -2385,11 +2385,11 @@
 STR_7080_PROTECTED                                              :{WHITE}See ettevõtte pole veel piisavalt vana, et aktsiaid vahetada...
 
 STR_LIVERY_DEFAULT                                              :Firmavärv
-STR_LIVERY_STEAM                                                :Aurumootor
-STR_LIVERY_DIESEL                                               :Diiselmootor
-STR_LIVERY_ELECTRIC                                             :Elektrivedur
-STR_LIVERY_MONORAIL                                             :Monorelsi Mootor
-STR_LIVERY_MAGLEV                                               :Maglev'i Mootor
+STR_LIVERY_STEAM                                                :Aurumootorvedur
+STR_LIVERY_DIESEL                                               :Diiselmootorvedur
+STR_LIVERY_ELECTRIC                                             :Elektrimootorvedur
+STR_LIVERY_MONORAIL                                             :Monorelss-mootorvedur
+STR_LIVERY_MAGLEV                                               :Elektromagneetiline mootorvedur
 STR_LIVERY_DMU                                                  :DMU
 STR_LIVERY_EMU                                                  :EMU
 STR_LIVERY_PASSENGER_WAGON_STEAM                                :Reisivagun (auru)
@@ -2398,22 +2398,22 @@
 STR_LIVERY_FREIGHT_WAGON                                        :Kaubavagun
 STR_LIVERY_BUS                                                  :Buss
 STR_LIVERY_TRUCK                                                :Veoauto
-STR_LIVERY_PASSENGER_SHIP                                       :Reisijate Praam
+STR_LIVERY_PASSENGER_SHIP                                       :Reisipraam
 STR_LIVERY_FREIGHT_SHIP                                         :Kaubalaev
 STR_LIVERY_HELICOPTER                                           :Helikopter
-STR_LIVERY_SMALL_PLANE                                          :Väike Lennuk
-STR_LIVERY_LARGE_PLANE                                          :Suur Lennuk
+STR_LIVERY_SMALL_PLANE                                          :Väikelennuk
+STR_LIVERY_LARGE_PLANE                                          :Suurlennuk
 STR_LIVERY_PASSENGER_TRAM                                       :Reisitramm
 STR_LIVERY_FREIGHT_TRAM                                         :Kaubatramm
 
-STR_LIVERY_GENERAL_TIP                                          :{BLACK}Näita üldiseid värvivalikuid
+STR_LIVERY_GENERAL_TIP                                          :{BLACK}Näita üldiseid värvistikke
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Näita rongide värvistikke
-STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Näita mootorsõidukite värvivalikuid
-STR_LIVERY_SHIP_TIP                                             :{BLACK}Näita laevade värvivalikuid
-STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Näita lennukite värvivalikuid
-STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Vali põhivärv valitud skeemile
-STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Vali teine värv valitud skeemile
-STR_LIVERY_PANEL_TIP                                            :{BLACK}Vali värvivalik, mida muuta - või mitu kasutades CTRL+hiireklõps kombinatsiooni. Klõpsa kastil, et muuta värvivaliku kasutust.
+STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Näita mootorsõidukite värvistikke
+STR_LIVERY_SHIP_TIP                                             :{BLACK}Näita laevavärvistikke
+STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Näita lennukivärvistikke
+STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Vali põhivärv värvistikule
+STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Vali teine värv valitud värvistikule
+STR_LIVERY_PANEL_TIP                                            :{BLACK}Vali muudetav värvivalik - või mitu CTRL+klõps abil. Klõpsa kastil, et muuta värvivaliku kasutust.
 
 ##id 0x8000
 STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Kirby Paul Tank (auruvedur)
@@ -2875,6 +2875,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Mootorsõiduki valimisnimekiri - andmete saamiseks klõpsa sõidukile
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Ehita valitud mootorsõiduk
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Hind: {CURRENCY}{}Tippkiirus: {VELOCITY}{}Käituskulud: {CURRENCY}/aastas{}Kandevõime: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kandevõime: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Nimeta mootorsõiduk ümber
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ei saa maanteveokit ümber nimetada...
@@ -3056,8 +3058,8 @@
 STR_BRIBE_FAILED_2                                              :{WHITE}kohalike uurijate poolt avastatud
 STR_BUILD_DATE                                                  :{BLACK}Ehitatud: {LTBLUE}{DATE_LONG}
 
-STR_PERFORMANCE_DETAIL                                          :{WHITE}Detailne tegevuse reiting
-STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Detailne
+STR_PERFORMANCE_DETAIL                                          :{WHITE}Üksikasjalik tulemushinnang
+STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Üksikasjalik
 STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
 STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
 STR_PERFORMANCE_DETAIL_PERCENT                                  :{WHITE}{NUM}%
@@ -3068,21 +3070,21 @@
 STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}Vähim kasum:
 STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Vähim tulu:
 STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Suurim tulu:
-STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Transporditud:
+STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Veetud:
 STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Kaupu:
 STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Raha:
 STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Laen:
 STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Kokku:
 ############ End of order list
 STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Veeremit kokku; sisaldab sõidutee-, rööbastee- ja õhusõidukeid, ning laevu
-STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Jaamablokkide arv. Iga osa jaamast (nt. rongijaam, bussipeatus, lennujaam) loetakse eraldi, isegi kui naad on ühendatud üheks jaamaks
+STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Jaamablokkide arv. Iga osa jaamast (nt. raudteejaam, bussipeatus, lennujaam) loetakse eraldi, isegi kui naad on ühendatud üheks jaamaks
 STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Kõige väiksema tuluga sõiduki kasum (kõikidest vähemalt 2 aastastest veovahenditest)
 STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Väikseim kuukasum viimase 12 kvartali jooksul
 STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Suurim kuukasum viimase 12 kvartali jooksul
 STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Kauba arv, mis on veatud viimase 4 kvartali jooksul
 STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Kauba arv, mis on veatud viimasel kvartalil
 STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Raha arv, mis on sellel firmal pangas
-STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Raha arv, mida see firma on võtnud laenuks
+STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Selle ettevõtte kogulaen
 STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Kokku punkte võimalikest punktidest
 
 STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}NewGRF seaded
@@ -3346,7 +3348,7 @@
 
 ########
 
-STR_FEEDER_CARGO_VALUE                                          :{BLACK}Kanna Raha: {LTBLUE}{CURRENCY}
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Ülekantud tulu: {LTBLUE}{CURRENCY}
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...see tee on omatud linna poolt
 STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...tee on vales suunas
 
--- a/src/lang/french.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/french.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2663,6 +2663,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Impossible d'insérer un nouvel ordre...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Impossible de supprimer cet ordre...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Impossible de modifier cet ordre...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Impossible de déplacer cet ordre...
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Impossible de sauter l'ordre courant...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Impossible de sauter l'ordre sélectionné...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Impossible de déplacer le véhicule...
@@ -2775,6 +2776,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Choix du véhicule - cliquer sur un véhicule pour obtenir des informations
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construire le véhicule sélectionné
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Prix: {CURRENCY}{}Vitesse: {VELOCITY}{}Coût d'entretien: {CURRENCY}/an{}Capacité: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacité: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Renommer le véhicule
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Impossible de renommer le véhicule...
--- a/src/lang/hungarian.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/hungarian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2878,6 +2878,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Közúti jármű kiválasztása - kattints egy járműre az adataihoz
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}A kijelölt közúti jármű megvétele
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Ár: {CURRENCY}{}Sebesség: {VELOCITY}{}Működtetési költség: {CURRENCY}/év{}Kapacitás: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitás: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Közúti jármű átnevezése
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nem nevezheted át a közúti járművet...
--- a/src/lang/italian.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/italian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2777,6 +2777,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Elenco selezione automezzi - fare clic su un veicolo per informazioni
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Costruisce l'automezzo selezionato
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Costo: {CURRENCY}{}Velocità: {VELOCITY}{}Costo d'esercizio: {CURRENCY}/anno{}Capacità: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacità: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Rinomina l'automezzo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Impossibile rinominare l'automezzo...
--- a/src/lang/japanese.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/japanese.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2775,6 +2775,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}道路車両のリスト - 情報を見るには車両をクリックします
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}選択した道路車両を購入します
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}価格:{CURRENCY}{}最大速度:{VELOCITY}{}運転費:一年間{CURRENCY}{}容量:{CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}容量:{LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}道路車両を名付ける
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}道路車両が名付けません...
--- a/src/lang/korean.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/korean.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2776,6 +2776,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}자동차 선택 목록 - 차량 정보를 보려면 클릭
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}선택한 자동차 만들기
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}가격: {CURRENCY}{}속력: {VELOCITY}{}운행비용: {CURRENCY}/년{}수송량: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}수송량: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}자동차 이름 지정
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}자동차의 이름을 지정할 수 없습니다...
--- a/src/lang/norwegian_bokmal.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/romanian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -817,9 +817,9 @@
 STR_02E0_CURRENCY_UNITS                                         :{BLACK}Unităţi monetare
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
 STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Alege unitatea monetară
-STR_MEASURING_UNITS                                             :{BLACK}Unitãti de mãsurã
+STR_MEASURING_UNITS                                             :{BLACK}Unităţi de măsură
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
-STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Selectie unitãti de mãsurã
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Selecţie unităţi de măsură
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}Autovehiculele circulă...
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Alege partea străzii pe care se circulă
@@ -1309,9 +1309,9 @@
 STR_NETWORK_MULTIPLAYER                                         :{WHITE}Multiplayer
 
 STR_NETWORK_PLAYER_NAME                                         :{BLACK}Numele jucãtorului:
-STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Acesta este numele prin care te vor identifica ceilalti
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Acesta este numele prin care te vor identifica ceilalţi
 STR_NETWORK_CONNECTION                                          :{BLACK}Conexiune:
-STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Alege intre un joc pe internet si unul pe LAN
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Alege între un joc pe internet şi unul în reţea (LAN)
 
 STR_NETWORK_START_SERVER                                        :{BLACK}Porneste serverul
 STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Porneste un server propriu
@@ -1321,32 +1321,32 @@
 STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Limba, versiunea serverului, etc.
 STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Click pe un joc din listã pentru a-l selecta
 
-STR_NETWORK_FIND_SERVER                                         :{BLACK}Cautã server
-STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Cautã un server în retea
-STR_NETWORK_ADD_SERVER                                          :{BLACK}Adauga un server
-STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Adauga un server pe lista care va fi verificata pentru jocuri active
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Caută server
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Caută un server în reţea
+STR_NETWORK_ADD_SERVER                                          :{BLACK}Adaugă un server
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Adaugă un server pe lista care va fi verificată pentru jocuri active
 STR_NETWORK_ENTER_IP                                            :{BLACK}Introdu IP-ul serverului
 
 STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
-STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Clienti
+STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Clienţi
 STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Clienti online / Nr. max. clienti
 STR_NETWORK_GAME_INFO                                           :{SILVER}INFO JOC
 STR_ORANGE                                                      :{ORANGE}{STRING}
-STR_NETWORK_CLIENTS                                             :{SILVER}Clienti:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_CLIENTS                                             :{SILVER}Clienţi:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
 STR_NETWORK_LANGUAGE                                            :{SILVER}Limba:  {WHITE}{STRING}
 STR_NETWORK_TILESET                                             :{SILVER}Tileset:  {WHITE}{STRING}
 STR_NETWORK_MAP_SIZE                                            :{SILVER}Marimea hartii:  {WHITE}{COMMA}x{COMMA}
 STR_NETWORK_SERVER_VERSION                                      :{SILVER}Versiune server:  {WHITE}{STRING}
 STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Adresa serverului:  {WHITE}{STRING} : {NUM}
 STR_NETWORK_START_DATE                                          :{SILVER}Data de inceput:  {WHITE}{DATE_SHORT}
-STR_NETWORK_CURRENT_DATE                                        :{SILVER}Data curenta:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}Data curentă:  {WHITE}{DATE_SHORT}
 STR_NETWORK_PASSWORD                                            :{SILVER}Protejat cu parola!
 STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}SERVER OFFLINE
 STR_NETWORK_SERVER_FULL                                         :{SILVER}SERVER PLIN
 STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}VERSIUNE DIFERITA
-STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEWGRF NEPOTRIVIRE
+STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEPOTRIVIRE NEWGRF
 
-STR_NETWORK_JOIN_GAME                                           :{BLACK}Intrã în joc
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Intră în joc
 
 
 STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Începe un joc nou
@@ -1363,7 +1363,7 @@
 STR_NETWORK_LAN                                                 :LAN
 STR_NETWORK_INTERNET                                            :Internet
 STR_NETWORK_LAN_INTERNET                                        :LAN / Internet
-STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (fa reclama)
+STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (fă reclamă)
 STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_0_PLAYERS                                           :0 jucãtori
 STR_NETWORK_1_PLAYERS                                           :1 jucãtor
@@ -1382,8 +1382,8 @@
 STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maxim spectatori:
 STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Limiteazã serverul la un anumit numãr de spectatori
 STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Limba vorbita:
-STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Ceilalti jucatori vor sti in ce limba se discuta per server.
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Limba vorbită:
+STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Ceilalţi jucători vor şti în ce limbă se discută pe server.
 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}Începe jocul
 STR_NETWORK_START_GAME_TIP                                      :{BLACK}Incepe un joc nou in retea cu o harta aleatoare sau intr-un scenariu
@@ -1395,6 +1395,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engleza
 STR_NETWORK_LANG_GERMAN                                         :Germana
 STR_NETWORK_LANG_FRENCH                                         :Franceza
+STR_NETWORK_LANG_BRAZILIAN                                      :Braziliana
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgara
+STR_NETWORK_LANG_CHINESE                                        :Chineza
+STR_NETWORK_LANG_CZECH                                          :Ceha
+STR_NETWORK_LANG_DANISH                                         :Daneza
+STR_NETWORK_LANG_DUTCH                                          :Olandeza
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finlandeza
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungara
+STR_NETWORK_LANG_ICELANDIC                                      :Islandeza
+STR_NETWORK_LANG_ITALIAN                                        :Italiana
+STR_NETWORK_LANG_JAPANESE                                       :Japoneza
+STR_NETWORK_LANG_KOREAN                                         :Coreana
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituaniana
+STR_NETWORK_LANG_NORWEGIAN                                      :Norvegiana
+STR_NETWORK_LANG_POLISH                                         :Poloneza
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugheza
+STR_NETWORK_LANG_ROMANIAN                                       :Româna
+STR_NETWORK_LANG_RUSSIAN                                        :Rusa
+STR_NETWORK_LANG_SLOVAK                                         :Slovaca
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovena
+STR_NETWORK_LANG_SPANISH                                        :Spaniola
+STR_NETWORK_LANG_SWEDISH                                        :Suedeza
+STR_NETWORK_LANG_TURKISH                                        :Turca
+STR_NETWORK_LANG_UKRAINIAN                                      :Ucrainiana
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Chatul jocului multiplayer
@@ -1405,8 +1430,8 @@
 STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Fondeazã o nouã companie
 STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Modul spectator
 STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Vizioneazã un joc din pozitia unui spectator
-STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Alatura-te companiei
-STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Ajuta la conducerea acestei companii
+STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Alătură-te companiei
+STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Ajută la conducerea acestei companii
 STR_NETWORK_REFRESH                                             :{BLACK}Actualizeaza serverul
 STR_NETWORK_REFRESH_TIP                                         :{BLACK}Actualizeaza informatiile despre server
 
@@ -1415,7 +1440,7 @@
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Numele companiei:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaugurarea:  {WHITE}{NUM}
 STR_NETWORK_VALUE                                               :{SILVER}Valoarea companiei:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanta curenta:  {WHITE}{CURRENCY64}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanţa curentă:  {WHITE}{CURRENCY64}
 STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Venituri anul trecut:  {WHITE}{CURRENCY64}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Performanta:  {WHITE}{NUM}
 
@@ -1427,64 +1452,64 @@
 
 ############ Leave those lines in this order!!
 STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Conectare..
-STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Authorizare..
-STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Asteptati..
-STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Descarcare harta..
+STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Autorizare..
+STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Aşteptaţi..
+STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Descărcare harta..
 STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Prelucrare date..
-STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Inregistrare...
+STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Înregistrare...
 
 STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Preluare info joc..
 STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Preluare info companie..
 ############ End of leave-in-this-order
-STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} client{P "" i} inaintea noastra
-STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} kbytes descarcati pana acum
+STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} clien{P t ţi} înaintea noastră
+STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} kbytes descărcaţi până acum
 
 STR_NETWORK_DISCONNECT                                          :{BLACK}Deconectare
 
-STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Introdu suma de bani pe care vrei sa o cedezi
+STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Introdu suma de bani pe care vrei să o cedezi
 STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Server protejat. Introdu parola
 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Companie protejata. Introdu parola
-STR_NETWORK_CLIENT_LIST                                         :{WHITE}Lista de clienti
+STR_NETWORK_CLIENT_LIST                                         :{WHITE}Lista de clienţi
 
-STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE}Nu a fost detectatã o placã de retea valabilã
-STR_NETWORK_ERR_NOSERVER                                        :{WHITE}Nu a fost gãsit nici un joc în retea
-STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE}Serverul nu a rãspuns cererii
+STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE}Nu a fost detectată o placă sau jocul a fost compilat fără ENABLE_NETWORK
+STR_NETWORK_ERR_NOSERVER                                        :{WHITE}Nu a fost găsit nici un joc în reţea
+STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE}Serverul nu a răspuns cererii
 STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Nu m-am putut conecta din cauza unei nepotriviri NewGRF
-STR_NETWORK_ERR_DESYNC                                          :{WHITE} Sincronizarea jocului in retea a esuat.
-STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Conexiunea jocului in reatea a fost intrerupta.
-STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Nu am reusit sa incarc jocul-server salvat.
+STR_NETWORK_ERR_DESYNC                                          :{WHITE} Sincronizarea jocului în reţea a eşuat.
+STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Conexiunea jocului în reţea a fost întreruptă.
+STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Nu am reuşit să încarc jocul-server salvat.
 STR_NETWORK_ERR_SERVER_START                                    :{WHITE}Nu pot porni serverul.
 STR_NETWORK_ERR_CLIENT_START                                    :{WHITE}Nu pot efectua conectarea.
 STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Conexiunea #{NUM} a expirat.
-STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE}Eroare de protocol. Conexiunea a fost inchisa.
-STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE}Versiunea acestui client este diferita de cea a serverului.
-STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE}Parola gresita.
+STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE}Eroare de protocol. Conexiunea a fost închisă.
+STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE}Versiunea acestui client este diferită de cea a serverului.
+STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE}Parola greşită.
 STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE}Serverul este plin
-STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Acessul tau este interzis pe acest server
-STR_NETWORK_ERR_KICKED                                          :{WHITE}Ai fost dat afara de pe server
+STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Acessul tău este interzis pe acest server
+STR_NETWORK_ERR_KICKED                                          :{WHITE}Ai fost dat afară de pe server
 STR_NETWORK_ERR_CHEATER                                         :{WHITE} Cheat-urile nu sunt permise pe acest server
 
-STR_NETWORK_ERR_LEFT                                            :a parasit jocul
+STR_NETWORK_ERR_LEFT                                            :a părăsit jocul
 ############ Leave those lines in this order!!
-STR_NETWORK_ERR_CLIENT_GENERAL                                  :eroare generala
+STR_NETWORK_ERR_CLIENT_GENERAL                                  :eroare generală
 STR_NETWORK_ERR_CLIENT_DESYNC                                   :eroare de desincronizare
-STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :nu pot incarca harta
-STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :conexiune pierduta
+STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :nu pot încărca harta
+STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :conexiune pierdută
 STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :eroare de protocol
 STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :Nepotrivire NewGRF
 STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :neautorizat
 STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :primit pachet ciudat
-STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :versiune incorecta
+STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :versiune incorectă
 STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :nume folosit deja
-STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :parola gresita
-STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :player-id in DoCommand gresit
-STR_NETWORK_ERR_CLIENT_KICKED                                   :dat afara de pe server
-STR_NETWORK_ERR_CLIENT_CHEATER                                  :a incercat sa foloseasca un cheat
+STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :parola greşită
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :player-id greşit în DoCommand
+STR_NETWORK_ERR_CLIENT_KICKED                                   :dat afară de pe server
+STR_NETWORK_ERR_CLIENT_CHEATER                                  :a încercat să folosească un cheat
 STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :server plin
 ############ End of leave-in-this-order
-STR_NETWORK_CLIENT_JOINED                                       :a intrat in joc
-STR_NETWORK_GIVE_MONEY                                          :ti-a dat o suma de bani ({CURRENCY})
-STR_NETWORK_GAVE_MONEY_AWAY                                     :ai donat o suma de bani companiei {STRING} ({CURRENCY})
+STR_NETWORK_CLIENT_JOINED                                       :a intrat în joc
+STR_NETWORK_GIVE_MONEY                                          :ţi-a dat o sumă de bani ({CURRENCY})
+STR_NETWORK_GAVE_MONEY_AWAY                                     :ai donat o sumă de bani companiei {STRING} ({CURRENCY})
 STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Team] :
 STR_NETWORK_CHAT_COMPANY                                        :[Team] {STRING}: {GRAY}{STRING}
 STR_NETWORK_CHAT_TO_COMPANY                                     :[Team] To {STRING}: {GRAY}{STRING}
@@ -1503,9 +1528,9 @@
 
 STR_NETWORK_CLIENTLIST_NONE                                     :(none)
 STR_NETWORK_CLIENTLIST_KICK                                     :Kick
-STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Doneaza bani
-STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Vorbeste catre toti
-STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Vorbeste catre companie
+STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Donează bani
+STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Vorbeşte către toţi
+STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Vorbeşte către companie
 STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Mesaj privat
 
 
@@ -2153,7 +2178,7 @@
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graficul profitului din operare
 STR_7026_BANK_BALANCE                                           :{WHITE}Balanţă curentă
 STR_7027_LOAN                                                   :{WHITE}Credite
-STR_MAX_LOAN                                                    :{WHITE}Limita credite:  {BLACK}{CURRENCY64}
+STR_MAX_LOAN                                                    :{WHITE}Limită credite:  {BLACK}{CURRENCY64}
 STR_7028                                                        :{BLACK}{CURRENCY64}
 STR_7029_BORROW                                                 :{BLACK}Împrumută {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Plăteşte înapoi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
@@ -2533,7 +2558,7 @@
 STR_80FE_GURU_X2_HELICOPTER                                     :Elicopter Guru X2
 STR_80FF_POWERNAUT_HELICOPTER                                   :Elicopter Powernaut
 STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Mesaj de la producătorul de vehicule
-STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Am creat un nou tip de {STRING}. Ati fi interesati de folosirea exclusivã pentru un an a acestui vehicul, astfel ca noi sa putem observa rezultatele înaintea lansãrii oficiale?
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Am creat un nou tip de {STRING}. Aţi fi interesaţi de folosirea exclusivă pentru un an a acestui vehicul, astfel ca noi să-i putem observa performanţele înaintea lansării oficiale?
 STR_8102_RAILROAD_LOCOMOTIVE                                    :locomotivă
 STR_8103_ROAD_VEHICLE                                           :autovehicul
 STR_8104_AIRCRAFT                                               :aeronavă
@@ -2622,6 +2647,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nu pot adăuga o comandă nouă...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nu pot şterge această comandă...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nu pot modifica această comandă...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nu pot sări la ordinul selectat...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nu pot muta vehiculul...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Al doilea vagon+motor va avea mereu aceeasi destinatie ca si primul
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2731,6 +2757,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista selectie vehicule rutiere - apasa pe vehicul pentru informatii
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Cumpãrã autovehiculul selectat
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Pret: {CURRENCY}{}Vitezã: {VELOCITY}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacitate: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Numele autovehiculului
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nu pot redenumi autovehiculul...
@@ -3079,7 +3107,7 @@
 STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Click pt pornirea tuturor vaselor din depou
 STR_MASS_START_HANGAR_TIP                                       :{BLACK}Click pt pornirea tuturor aeronavelor din hangar
 
-STR_MASS_STOP_LIST_TIP                                          :{BLACK}Click pt oprirea tuturor vehiculelor din lista
+STR_MASS_STOP_LIST_TIP                                          :{BLACK}Click pt oprirea tuturor vehiculelor din listă
 STR_MASS_START_LIST_TIP                                         :{BLACK}Apasa pentru pornirea tuturor vehiclulelor din lista
 
 STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
@@ -3191,9 +3219,9 @@
 ############ Tooltip measurment
 
 STR_MEASURE_LENGTH                                              :{BLACK}Lungime: {NUM}
-STR_MEASURE_AREA                                                :{BLACK}Suprafata: {NUM} x {NUM}
-STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Lungime: {NUM}{}Diferenta inaltime: {NUM} m
-STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Suprafata: {NUM} x {NUM}{}Diferenta inaltime: {NUM} m
+STR_MEASURE_AREA                                                :{BLACK}Suprafaţa: {NUM} x {NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Lungime: {NUM}{}Diferenţa de înălţime: {NUM} m
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Suprafaţa: {NUM} x {NUM}{}Diferenţa de înălţime: {NUM} m
 
 ############ Date formatting
 STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
--- a/src/lang/slovenian.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/slovenian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2742,6 +2742,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Ni mogoče vstaviti nov ukaz ...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Ni mogoče izbrisati ukaza ...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Ni mogoče spreminjati ukaza ...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Ni možen premik tega ukaza...
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nemogoč preskok trenutnega ukaza...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nemogoč preskok na izbran ukaz...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Ni mogoče premakniti vozila ...
@@ -2854,6 +2855,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Seznam cestnih vozil - klikni na vozilo za informacije
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Zgradi izbrano cestno vozilo
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cena: {CURRENCY}{}Hitrost: {VELOCITY}{}Cena delovanja: {CURRENCY}/leto{}Zmogljivost: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Zmogljivost: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Poimenuj cestno vozilo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ni mogoče poimenovati cestnega vozila ...
--- a/src/lang/swedish.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/swedish.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -1397,6 +1397,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engelska
 STR_NETWORK_LANG_GERMAN                                         :Tyska
 STR_NETWORK_LANG_FRENCH                                         :Franska
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiliansk
+STR_NETWORK_LANG_BULGARIAN                                      :Belgisk
+STR_NETWORK_LANG_CHINESE                                        :Kines
+STR_NETWORK_LANG_CZECH                                          :Tjeckisk
+STR_NETWORK_LANG_DANISH                                         :Dansk
+STR_NETWORK_LANG_DUTCH                                          :Holländsk
+STR_NETWORK_LANG_ESPERANTO                                      :Spansk
+STR_NETWORK_LANG_FINNISH                                        :Finsk
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungersk
+STR_NETWORK_LANG_ICELANDIC                                      :Isländsk
+STR_NETWORK_LANG_ITALIAN                                        :Italiensk
+STR_NETWORK_LANG_JAPANESE                                       :Japansk
+STR_NETWORK_LANG_KOREAN                                         :Koreansk
+STR_NETWORK_LANG_LITHUANIAN                                     :Litauisk
+STR_NETWORK_LANG_NORWEGIAN                                      :Norsk
+STR_NETWORK_LANG_POLISH                                         :Polsk
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugisisk
+STR_NETWORK_LANG_ROMANIAN                                       :Rumänsk
+STR_NETWORK_LANG_RUSSIAN                                        :Rysk
+STR_NETWORK_LANG_SLOVAK                                         :Slovakisk
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovensk
+STR_NETWORK_LANG_SPANISH                                        :Spansk
+STR_NETWORK_LANG_SWEDISH                                        :Svensk
+STR_NETWORK_LANG_TURKISH                                        :Turkisk
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainsk
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Nätverksspel
@@ -2637,6 +2662,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan inte sätta in ny order...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan inte ta bort denna order...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan inte ändra denna order...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan inte flytta denna order...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan inte hoppa över nuvarande order...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan inte hoppa över till vald order...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan inte flytta fordon...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Det bakre loket kommer alltid följa med det tillhörande främre loket
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2668,6 +2696,7 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Visa kapaciteter för varje fordon
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Visa tågets totala kapacitet, separera för typ av gods
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Orderlista - klicka på order för att markera det
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Hoppa över nuvarande order och starta nästa. CTRL + klick hoppar över till vald order
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Ta bort markerad order
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gör markerad order non-stop
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Infoga ny order före markerad order, eller lägg till i slutet av listan
@@ -2746,6 +2775,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Vägfordonslista - klicka på fordon för information
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Bygg markerat vägfordon
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Kostnad: {CURRENCY}{}Hastighet: {VELOCITY}{}Löpande kostnad: {CURRENCY}/år{}Kapacitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Byt namn på vägfordon
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan inte byta namn på vägfordon...
--- a/src/lang/turkish.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/turkish.txt	Tue Jun 19 07:21:01 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...
@@ -2726,6 +2739,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...
@@ -3015,6 +3030,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/lang/ukrainian.txt	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/lang/ukrainian.txt	Tue Jun 19 07:21:01 2007 +0000
@@ -2825,6 +2825,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Неможливо додати наказ...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Неможливо видалити наказ...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Неможливо змінити наказ...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Не можна перемістити цей наказ...
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Не можна пропустити цей наказ...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Не можна перейти до цього наказу...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Неможливо перемістити транспорт...
@@ -2937,6 +2938,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Список авто - натисніть на авто для інформації
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Будувати вибране авто
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Ціна: {CURRENCY}{}Швидкість: {VELOCITY}{}Транспортні витрати: {CURRENCY}/рік{}Місткість: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Місткість: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Назвати авто
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Неможливо назвати авто...
--- a/src/main_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/main_gui.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/misc.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -272,6 +272,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/misc_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -24,7 +24,7 @@
  * @param p1 unused
  * @param p2 face bitmasked
  */
-int32 CmdSetPlayerFace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetPlayerFace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	PlayerFace pf = (PlayerFace)p2;
 
@@ -45,7 +45,7 @@
  * p1 bits 8-9 set in use state or first/second colour
  * @param p2 new colour for vehicles, property, etc.
  */
-int32 CmdSetPlayerColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetPlayerColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p, *pp;
 	byte colour;
@@ -121,23 +121,30 @@
  * @param tile unused
  * @param flags operation to perform
  * @param p1 unused
- * @param p2 when set, loans the maximum amount in one go (press CTRL)
+ * @param p2 when 0: loans LOAN_INTERVAL
+ *           when 1: loans the maximum loan permitting money (press CTRL),
  */
-int32 CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	Player *p;
-
-	p = GetPlayer(_current_player);
+	Player *p = GetPlayer(_current_player);
 
 	if (p->current_loan >= _economy.max_loan) {
 		SetDParam(0, _economy.max_loan);
 		return_cmd_error(STR_702B_MAXIMUM_PERMITTED_LOAN);
 	}
 
+	int32 loan;
+	switch (p2) {
+		default: return CMD_ERROR; // Invalid method
+		case 0: // Take some extra loan
+			loan = (IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI;
+			break;
+		case 1: // Take a loan as big as possible
+			loan = _economy.max_loan - p->current_loan;
+			break;
+	}
+
 	if (flags & DC_EXEC) {
-		/* Loan the maximum amount or not? */
-		int32 loan = (p2) ? _economy.max_loan - p->current_loan : (IsHumanPlayer(_current_player) || _patches.ainew_active) ? 10000 : 50000;
-
 		p->money64 += loan;
 		p->current_loan += loan;
 		UpdatePlayerMoney32(p);
@@ -151,27 +158,25 @@
  * @param tile unused
  * @param flags operation to perform
  * @param p1 unused
- * @param p2 when set, pays back the maximum loan permitting money (press CTRL)
+ * @param p2 when 0: pays back LOAN_INTERVAL
+ *           when 1: pays back the maximum loan permitting money (press CTRL),
  */
-int32 CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	Player *p;
-	int32 loan;
-
-	p = GetPlayer(_current_player);
+	Player *p = GetPlayer(_current_player);
 
 	if (p->current_loan == 0) return_cmd_error(STR_702D_LOAN_ALREADY_REPAYED);
 
-	loan = p->current_loan;
-
-	/* p2 is true while CTRL is pressed (repay all possible loan, or max money you have)
-	 * Repay any loan in chunks of 10.000 pounds */
-	if (p2) {
-		loan = min(loan, p->player_money);
-		loan = max(loan, 10000);
-		loan -= loan % 10000;
-	} else {
-		loan = min(loan, (IsHumanPlayer(_current_player) || _patches.ainew_active) ? 10000 : 50000);
+	int32 loan;
+	switch (p2) {
+		default: return CMD_ERROR; // Invalid method
+		case 0: // Pay back one step
+			loan = min(p->current_loan, (IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI);
+			break;
+		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;
 	}
 
 	if (p->player_money < loan) {
@@ -194,7 +199,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 	Player *p;
@@ -222,7 +227,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 	Player *p;
@@ -261,7 +266,7 @@
  * @param p1 0 = decrease pause counter; 1 = increase pause counter
  * @param p2 unused
  */
-int32 CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (flags & DC_EXEC) {
 		_pause_game += (p1 == 1) ? 1 : -1;
@@ -280,7 +285,7 @@
  * @param p1 the amount of money to receive (if negative), or spend (if positive)
  * @param p2 unused
  */
-int32 CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 #ifndef _DEBUG
 	if (_networking) return CMD_ERROR;
@@ -298,10 +303,10 @@
  * @param p1 the amount of money to transfer; max 20.000.000
  * @param p2 the player to transfer the money to
  */
-int32 CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	const Player *p = GetPlayer(_current_player);
-	int32 amount = min((int32)p1, 20000000);
+	CommandCost amount = min((int32)p1, 20000000);
 
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
 
@@ -331,7 +336,7 @@
  *           itself is changed. The new value is inside p2
  * @param p2 new value for a difficulty setting or difficulty level
  */
-int32 CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (p1 != (uint32)-1L && ((int32)p1 >= GAME_DIFFICULTY_NUM || (int32)p1 < 0)) return CMD_ERROR;
 
--- a/src/misc_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/misc_gui.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -35,7 +35,9 @@
 #include "date.h"
 #include "cargotype.h"
 #include "player_face.h"
+#include "fileio.h"
 
+#include "fileio.h"
 #include "fios.h"
 /* Variables to display file lists */
 FiosItem *_fios_list;
@@ -120,7 +122,7 @@
 	GetString(_landinfo_data[1], STR_01A7_OWNER, lastof(_landinfo_data[1]));
 
 	str = STR_01A4_COST_TO_CLEAR_N_A;
-	if (!CmdFailed(costclear)) {
+	if (CmdSucceeded(costclear)) {
 		SetDParam(0, costclear);
 		str = STR_01A5_COST_TO_CLEAR;
 	}
@@ -1396,6 +1398,7 @@
 	SetDParam(1, p->name_2);
 	SetDParam(2, _date);
 	GetString(_edit_str_buf, STR_4004, lastof(_edit_str_buf));
+	SanitizeFilename(_edit_str_buf);
 }
 
 extern void StartupEngines();
@@ -1405,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/music_gui.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/network/network_client.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -21,6 +21,7 @@
 #include "../variables.h"
 #include "../ai/ai.h"
 #include "../helpers.hpp"
+#include "../fileio.h"
 
 // This file handles all the client-commands
 
@@ -269,7 +270,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)
 {
@@ -489,7 +490,6 @@
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP)
 {
-	static char filename[256];
 	static FILE *file_pointer;
 
 	byte maptype;
@@ -500,10 +500,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;
@@ -545,7 +542,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/network/network_server.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -18,6 +18,7 @@
 #include "newgrf.h"
 #include "variables.h"
 #include "string.h"
+#include "strings.h"
 #include "table/strings.h"
 #include "bridge.h"
 #include "town.h"
@@ -75,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,
@@ -538,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;
 
@@ -660,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;
 
@@ -771,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;
 
@@ -887,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;
 
@@ -1296,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
@@ -2044,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++;
 	}
 }
@@ -2100,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;
 	}
@@ -2958,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++;
 	}
 }
@@ -3277,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;
+		}
 	}
 }
 
@@ -3356,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++;
 		}
 	}
@@ -3412,15 +3416,6 @@
 		STR_NEWGRF_ERROR_MSG_FATAL
 	};
 
-	/* AddGRFString expects the string to be referred to by an id in the newgrf
-	 * file. Errors messages are never referred to however, so invent ids that
-	 * are unlikely to be reached in a newgrf file so they don't overwrite
-	 * anything else. */
-	enum {
-		MESSAGE_STRING_ID = MAX_UVALUE(StringID) - 1,
-		MESSAGE_DATA_ID   = MAX_UVALUE(StringID)
-	};
-
 	if (!check_length(len, 6, "GRFLoadError")) return;
 
 	/* For now we can only show one message per newgrf file. */
@@ -3432,6 +3427,9 @@
 	byte message_id = grf_load_byte(&buf);
 	len -= 4;
 
+	/* Skip the error if it isn't valid for the current language. */
+	if (!CheckGrfLangID(lang, _cur_grffile->grf_version)) return;
+
 	/* Skip the error until the activation stage unless bit 7 of the severity
 	 * is set. */
 	if (!HASBIT(severity, 7) && _cur_stage == GLS_INIT) {
@@ -3461,7 +3459,6 @@
 		return;
 	}
 
-	bool new_scheme = _cur_grffile->grf_version >= 7;
 	GRFError *error = CallocT<GRFError>(1);
 
 	error->severity = sevstr[severity];
@@ -3471,7 +3468,7 @@
 		const char *message = grf_load_string(&buf, len);
 		len -= (strlen(message) + 1);
 
-		error->message = AddGRFString(_cur_grffile->grfid, MESSAGE_STRING_ID, lang, new_scheme, message, STR_UNDEFINED);
+		error->custom_message = TranslateTTDPatchCodes(message);
 	} else {
 		error->message = msgstr[message_id];
 	}
@@ -3480,7 +3477,7 @@
 		const char *data = grf_load_string(&buf, len);
 		len -= (strlen(data) + 1);
 
-		error->data = AddGRFString(_cur_grffile->grfid, MESSAGE_DATA_ID, lang, new_scheme, data, STR_UNDEFINED);
+		error->data = TranslateTTDPatchCodes(data);
 	}
 
 	/* Only two parameter numbers can be used in the string. */
@@ -4086,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++;
 		}
 	}
@@ -4116,8 +4113,12 @@
 		/* If the file is not active but will be activated later, give an error
 		 * and disable this file. */
 		GRFError *error = CallocT<GRFError>(1);
+
+		char tmp[256];
+		GetString(tmp, STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE, lastof(tmp));
+		error->data = strdup(tmp);
+
 		error->message  = STR_NEWGRF_ERROR_LOAD_AFTER;
-		error->data     = STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE;
 		error->severity = STR_NEWGRF_ERROR_MSG_FATAL;
 
 		if (_cur_grfconfig->error != NULL) free(_cur_grfconfig->error);
@@ -4228,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
@@ -4398,6 +4399,18 @@
 	_cur_grffile   = NULL;
 }
 
+static void ResetNewGRFErrors()
+{
+	for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
+		if (!HASBIT(c->flags, GCF_COPY) && c->error != NULL) {
+			free(c->error->custom_message);
+			free(c->error->data);
+			free(c->error);
+			c->error = NULL;
+		}
+	}
+}
+
 /**
  * Reset all NewGRF loaded data
  * TODO
@@ -4465,6 +4478,9 @@
 	/* Reset NewGRF files */
 	ResetNewGRF();
 
+	/* Reset NewGRF errors. */
+	ResetNewGRFErrors();
+
 	/* Add engine type to engine data. This is needed for the refit precalculation. */
 	AddTypeToEngines();
 
@@ -4476,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf.h	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_config.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -97,7 +97,12 @@
 		free((*config)->full_path);
 		free((*config)->name);
 		free((*config)->info);
-		free((*config)->error);
+
+		if ((*config)->error != NULL) {
+			free((*config)->error->custom_message);
+			free((*config)->error->data);
+			free((*config)->error);
+		}
 	}
 	free(*config);
 	*config = NULL;
@@ -134,6 +139,8 @@
 		if (src->error     != NULL) {
 			c->error = CallocT<GRFError>(1);
 			memcpy(c->error, src->error, sizeof(GRFError));
+			if (src->error->data != NULL) c->error->data = strdup(src->error->data);
+			if (src->error->custom_message != NULL) c->error->custom_message = strdup(src->error->custom_message);
 		}
 
 		*dst = c;
@@ -356,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_config.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_config.h	Tue Jun 19 07:21:01 2007 +0000
@@ -36,8 +36,9 @@
 };
 
 struct GRFError {
+	char *custom_message;
+	char *data;
 	StringID message;
-	StringID data;
 	StringID severity;
 	uint8 num_params;
 	uint8 param_number[2];
--- a/src/newgrf_engine.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_engine.cpp	Tue Jun 19 07:21:01 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_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_gui.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -48,7 +48,7 @@
 
 	if (c->error != NULL) {
 		SetDParamStr(0, c->filename);
-		SetDParam(1, c->error->data);
+		SetDParamStr(1, c->error->data);
 		for (uint i = 0; i < c->error->num_params; i++) {
 			uint32 param = 0;
 			byte param_number = c->error->param_number[i];
@@ -59,7 +59,7 @@
 		}
 
 		char message[512];
-		GetString(message, c->error->message, lastof(message));
+		GetString(message, c->error->custom_message != NULL ? BindCString(c->error->custom_message) : c->error->message, lastof(message));
 
 		SetDParamStr(0, message);
 		y += DrawStringMultiLine(x, y, c->error->severity, w, bottom - y);
--- a/src/newgrf_house.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_house.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_industries.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -8,6 +8,7 @@
 #include "functions.h"
 #include "macros.h"
 #include "industry.h"
+#include "industry_map.h"
 #include "newgrf.h"
 #include "newgrf_callbacks.h"
 #include "newgrf_spritegroup.h"
@@ -59,6 +60,51 @@
 	return best_dist;
 }
 
+/** Make an analysis of a tile and check for its belonging to the same
+ * industry, and/or the same grf file
+ * @param new_tile TileIndex of the tile to query
+ * @param old_tile TileINdex of teh reference tile
+ * @param i Industry to which old_tile belongs to
+ * @return value encoded as per NFO specs */
+uint32 GetIndustryIDAtOffset(TileIndex new_tile, TileIndex old_tile, const Industry *i)
+{
+	if (IsTileType(new_tile, MP_INDUSTRY)) {  // Is this an industry tile?
+
+		if (GetIndustryIndex(new_tile) == i->index) {  // Does it belong to the same industry?
+			IndustryGfx gfx = GetIndustryGfx(new_tile);
+			const IndustryTileSpec *indtsp = GetIndustryTileSpec(gfx);
+			const IndustryTileSpec *indold = GetIndustryTileSpec(GetIndustryGfx(old_tile));
+
+			if (gfx < NEW_INDUSTRYOFFSET) {  // Does it belongs to an old type?
+				/* It is an old tile.  We have to see if it's been overriden */
+				if (indtsp->grf_prop.override == INVALID_INDUSTRYTILE) {  // has it been overridden?
+					return 0xFF << 8 | gfx; // no. Tag FF + the gfx id of that tile
+				} else { // yes.  FInd out if it is from the same grf file or not
+					const IndustryTileSpec *old_tile_ovr = GetIndustryTileSpec(indtsp->grf_prop.override);
+
+					if (old_tile_ovr->grf_prop.grffile->grfid == indold->grf_prop.grffile->grfid) {
+						return old_tile_ovr->grf_prop.local_id; // same grf file
+					} else {
+						return 0xFFFE; // not the same grf file
+					}
+				}
+			} else {
+				if (indtsp->grf_prop.spritegroup != NULL) {  // tile has a spritegroup ?
+					if (indtsp->grf_prop.grffile->grfid == indold->grf_prop.grffile->grfid) {  // same industry, same grf ?
+						return indtsp->grf_prop.local_id;
+					} else {
+						return 0xFFFE;  // Defined in another grf file
+					}
+				} else {  // tile has no spritegroup
+					return 0xFF << 8 | indtsp->grf_prop.subst_id;  // so just give him the substitute
+				}
+			}
+		}
+	}
+
+	return 0xFFFF; // tile is not an industry one or  does not belong to the current industry
+}
+
 /** This function implements the industries variables that newGRF defines.
  * @param variable that is queried
  * @param parameter unused
@@ -85,16 +131,8 @@
 		/* TODO: somehow determine whether we're in water or not */
 		case 0x43: return GetClosestWaterDistance(tile, true); // Manhattan distance of closes dry/water tile
 
-		case 0x60: { /* Get industry ID at offset param */
-			/*The parameter of this variable is an offset from the northernmost tile of the industry:
-			 * the high nibble contains the Y offset, the low one the X offset; both are unsigned.
-			 * The high word of the return value is currently reserved, and the low word can be:
-			 * 00xxh if the tile is an industry tile and was defined in the current GRF with ID xx.
-			 * FFxxh if the tile is an industry tile of an old type, and has the ID xx.
-			 * FFFEh if the tile is an industry tile that was defined in another GRF file
-			 * FFFFh if the tile isn't an industry tile, or doesn't belong to the current industry */
-			return GetIndustry(GetNearbyTile(parameter, tile))->type;
-		}
+		/* Get industry ID at offset param */
+		case 0x60: return GetIndustryIDAtOffset(GetNearbyTile(parameter, industry->xy), tile, industry);
 
 		case 0x61: return 0; // Get random tile bits at offset param
 
@@ -189,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;
@@ -213,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_industries.h	Tue Jun 19 07:21:01 2007 +0000
@@ -8,7 +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	Tue Jun 19 07:21:01 2007 +0000
@@ -0,0 +1,161 @@
+/* $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 */
+		/** @todo Maybe use GetRadiusGroupForTile? */
+		case 0x42 : return ClosestTownFromTile(tile, (uint)-1)->GetRadiusGroup(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	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_spritegroup.h	Tue Jun 19 07:21:01 2007 +0000
@@ -200,6 +200,7 @@
 		struct {
 			TileIndex tile;
 			Industry *ind;
+			IndustryGfx gfx;
 		} industry;
 		struct {
 			const struct CargoSpec *cs;
--- a/src/newgrf_text.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_text.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -438,13 +438,27 @@
 	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;
 		}
 	}
 	_currentLangID = ret;
 }
 
+bool CheckGrfLangID(byte lang_id, byte grf_version)
+{
+	if (grf_version < 7) {
+		switch (_currentLangID) {
+			case GRFLX_GERMAN:  return (lang_id & GRFLB_GERMAN)  != 0;
+			case GRFLX_FRENCH:  return (lang_id & GRFLB_FRENCH)  != 0;
+			case GRFLX_SPANISH: return (lang_id & GRFLB_SPANISH) != 0;
+			default:            return (lang_id & (GRFLB_ENGLISH | GRFLB_AMERICAN)) != 0;
+		}
+	}
+
+	return (lang_id == _currentLangID || lang_id == GRFLX_UNSPECIFIED);
+}
+
 /**
  * House cleaning.
  * Remove all strings and reset the text counter.
--- a/src/newgrf_text.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/newgrf_text.h	Tue Jun 19 07:21:01 2007 +0000
@@ -13,4 +13,6 @@
 void SetCurrentGrfLangID(const char *iso_name);
 char *TranslateTTDPatchCodes(const char *str);
 
+bool CheckGrfLangID(byte lang_id, byte grf_version);
+
 #endif /* NEWGRF_TEXT_H */
--- a/src/oldloader.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/oldloader.cpp	Tue Jun 19 07:21:01 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"
 #include "economy_new.h"
@@ -331,7 +331,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/openttd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -64,7 +64,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"
@@ -86,7 +86,7 @@
 extern Player* DoStartupNewPlayer(bool is_ai);
 extern void ShowOSErrorBox(const char *buf);
 
-const char *_default_blitter = "8bpp-optimzed";
+const char *_default_blitter = "8bpp-optimized";
 
 /* TODO: usrerror() for errors which are not of an internal nature but
  * caused by the user, i.e. missing files or fatal configuration errors.
@@ -312,8 +312,6 @@
 
 static void LoadIntroGame()
 {
-	char filename[256];
-
 	_game_mode = GM_MENU;
 
 	/* Clear transparency options */
@@ -326,14 +324,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();
 	}
@@ -402,6 +394,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).
@@ -474,6 +467,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;
@@ -754,7 +752,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);
 	}
@@ -776,12 +774,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:
@@ -854,7 +860,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 {
@@ -888,7 +894,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);
@@ -904,7 +910,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);
@@ -961,9 +967,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 */
@@ -973,27 +981,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);
 }
 
@@ -1300,7 +1302,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/openttd.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/openttd.h	Tue Jun 19 07:21:01 2007 +0000
@@ -67,6 +67,7 @@
 typedef uint16 GroupID;
 typedef uint16 EngineRenewID;
 typedef uint16 DestinationID;
+typedef int32 CommandCost;
 
 /* DestinationID must be at least as large as every these below, because it can
  * be any of them
--- a/src/order_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/order_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -190,7 +190,7 @@
  *                        only the first 8 bits used currently (bit 16 - 23) (max 255)
  * @param p2 packed order to insert
  */
-int32 CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleID veh   = GB(p1,  0, 16);
@@ -448,7 +448,7 @@
  * @param *dst delete the orders of this vehicle
  * @param flags execution flags
  */
-static int32 DecloneOrder(Vehicle *dst, uint32 flags)
+static CommandCost DecloneOrder(Vehicle *dst, uint32 flags)
 {
 	if (flags & DC_EXEC) {
 		DeleteVehicleOrders(dst);
@@ -483,7 +483,7 @@
  * @param p1 the ID of the vehicle
  * @param p2 the order to delete (max 255)
  */
-int32 CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v, *u;
 	VehicleID veh_id = p1;
@@ -563,7 +563,7 @@
  * @param p1 The ID of the vehicle which order is skipped
  * @param p2 the selected order to which we want to skip
  */
-int32 CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleID veh_id = p1;
@@ -608,7 +608,7 @@
  * @note The target order will move one place down in the orderlist
  *  if you move the order upwards else it'll move it one place down
  */
-int32 CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleID veh = p1;
 	VehicleOrderID moving_order = GB(p2,  0, 16);
@@ -694,7 +694,7 @@
  *                        only the first 8 bits used currently (bit 16 - 23) (max 255)
  * @param p2 mode to change the order to (always set)
  */
-int32 CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	Order *order;
@@ -774,7 +774,7 @@
  * - p1 = (bit 16-31) - source vehicle to clone orders from, if any (none for CO_UNSHARE)
  * @param p2 mode of cloning: CO_SHARE, CO_COPY, or CO_UNSHARE
  */
-int32 CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *dst;
 	VehicleID veh_src = GB(p1, 16, 16);
@@ -908,7 +908,7 @@
  *   - bit 8-15 Cargo subtype
  *   - bit 16-23 number of order to modify
  */
-int32 CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	const Vehicle *v;
 	Order *order;
@@ -1039,7 +1039,7 @@
  * If we do want to backup/restore it, just add UnitID uid to BackuppedOrders, and
  * restore it as parameter 'y' (ugly hack I know) for example. "v->unitnumber = y;"
  */
-int32 CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleOrderID cur_ord = GB(p2,  0, 16);
--- a/src/order_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/order_gui.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ottdres.rc	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/player.h	Tue Jun 19 07:21:01 2007 +0000
@@ -149,6 +149,12 @@
 };
 
 
+/* The "steps" in loan size, in British Pounds! */
+enum {
+	LOAN_INTERVAL        = 10000,
+	LOAN_INTERVAL_OLD_AI = 50000,
+};
+
 typedef uint32 PlayerFace;
 
 struct Player {
@@ -331,7 +337,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-static inline int32 AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); }
+static inline CommandCost AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); }
 
 /**
  * Remove an engine replacement for the player.
@@ -340,7 +346,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-static inline int32 RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); }
+static inline CommandCost RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); }
 
 /**
  * Reset the livery schemes to the player's primary colour.
--- a/src/player_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/player_gui.cpp	Tue Jun 19 07:21:01 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/players.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/players.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -173,7 +173,7 @@
 	InvalidateWindow(WC_FINANCES, pid);
 }
 
-bool CheckPlayerHasMoney(int32 cost)
+bool CheckPlayerHasMoney(CommandCost cost)
 {
 	if (cost > 0) {
 		PlayerID pid = _current_player;
@@ -186,7 +186,7 @@
 	return true;
 }
 
-static void SubtractMoneyFromAnyPlayer(Player *p, int32 cost)
+static void SubtractMoneyFromAnyPlayer(Player *p, CommandCost cost)
 {
 	p->money64 -= cost;
 	UpdatePlayerMoney32(p);
@@ -210,14 +210,14 @@
 	InvalidatePlayerWindows(p);
 }
 
-void SubtractMoneyFromPlayer(int32 cost)
+void SubtractMoneyFromPlayer(CommandCost cost)
 {
 	PlayerID pid = _current_player;
 
 	if (IsValidPlayer(pid)) SubtractMoneyFromAnyPlayer(GetPlayer(pid), cost);
 }
 
-void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost)
+void SubtractMoneyFromPlayerFract(PlayerID player, CommandCost cost)
 {
 	Player *p = GetPlayer(player);
 	byte m = p->player_money_fraction;
@@ -676,7 +676,7 @@
  * if p1 = 5, then
  * - p2 = enable renew_keep_length
  */
-int32 CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
 	if (!IsValidPlayer(_current_player)) return CMD_ERROR;
@@ -723,7 +723,7 @@
 			EngineID old_engine_type = GB(p2, 0, 16);
 			EngineID new_engine_type = GB(p2, 16, 16);
 			GroupID id_g = GB(p1, 16, 16);
-			int32 cost;
+			CommandCost cost;
 
 			if (!IsValidGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR;
 			if (new_engine_type != INVALID_ENGINE) {
@@ -805,7 +805,7 @@
  * @arg - network_server.c:838 DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)@n
  * @arg - network_client.c:536 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP) from where the map has been received
  */
-int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (flags & DC_EXEC) _current_player = OWNER_NONE;
 
--- a/src/rail_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/rail_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -189,7 +189,7 @@
 }
 
 
-static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
+static CommandCost CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
 {
 	if (IsSteepSlope(tileh)) {
 		if (_patches.build_on_slopes && existing == 0) {
@@ -231,14 +231,14 @@
  * @param p1 railtype of being built piece (normal, mono, maglev)
  * @param p2 rail track to build
  */
-int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Slope tileh;
 	RailType railtype;
 	Track track;
 	TrackBits trackbit;
-	int32 cost = 0;
-	int32 ret;
+	CommandCost cost = 0;
+	CommandCost ret;
 
 	if (!ValParamRailtype(p1) || !ValParamTrackOrientation((Track)p2)) return CMD_ERROR;
 	railtype = (RailType)p1;
@@ -357,11 +357,11 @@
  * @param p1 unused
  * @param p2 rail orientation
  */
-int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Track track = (Track)p2;
 	TrackBits trackbit;
-	int32 cost = 0;
+	CommandCost cost = 0;
 	bool crossing = false;
 
 	if (!ValParamTrackOrientation((Track)p2)) return CMD_ERROR;
@@ -448,7 +448,7 @@
 };
 
 
-static int32 ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end)
+static CommandCost ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end)
 {
 	int x = TileX(start);
 	int y = TileY(start);
@@ -508,9 +508,9 @@
  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  */
-static int32 CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+static CommandCost CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 ret, total_cost = 0;
+	CommandCost ret, total_cost = 0;
 	Track track = (Track)GB(p2, 4, 3);
 	Trackdir trackdir;
 	byte mode = HASBIT(p2, 7);
@@ -560,7 +560,7 @@
  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  * @see CmdRailTrackHelper
  */
-int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
 }
@@ -576,7 +576,7 @@
  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  * @see CmdRailTrackHelper
  */
-int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
 }
@@ -590,10 +590,10 @@
  * @todo When checking for the tile slope,
  * distingush between "Flat land required" and "land sloped in wrong direction"
  */
-int32 CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Depot *d;
-	int32 cost, ret;
+	CommandCost cost, ret;
 	Slope tileh;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -659,12 +659,12 @@
  * @param p2 used for CmdBuildManySignals() to copy direction of first signal
  * TODO: p2 should be replaced by two bits for "along" and "against" the track.
  */
-int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Track track = (Track)GB(p1, 0, 3);
 	bool pre_signal = HASBIT(p1, 3);
 	SignalVariant sigvar = (pre_signal ^ HASBIT(p1, 4)) ? SIG_SEMAPHORE : SIG_ELECTRIC;
-	int32 cost;
+	CommandCost cost;
 
 	if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicleOnGround(tile))
 		return CMD_ERROR;
@@ -756,9 +756,10 @@
  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
  * - p2 = (bit 24-31) - user defined signals_density
  */
-static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+static CommandCost CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 ret, total_cost, signal_ctr;
+	CommandCost ret, total_cost;
+	int signal_ctr;
 	byte signals;
 	bool error = true;
 	TileIndex end_tile;
@@ -815,7 +816,7 @@
 			ret = DoCommand(tile, p1, signals, flags, remove ? CMD_REMOVE_SIGNALS : CMD_BUILD_SIGNALS);
 
 			/* Be user-friendly and try placing signals as much as possible */
-			if (!CmdFailed(ret)) {
+			if (CmdSucceeded(ret)) {
 				error = false;
 				total_cost += ret;
 			}
@@ -846,7 +847,7 @@
  * - p2 = (bit 24-31) - user defined signals_density
  * @see CmdSignalTrackHelper
  */
-int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdSignalTrackHelper(tile, flags, p1, p2);
 }
@@ -860,7 +861,7 @@
  *           - (bit  4)    - 0 = signals, 1 = semaphores
  * @param p2 unused
  */
-int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Track track = (Track)GB(p1, 0, 3);
 
@@ -909,12 +910,12 @@
  * - p2 = (bit 24-31) - user defined signals_density
  * @see CmdSignalTrackHelper
  */
-int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
 }
 
-typedef int32 DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
+typedef CommandCost DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
 
 /**
  * Switches the rail type.
@@ -926,7 +927,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-static int32 DoConvertRail(TileIndex tile, RailType totype, bool exec)
+static CommandCost DoConvertRail(TileIndex tile, RailType totype, bool exec)
 {
 	if (!CheckTileOwnership(tile)) return CMD_ERROR;
 
@@ -966,9 +967,9 @@
 	return _eco->GetPrice(CEconomy::PRICE_RAIL_BUILD) / 2;
 }
 
-extern int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
-extern int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec);
-extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
 
 /** Convert one rail type to the other. You can convert normal rail to
  * monorail/maglev easily or vice-versa.
@@ -977,9 +978,10 @@
  * @param p1 start tile of drag
  * @param p2 new railtype to convert to
  */
-int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 ret, cost, money;
+	CommandCost ret, cost;
+	int32 money;
 	int ex;
 	int ey;
 	int sx, sy, x, y;
@@ -1032,7 +1034,7 @@
 	return (cost == 0) ? ret : cost;
 }
 
-static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveTrainDepot(TileIndex tile, uint32 flags)
 {
 	if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
 		return CMD_ERROR;
@@ -1051,10 +1053,10 @@
 	return _eco->GetPrice(CEconomy::REMOVE_TRAIN_DEPOT, tile, true);
 }
 
-static int32 ClearTile_Track(TileIndex tile, byte flags)
+static CommandCost ClearTile_Track(TileIndex tile, byte flags)
 {
-	int32 cost;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 
 	if (flags & DC_AUTO) {
 		if (!IsTileOwner(tile, _current_player))
--- a/src/rail_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/rail_gui.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -175,7 +175,7 @@
 		trackbits = (_tile_fract_coords.x + _tile_fract_coords.y <= 15) ? TRACK_BIT_UPPER : TRACK_BIT_LOWER;
 	}
 
-	Track track = TrackBitsToTrack(trackbits);
+	Track track = FindFirstTrack(trackbits);
 
 	if (!_remove_button_clicked) {
 		uint32 p1 = track;
--- a/src/road_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/road_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -107,7 +107,7 @@
  *                    removing the tram bits before the test.
  * @param p2 unused
  */
-int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* cost for removing inner/edge -roads */
 	static const uint16 road_remove_cost[2] = {50, 18};
@@ -166,7 +166,7 @@
 		/* If it's the last roadtype, just clear the whole tile */
 		if (rts == RoadTypeToRoadTypes(rt)) return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
-		int32 cost;
+		CommandCost cost;
 		if (IsTileType(tile, MP_TUNNELBRIDGE)) {
 			TileIndex other_end = IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile);
 			/* Pay for *every* tile of the bridge or tunnel */
@@ -301,7 +301,7 @@
 };
 
 
-static uint32 CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
+static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
 {
 	RoadBits road_bits;
 
@@ -346,10 +346,10 @@
  *           bit 6..7 disallowed directions to toggle
  * @param p2 the town that is building the road (0 if not applicable)
  */
-int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost = 0;
-	int32 ret;
+	CommandCost cost = 0;
+	CommandCost ret;
 	RoadBits existing = ROAD_NONE;
 	RoadBits all_bits = ROAD_NONE;
 	Slope tileh;
@@ -557,7 +557,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
 {
 	/* not a railroad crossing? */
 	if (!IsLevelCrossing(tile)) return CMD_ERROR;
@@ -591,10 +591,10 @@
  * - p2 = (bit 3 + 4) - road type
  * - p2 = (bit 5) - set road direction
  */
-int32 CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex start_tile, tile;
-	int32 cost, ret;
+	CommandCost cost, ret;
 	bool had_bridge = false;
 	bool had_success = false;
 	DisallowedRoadDirections drd = DRD_NORTHBOUND;
@@ -671,10 +671,10 @@
  * - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4)
  * - p2 = (bit 3 + 4) - road type
  */
-int32 CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex start_tile, tile;
-	int32 cost, ret;
+	CommandCost cost, ret;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -708,7 +708,7 @@
 		/* try to remove the halves. */
 		if (bits != 0) {
 			ret = DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD);
-			if (!CmdFailed(ret)) cost += ret;
+			if (CmdSucceeded(ret)) cost += ret;
 		}
 
 		if (tile == end_tile) break;
@@ -729,9 +729,9 @@
  * @todo When checking for the tile slope,
  * distingush between "Flat land required" and "land sloped in wrong direction"
  */
-int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	Depot *dep;
 	Slope tileh;
 
@@ -771,7 +771,7 @@
 	return cost;
 }
 
-static int32 RemoveRoadDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveRoadDepot(TileIndex tile, uint32 flags)
 {
 	if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
 		return CMD_ERROR;
@@ -783,7 +783,7 @@
 	return _eco->GetPrice(CEconomy::REMOVE_ROAD_DEPOT, tile, true);
 }
 
-static int32 ClearTile_Road(TileIndex tile, byte flags)
+static CommandCost ClearTile_Road(TileIndex tile, byte flags)
 {
 	switch (GetRoadTileType(tile)) {
 		case ROAD_TILE_NORMAL: {
@@ -797,10 +797,10 @@
 			    !(flags & DC_AUTO)
 				) {
 				RoadTypes rts = GetRoadTypes(tile);
-				int32 ret = 0;
+				CommandCost ret = 0;
 				for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
 					if (HASBIT(rts, rt)) {
-						int32 tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
+						CommandCost tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
 						if (CmdFailed(tmp_ret)) return tmp_ret;
 						ret += tmp_ret;
 					}
@@ -813,7 +813,7 @@
 
 		case ROAD_TILE_CROSSING: {
 			RoadTypes rts = GetRoadTypes(tile);
-			int32 ret = 0;
+			CommandCost ret = 0;
 
 			if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
 
@@ -821,7 +821,7 @@
 			 * tram tracks must be removed before the road bits. */
 			for (RoadType rt = ROADTYPE_HWAY; rt >= ROADTYPE_ROAD; rt--) {
 				if (HASBIT(rts, rt)) {
-					int32 tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
+					CommandCost tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
 					if (CmdFailed(tmp_ret)) return tmp_ret;
 					ret += tmp_ret;
 				}
--- a/src/roadveh_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/roadveh_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -116,7 +116,7 @@
 	DrawSprite(6 + _roadveh_images[spritenum], pal, x, y);
 }
 
-static int32 EstimateRoadVehCost(EngineID engine_type)
+static CommandCost EstimateRoadVehCost(EngineID engine_type)
 {
 	return ((_eco->GetPrice(CEconomy::ROADVEH_BASE) >> 3) * GetEngineProperty(engine_type, 0x11, RoadVehInfo(engine_type)->base_cost)) >> 5;
 }
@@ -156,9 +156,9 @@
  * @param p1 bus/truck type being built (engine)
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  */
-int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	Vehicle *v;
 	UnitID unit_num;
 	Engine *e;
@@ -282,7 +282,7 @@
  * @param p1 road vehicle ID to start/stop
  * @param p2 unused
  */
-int32 CmdStartStopRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	uint16 callback;
@@ -347,7 +347,7 @@
  * @param p1 vehicle ID to be sold
  * @param p2 unused
  */
-int32 CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 
@@ -447,7 +447,7 @@
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  */
-int32 CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	const Depot *dep;
@@ -520,7 +520,7 @@
  * @param p1 vehicle ID to turn
  * @param p2 unused
  */
-int32 CmdTurnRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdTurnRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 
@@ -709,7 +709,7 @@
 
 		if (!IsLevelCrossingTile(tile)) continue;
 
-		if (VehicleFromPos(tile, u, EnumCheckRoadVehCrashTrain) != NULL) {
+		if (VehicleFromPosXY(v->x_pos, v->y_pos, u, EnumCheckRoadVehCrashTrain) != NULL) {
 			RoadVehCrash(v);
 			return;
 		}
@@ -889,7 +889,7 @@
 	rvf.y = y;
 	rvf.dir = dir;
 	rvf.veh = v;
-	u = (Vehicle*)VehicleFromPos(TileVirtXY(x, y), &rvf, EnumCheckRoadVehClose);
+	u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose);
 
 	/* This code protects a roadvehicle from being blocked for ever
 	 * If more than 1480 / 74 days a road vehicle is blocked, it will
@@ -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;
@@ -1893,7 +1886,7 @@
 
 void OnNewDay_RoadVeh(Vehicle *v)
 {
-	int32 cost;
+	CommandCost cost;
 
 	if (!IsRoadVehFront(v)) return;
 
@@ -2008,10 +2001,10 @@
  * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
-int32 CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
-	int32 cost;
+	CommandCost cost;
 	CargoID new_cid = GB(p2, 0, 8);
 	byte new_subtype = GB(p2, 8, 8);
 	uint16 capacity = CALLBACK_FAILED;
--- a/src/saveload.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/saveload.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/saveload.h	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/screenshot.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -8,12 +8,16 @@
 #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];
 uint _num_screenshot_formats;
@@ -21,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 {
@@ -71,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;
@@ -82,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;
@@ -101,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;
@@ -136,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;
@@ -172,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;
@@ -206,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 {
@@ -243,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);
@@ -287,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;
 
@@ -320,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;
@@ -339,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)
@@ -446,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;
@@ -491,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);
@@ -505,15 +538,16 @@
 		GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
 	}
 
-	base = strchr(_screenshot_name, 0);
-	base[0] = '.'; strcpy(base + 1, ext);
+	/* Add extension to screenshot file */
+	SanitizeFilename(_screenshot_name);
+	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;
@@ -532,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()
@@ -551,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/settings.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -1225,14 +1225,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()
 };
@@ -1257,6 +1256,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()
@@ -1765,7 +1767,7 @@
  * The new value is properly clamped to its minimum/maximum when setting
  * @see _patch_settings
  */
-int32 CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	const SettingDesc *sd = GetSettingDescription(p1);
 
--- a/src/settings_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/settings_gui.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -251,7 +251,7 @@
  * @param p1 the side of the road; 0 = left side and 1 = right side
  * @param p2 unused
  */
-int32 CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check boundaries and you can only change this if NO vehicles have been built yet,
 	 * except in the intro-menu where of course it's always possible to do so. */
--- a/src/ship_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/ship_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -175,7 +175,7 @@
 
 void OnNewDay_Ship(Vehicle *v)
 {
-	int32 cost;
+	CommandCost cost;
 
 	if ((++v->day_counter & 7) == 0)
 		DecreaseVehicleValue(v);
@@ -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;
@@ -400,7 +403,7 @@
 	return (t < v->progress);
 }
 
-static int32 EstimateShipCost(EngineID engine_type)
+static CommandCost EstimateShipCost(EngineID engine_type)
 {
 	return GetEngineProperty(engine_type, 0x0A, ShipVehInfo(engine_type)->base_cost) * (_eco->GetPrice(CEconomy::SHIP_BASE) >> 3) >> 5;
 }
@@ -806,9 +809,9 @@
  * @param p1 ship type being built (engine)
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  */
-int32 CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 value;
+	CommandCost value;
 	Vehicle *v;
 	UnitID unit_num;
 	Engine *e;
@@ -901,7 +904,7 @@
  * @param p1 vehicle ID to be sold
  * @param p2 unused
  */
-int32 CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 
@@ -935,7 +938,7 @@
  * @param p1 ship ID to start/stop
  * @param p2 unused
  */
-int32 CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	uint16 callback;
@@ -976,7 +979,7 @@
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  */
-int32 CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	const Depot *dep;
@@ -1053,10 +1056,10 @@
  * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
-int32 CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
-	int32 cost;
+	CommandCost cost;
 	CargoID new_cid = GB(p2, 0, 8); //gets the cargo number
 	byte new_subtype = GB(p2, 8, 8);
 	uint16 capacity = CALLBACK_FAILED;
--- a/src/signs.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/signs.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -122,7 +122,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Sign *si;
 
@@ -159,7 +159,7 @@
  * @param p2 unused
  * @return 0 if succesfull, otherwise CMD_ERROR
  */
-int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidSignID(p1)) return CMD_ERROR;
 
--- a/src/smallmap_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/smallmap_gui.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/sound.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/spritecache.cpp	Tue Jun 19 07:21:01 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;
 };
 
 
@@ -118,7 +125,7 @@
 
 void* AllocSprite(size_t);
 
-static void* ReadSprite(SpriteCache *sc, SpriteID id)
+static void* ReadSprite(SpriteCache *sc, SpriteID id, bool real_sprite)
 {
 	uint32 file_pos = sc->file_pos;
 
@@ -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 */
@@ -139,18 +168,71 @@
 	byte type = FioReadByte();
 	/* Type 0xFF indicates either a colormap or some other non-sprite info */
 	if (type == 0xFF) {
+		if (real_sprite) {
+			static byte warning_level = 0;
+			DEBUG(sprite, warning_level, "Tried to load non sprite #%d as a real sprite. Probable cause: NewGRF interference", id);
+			warning_level = 6;
+			if (id == SPR_IMG_QUERY) error("Uhm, would you be so kind not to load a NewGRF that makes the 'query' sprite a non- sprite?");
+			return (void*)GetSprite(SPR_IMG_QUERY);
+		}
+
 		byte *dest = (byte *)AllocSprite(num);
 
 		sc->ptr = dest;
 		FioReadBlock(dest, num);
 
-		return dest;
+		return sc->ptr;
+	}
+	/* Ugly hack to work around the problem that the old landscape
+	 *  generator assumes that those sprites are stored uncompressed in
+	 *  the memory, and they are only read directly by the code, never
+	 *  send to the blitter. So do not send it to the blitter (which will
+	 *  result in a data array in the format the blitter likes most), but
+	 *  read the data directly from disk and store that as sprite.
+	 * Ugly: yes. Other solution: no. Blame the original author or
+	 *  something ;) The image should really have been a data-stream
+	 *  (so type = 0xFF basicly). */
+	if (id >= 4845 && id <= 4881) {
+		uint height = FioReadByte();
+		uint width  = FioReadWord();
+		Sprite *sprite;
+		byte *dest;
+
+		num = width * height;
+		sprite = (Sprite *)AllocSprite(sizeof(*sprite) + num);
+		sc->ptr = sprite;
+		sprite->height = height;
+		sprite->width  = width;
+		sprite->x_offs = FioReadWord();
+		sprite->y_offs = FioReadWord();
+
+		dest = sprite->data;
+		while (num > 0) {
+			int8 i = FioReadByte();
+			if (i >= 0) {
+				num -= i;
+				for (; i > 0; --i) *dest++ = FioReadByte();
+			} else {
+				const byte* rel = dest - (((i & 7) << 8) | FioReadByte());
+				i = -(i >> 3);
+				num -= i;
+				for (; i > 0; --i) *dest++ = *rel++;
+			}
+		}
+
+		return sc->ptr;
+	}
+
+	if (!real_sprite) {
+		static byte warning_level = 0;
+		DEBUG(sprite, warning_level, "Tried to load real sprite #%d as a non sprite. Probable cause: NewGRF interference", id);
+		warning_level = 6;
 	}
 
 	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);
@@ -159,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);
@@ -174,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;
 }
@@ -186,6 +282,8 @@
 
 	scnew->file_pos = scold->file_pos;
 	scnew->ptr = NULL;
+	scnew->id = scold->id;
+	scnew->grf_name = strdup(scold->grf_name);
 }
 
 
@@ -364,7 +462,7 @@
 }
 
 
-const void *GetRawSprite(SpriteID sprite)
+const void *GetRawSprite(SpriteID sprite, bool real_sprite)
 {
 	SpriteCache *sc;
 	void* p;
@@ -379,7 +477,7 @@
 	p = sc->ptr;
 
 	/* Load the sprite, if it is not loaded, yet */
-	if (p == NULL) p = ReadSprite(sc, sprite);
+	if (p == NULL) p = ReadSprite(sc, sprite, real_sprite);
 	return p;
 }
 
--- a/src/spritecache.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/spritecache.h	Tue Jun 19 07:21:01 2007 +0000
@@ -15,23 +15,23 @@
 
 extern uint _sprite_cache_size;
 
-const void *GetRawSprite(SpriteID sprite);
+const void *GetRawSprite(SpriteID sprite, bool real_sprite);
 bool SpriteExists(SpriteID sprite);
 
 static inline const Sprite *GetSprite(SpriteID sprite)
 {
-	return (Sprite*)GetRawSprite(sprite);
+	return (Sprite*)GetRawSprite(sprite, true);
 }
 
 static inline const byte *GetNonSprite(SpriteID sprite)
 {
-	return (byte*)GetRawSprite(sprite);
+	return (byte*)GetRawSprite(sprite, false);
 }
 
 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/spriteloader/grf.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -1,10 +1,14 @@
+/* $Id$ */
+
+/** @file grf.cpp */
+
 #include "../stdafx.h"
 #include "../gfx.h"
 #include "../fileio.h"
 #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);
@@ -91,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/spriteloader/grf.hpp	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/spriteloader/spriteloader.hpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/station_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -612,13 +612,13 @@
 	UpdateStationSignCoord(st);
 }
 
-static int32 ClearTile_Station(TileIndex tile, byte flags);
+static CommandCost ClearTile_Station(TileIndex tile, byte flags);
 
 // Tries to clear the given area. Returns the cost in case of success.
 // Or an error code if it failed.
-int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true)
+CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true)
 {
-	int32 cost = 0;
+	CommandCost cost = 0;
 	int allowed_z = -1;
 
 	BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
@@ -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);
@@ -680,7 +680,7 @@
 				}
 			}
 		} else if (check_clear) {
-			int32 ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+			CommandCost ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 			if (CmdFailed(ret)) return ret;
 			cost += ret;
 		}
@@ -801,10 +801,10 @@
  * - p2 = (bit  8-15) - custom station class
  * - p2 = (bit 16-23) - custom station id
  */
-int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2)
 {
 	int w_org, h_org;
-	int32 ret;
+	CommandCost ret;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -838,7 +838,7 @@
 	//  for detail info, see: https://sourceforge.net/tracker/index.php?func=detail&aid=1029064&group_id=103924&atid=636365
 	ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags & ~DC_EXEC, 5 << axis, _patches.nonuniform_stations ? &est : NULL);
 	if (CmdFailed(ret)) return ret;
-	int32 cost = ret + (numtracks * _eco->GetPrice(CEconomy::TRAIN_STATION_TRACK) + _eco->GetPrice(CEconomy::TRAIN_STATION_LENGTH)) * plat_len;
+	CommandCost cost = ret + (numtracks * _eco->GetPrice(CEconomy::TRAIN_STATION_TRACK) + _eco->GetPrice(CEconomy::TRAIN_STATION_LENGTH)) * plat_len;
 
 	Station *st = NULL;
 	bool check_surrounding = true;
@@ -1054,7 +1054,7 @@
  * @param p1 start_tile
  * @param p2 unused
  */
-int32 CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex start = p1 == 0 ? tile : p1;
 
@@ -1125,7 +1125,7 @@
 }
 
 
-static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
+static CommandCost RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
 {
 	/* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */
 	if (_current_player == OWNER_WATER && _patches.nonuniform_stations)
@@ -1142,7 +1142,7 @@
 
 	assert(w != 0 && h != 0);
 
-	int32 cost = 0;
+	CommandCost cost = 0;
 	/* clear all areas of the station */
 	do {
 		int w_bak = w;
@@ -1191,7 +1191,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
 {
 	const Station* st = GetStationByTile(tile);
 
@@ -1243,7 +1243,7 @@
  *           bit 2..4: the roadtypes
  *           bit 5: allow stations directly adjacent to other stations.
  */
-int32 CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	bool type = HASBIT(p2, 0);
 	bool is_drive_through = HASBIT(p2, 1);
@@ -1267,7 +1267,7 @@
 
 	if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) return CMD_ERROR;
 
-	int32 cost = 0;
+	CommandCost cost = 0;
 
 	/* Not allowed to build over this road */
 	if (build_over_road) {
@@ -1371,7 +1371,7 @@
 }
 
 // Remove a bus station
-static int32 RemoveRoadStop(Station *st, uint32 flags, TileIndex tile)
+static CommandCost RemoveRoadStop(Station *st, uint32 flags, TileIndex tile)
 {
 	if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) {
 		return CMD_ERROR;
@@ -1425,7 +1425,7 @@
  * @param p1 not used
  * @param p2 bit 0: 0 for Bus stops, 1 for truck stops
  */
-int32 CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Make sure the specified tile is a road stop of the correct type */
 	if (!IsTileType(tile, MP_STATION) || !IsRoadStop(tile) || (uint32)GetRoadStopType(tile) != p2) return CMD_ERROR;
@@ -1438,10 +1438,10 @@
 			DiagDirToRoadBits(GetRoadStopDir(tile));
 	bool is_towns_road = is_drive_through && GetStopBuiltOnTownRoad(tile);
 
-	int32 ret = RemoveRoadStop(st, flags, tile);
+	CommandCost ret = RemoveRoadStop(st, flags, tile);
 
 	/* If the stop was a drive-through stop replace the road */
-	if ((flags & DC_EXEC) && !CmdFailed(ret) && is_drive_through) {
+	if ((flags & DC_EXEC) && CmdSucceeded(ret) && is_drive_through) {
 		/* Rebuild the drive throuhg road stop. As a road stop can only be
 		 * removed by the owner of the roadstop, _current_player is the
 		 * owner of the road stop. */
@@ -1550,7 +1550,7 @@
  * @param p1 airport type, @see airport.h
  * @param p2 (bit 0) - allow airports directly adjacent to other airports.
  */
-int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	bool airport_upgrade = true;
 
@@ -1582,9 +1582,9 @@
 	int w = afc->size_x;
 	int h = afc->size_y;
 
-	int32 ret = CheckFlatLandBelow(tile, w, h, flags, 0, NULL);
+	CommandCost ret = CheckFlatLandBelow(tile, w, h, flags, 0, NULL);
 	if (CmdFailed(ret)) return ret;
-	int32 cost = ret;
+	CommandCost cost = ret;
 
 	Station *st = NULL;
 
@@ -1676,7 +1676,7 @@
 	return cost;
 }
 
-static int32 RemoveAirport(Station *st, uint32 flags)
+static CommandCost RemoveAirport(Station *st, uint32 flags)
 {
 	if (_current_player != OWNER_WATER && !CheckOwnership(st->owner))
 		return CMD_ERROR;
@@ -1687,7 +1687,7 @@
 	int w = afc->size_x;
 	int h = afc->size_y;
 
-	int32 cost = w * h * _eco->GetPrice(CEconomy::REMOVE_AIRPORT);
+	CommandCost cost = w * h * _eco->GetPrice(CEconomy::REMOVE_AIRPORT);
 
 	Vehicle *v;
 	FOR_ALL_VEHICLES(v) {
@@ -1730,7 +1730,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -1789,7 +1789,7 @@
 	return false;
 }
 
-static int32 RemoveBuoy(Station *st, uint32 flags)
+static CommandCost RemoveBuoy(Station *st, uint32 flags)
 {
 	/* XXX: strange stuff */
 	if (!IsValidPlayer(_current_player))  return_cmd_error(INVALID_STRING_ID);
@@ -1839,9 +1839,9 @@
  * @param p1 (bit 0) - allow docks directly adjacent to other docks.
  * @param p2 unused
  */
-int32 CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -1938,7 +1938,7 @@
 	return _eco->GetPrice(CEconomy::BUILD_DOCK);
 }
 
-static int32 RemoveDock(Station *st, uint32 flags)
+static CommandCost RemoveDock(Station *st, uint32 flags)
 {
 	if (!CheckOwnership(st->owner)) return CMD_ERROR;
 
@@ -2494,7 +2494,7 @@
  * @param p1 station ID that is to be renamed
  * @param p2 unused
  */
-int32 CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidStationID(p1) || _cmd_text[0] == '\0') return CMD_ERROR;
 	Station *st = GetStation(p1);
@@ -2748,7 +2748,7 @@
 				CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_TRAM), OWNER_TOWN, &edge_road, ROADTYPE_TRAM);
 }
 
-static int32 ClearTile_Station(TileIndex tile, byte flags)
+static CommandCost ClearTile_Station(TileIndex tile, byte flags)
 {
 	if (flags & DC_AUTO) {
 		switch (GetStationType(tile)) {
--- a/src/stdafx.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/stdafx.h	Tue Jun 19 07:21:01 2007 +0000
@@ -216,6 +216,7 @@
 /* Windows has always LITTLE_ENDIAN */
 #if defined(WIN32) || defined(__OS2__) || defined(WIN64)
 # define TTD_LITTLE_ENDIAN
+#elif defined(TESTING)
 #else
 /* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
 # if defined(STRGEN)
@@ -286,11 +287,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/strings.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/table/files.h	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/table/station_land.h	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/texteff.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/town_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -474,10 +474,10 @@
 	/* not used */
 }
 
-static int32 ClearTile_Town(TileIndex tile, byte flags)
+static CommandCost ClearTile_Town(TileIndex tile, byte flags)
 {
 	int rating;
-	int32 cost;
+	CommandCost cost;
 	Town *t;
 	HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
 
@@ -704,7 +704,7 @@
 			uint32 r = Random();
 
 			if (CHANCE16I(1, 8, r) && !_generating_world) {
-				int32 res;
+				CommandCost res;
 
 				if (CHANCE16I(1, 16, r)) {
 					res = DoCommand(tile, slope, 0, DC_EXEC | DC_AUTO | DC_NO_WATER,
@@ -726,7 +726,7 @@
 
 static bool TerraformTownTile(TileIndex tile, int edges, int dir)
 {
-	int32 r;
+	CommandCost r;
 
 	TILE_ASSERT(tile);
 
@@ -1059,7 +1059,7 @@
 
 		default:
 build_road_and_exit:
-			if (!CmdFailed(DoCommand(tile, rcmd, t1->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
+			if (CmdSucceeded(DoCommand(tile, rcmd, t1->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
 				_grow_town_result = -1;
 			}
 			return;
@@ -1092,7 +1092,7 @@
 		do {
 			byte bridge_type = RandomRange(MAX_BRIDGES - 1);
 			if (CheckBridge_Stuff(bridge_type, bridge_len)) {
-				if (!CmdFailed(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE)))
+				if (CmdSucceeded(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE)))
 					_grow_town_result = -1;
 
 				/* obviously, if building any bridge would fail, there is no need to try other bridge-types */
@@ -1231,7 +1231,7 @@
 	for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
 		/* Only work with plain land that not already has a house */
 		if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
-			if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
+			if (CmdSucceeded(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
 				DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
 				_current_player = old_player;
 				return true;
@@ -1476,7 +1476,7 @@
  * @param p1 size of the town (0 = small, 1 = medium, 2 = large)
  * @param p2 size mode (@see TownSizeMode)
  */
-int32 CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Town *t;
 	uint32 townnameparts;
@@ -1600,7 +1600,7 @@
 	if (b)
 		return false;
 
-	return !CmdFailed(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
+	return CmdSucceeded(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
 }
 
 
@@ -1665,7 +1665,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;
 				}
@@ -1674,7 +1674,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;
 
@@ -1685,7 +1685,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;
@@ -1767,7 +1767,7 @@
 
 static bool BuildTownHouse(Town *t, TileIndex tile)
 {
-	int32 r;
+	CommandCost r;
 
 	if (IsSteepSlope(GetTileSlope(tile, NULL))) return false;
 	if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return false;
@@ -1843,7 +1843,7 @@
  * @param p1 town ID to rename
  * @param p2 unused
  */
-int32 CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 	Town *t;
@@ -1929,7 +1929,7 @@
 static bool DoBuildStatueOfCompany(TileIndex tile, TownID town_id)
 {
 	PlayerID old;
-	int32 r;
+	CommandCost r;
 
 	if (GetTileSlope(tile, NULL) != SLOPE_FLAT) return false;
 
@@ -2047,9 +2047,9 @@
  * @param p1 town to do the action at
  * @param p2 action to perform, @see _town_action_proc for the list of available actions
  */
-int32 CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	Town *t;
 
 	if (!IsValidTownID(p1) || p2 > lengthof(_town_action_proc)) return CMD_ERROR;
--- a/src/train_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/train_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -502,12 +502,12 @@
 	DrawSprite(image, pal, x, y);
 }
 
-static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
+static CommandCost CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
 {
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 
 	const RailVehicleInfo *rvi = RailVehInfo(engine);
-	int32 value = (GetEngineProperty(engine, 0x17, rvi->base_cost) * _eco->GetPrice(CEconomy::BUILD_RAILWAGON)) >> 8;
+	CommandCost value = (GetEngineProperty(engine, 0x17, rvi->base_cost) * _eco->GetPrice(CEconomy::BUILD_RAILWAGON)) >> 8;
 
 	uint num_vehicles = 1 + CountArticulatedParts(engine);
 
@@ -611,7 +611,7 @@
 	}
 }
 
-static int32 EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
+static CommandCost EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
 {
 	return GetEngineProperty(engine, 0x17, rvi->base_cost) * (_eco->GetPrice(CEconomy::BUILD_RAILVEHICLE) >> 3) >> 5;
 }
@@ -651,7 +651,7 @@
  * @param p2 bit 0 when set, the train will get number 0, otherwise it will get a free number
  *           bit 1 prevents any free cars from being added to the train
  */
-int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check if the engine-type is valid (for the player) */
 	if (!IsEngineBuildable(p1, VEH_TRAIN, _current_player)) return_cmd_error(STR_RAIL_VEHICLE_NOT_AVAILABLE);
@@ -673,7 +673,7 @@
 
 	if (rvi->railveh_type == RAILVEH_WAGON) return CmdBuildRailWagon(p1, tile, flags);
 
-	int32 value = EstimateTrainCost(p1, rvi);
+	CommandCost value = EstimateTrainCost(p1, rvi);
 
 	uint num_vehicles =
 		(rvi->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1) +
@@ -909,7 +909,7 @@
  * - p1 (bit 16 - 31) what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line
  * @param p2 (bit 0) move all vehicles following the source vehicle
  */
-int32 CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleID s = GB(p1, 0, 16);
 	VehicleID d = GB(p1, 16, 16);
@@ -1162,7 +1162,7 @@
  * @param p1 train to start/stop
  * @param p2 unused
  */
-int32 CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1203,7 +1203,7 @@
  * - p2 = 2: when selling attached locos, rearrange all vehicles after it to separate lines;
  *           all wagons of the same type will go on the same line. Used by the AI currently
  */
-int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check if we deleted a vehicle window */
 	Window *w = NULL;
@@ -1235,7 +1235,7 @@
 		RebuildVehicleLists();
 	}
 
-	int32 cost = 0;
+	CommandCost cost = 0;
 	switch (p2) {
 		case 0: case 2: { /* Delete given wagon */
 			bool switch_engine = false;    // update second wagon to engine?
@@ -1616,7 +1616,7 @@
  * @param p1 train to reverse
  * @param p2 if true, reverse a unit in a train (needs to be in a depot)
  */
-int32 CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1665,7 +1665,7 @@
  * @param p1 train to ignore the red signal
  * @param p2 unused
  */
-int32 CmdForceTrainProceed(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdForceTrainProceed(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1688,7 +1688,7 @@
  * - p2 = (bit 16) - refit only this vehicle
  * @return cost of refit or error
  */
-int32 CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	CargoID new_cid = GB(p2, 0, 8);
 	byte new_subtype = GB(p2, 8, 8);
@@ -1706,7 +1706,7 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_TRAIN_RUN);
 
-	int32 cost = 0;
+	CommandCost cost = 0;
 	uint num = 0;
 
 	do {
@@ -1872,7 +1872,7 @@
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  */
-int32 CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (p2 & DEPOT_MASS_SEND) {
 		/* Mass goto depot requested */
@@ -2722,7 +2722,7 @@
 	tcc.v_skip = v->next;
 
 	/* find colliding vehicle */
-	Vehicle *realcoll = (Vehicle*)VehicleFromPos(TileVirtXY(v->x_pos, v->y_pos), &tcc, FindTrainCollideEnum);
+	Vehicle *realcoll = (Vehicle*)VehicleFromPosXY(v->x_pos, v->y_pos, &tcc, FindTrainCollideEnum);
 	if (realcoll == NULL) return;
 
 	Vehicle *coll = GetFirstVehicleInChain(realcoll);
@@ -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);
@@ -2775,6 +2775,8 @@
 
 	/* For every vehicle after and including the given vehicle */
 	for (prev = GetPrevVehicleInChain(v); v != NULL; prev = v, v = v->next) {
+		DiagDirection enterdir = DIAGDIR_BEGIN;
+		bool update_signals = false;
 		BeginVehicleMove(v);
 
 		GetNewVehiclePosResult gp = GetNewVehiclePos(v);
@@ -2810,7 +2812,7 @@
 
 				/* Determine what direction we're entering the new tile from */
 				Direction dir = GetNewVehicleDirectionByTile(gp.new_tile, gp.old_tile);
-				DiagDirection enterdir = DirToDiagDir(dir);
+				enterdir = DirToDiagDir(dir);
 				assert(IsValidDiagDirection(enterdir));
 
 				/* Get the status of the tracks in the new tile and mask
@@ -2917,11 +2919,9 @@
 					assert(v->u.rail.track);
 				}
 
-				if (IsFrontEngine(v)) TrainMovedChangeSignals(gp.new_tile, enterdir);
-
-				/* Signals can only change when the first
-				 * (above) or the last vehicle moves. */
-				if (v->next == NULL) TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir));
+				/* We need to update signal status, but after the vehicle position hash
+				 * has been updated by AfterSetTrainPos() */
+				update_signals = true;
 
 				if (prev == NULL) AffectSpeedByDirChange(v, chosen_dir);
 
@@ -2958,6 +2958,14 @@
 			/* This is the first vehicle in the train */
 			AffectSpeedByZChange(v, old_z);
 		}
+
+		if (update_signals) {
+			if (IsFrontEngine(v)) TrainMovedChangeSignals(gp.new_tile, enterdir);
+
+			/* Signals can only change when the first
+			 * (above) or the last vehicle moves. */
+			if (v->next == NULL) TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir));
+		}
 	}
 	return;
 
@@ -3387,7 +3395,7 @@
 
 		if ((v->vehstatus & VS_STOPPED) == 0) {
 			/* running costs */
-			int32 cost = GetTrainRunningCost(v) / 364;
+			CommandCost cost = GetTrainRunningCost(v) / 364;
 
 			v->profit_this_year -= cost >> 8;
 
--- a/src/tree_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/tree_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -213,10 +213,10 @@
  * @param p1 tree type, -1 means random.
  * @param p2 end tile of area-drag
  */
-int32 CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID msg = INVALID_STRING_ID;
-	int32 cost;
+	CommandCost cost;
 	int ex;
 	int ey;
 	int sx, sy, x, y;
@@ -428,7 +428,7 @@
 	return tileh;
 }
 
-static int32 ClearTile_Trees(TileIndex tile, byte flags)
+static CommandCost ClearTile_Trees(TileIndex tile, byte flags)
 {
 	uint num;
 
--- a/src/tunnelbridge_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -110,7 +110,7 @@
  * - rest is invalid
  */
 #define M(x) (1 << (x))
-static int32 CheckBridgeSlopeNorth(Axis axis, Slope tileh)
+static CommandCost CheckBridgeSlopeNorth(Axis axis, Slope tileh)
 {
 	uint32 valid;
 
@@ -125,7 +125,7 @@
 	return CMD_ERROR;
 }
 
-static int32 CheckBridgeSlopeSouth(Axis axis, Slope tileh)
+static CommandCost CheckBridgeSlopeSouth(Axis axis, Slope tileh)
 {
 	uint32 valid;
 
@@ -175,7 +175,7 @@
  * - p2 = (bit 8-..) - rail type or road types.
  * - p2 = (bit 15  ) - set means road bridge.
  */
-int32 CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	uint bridge_type;
 	RailType railtype;
@@ -194,7 +194,7 @@
 	TileIndexDiff delta;
 	uint bridge_len;
 	Axis direction;
-	int32 cost, terraformcost, ret;
+	CommandCost cost, terraformcost, ret;
 	bool allow_on_slopes;
 	bool replace_bridge = false;
 	uint replaced_bridge_type;
@@ -453,7 +453,7 @@
  * @param p1 railtype or roadtypes. bit 9 set means road tunnel
  * @param p2 unused
  */
-int32 CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndexDiff delta;
 	TileIndex end_tile;
@@ -462,8 +462,8 @@
 	Slope end_tileh;
 	uint start_z;
 	uint end_z;
-	int32 cost;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 
 	_build_tunnel_endtile = 0;
 	if (!HASBIT(p1, 9)) {
@@ -578,7 +578,7 @@
 	return false;
 }
 
-static int32 DoClearTunnel(TileIndex tile, uint32 flags)
+static CommandCost DoClearTunnel(TileIndex tile, uint32 flags)
 {
 	Town *t = NULL;
 	TileIndex endtile;
@@ -638,7 +638,7 @@
 	return false;
 }
 
-static int32 DoClearBridge(TileIndex tile, uint32 flags)
+static CommandCost DoClearBridge(TileIndex tile, uint32 flags)
 {
 	DiagDirection direction;
 	TileIndexDiff delta;
@@ -698,7 +698,7 @@
 	return (DistanceManhattan(tile, endtile) + 1) * _eco->GetPrice(CEconomy::CLEAR_BRIDGE);
 }
 
-static int32 ClearTile_TunnelBridge(TileIndex tile, byte flags)
+static CommandCost ClearTile_TunnelBridge(TileIndex tile, byte flags)
 {
 	if (IsTunnel(tile)) {
 		if (flags & DC_AUTO) return_cmd_error(STR_5006_MUST_DEMOLISH_TUNNEL_FIRST);
@@ -721,7 +721,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
 {
 	TileIndex endtile;
 
--- a/src/unmovable_cmd.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/unmovable_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -31,7 +31,7 @@
  * @param flags docommand flags of calling function
  * @return cost of the operation
  */
-static int32 DestroyCompanyHQ(PlayerID pid, uint32 flags)
+static CommandCost DestroyCompanyHQ(PlayerID pid, uint32 flags)
 {
 	Player* p = GetPlayer(pid);
 
@@ -73,7 +73,7 @@
 	MarkTileDirtyByTile(tile + TileDiffXY(1, 1));
 }
 
-extern int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true);
+extern CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true);
 
 /** Build or relocate the HQ. This depends if the HQ is already built or not
  * @param tile tile where the HQ will be built or relocated to
@@ -81,11 +81,11 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p = GetPlayer(_current_player);
-	int cost;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 
 	SET_EXPENSES_TYPE(EXPENSES_PROPERTY);
 
@@ -216,7 +216,7 @@
 	return IsOwnedLand(tile) ? tileh : SLOPE_FLAT;
 }
 
-static int32 ClearTile_Unmovable(TileIndex tile, byte flags)
+static CommandCost ClearTile_Unmovable(TileIndex tile, byte flags)
 {
 	if (IsCompanyHQ(tile)) {
 		if (_current_player == OWNER_WATER) {
--- a/src/variables.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/variables.h	Tue Jun 19 07:21:01 2007 +0000
@@ -261,21 +261,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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/vehicle.cpp	Tue Jun 19 07:21:01 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))
 
 
@@ -394,44 +394,117 @@
 	return true;
 }
 
-
-static Vehicle *_vehicle_position_hash[0x1000];
+/* Size of the hash, 6 = 64 x 64, 7 = 128 x 128. Larger sizes will (in theory) reduce hash
+ * lookup times at the expense of memory usage. */
+const int HASH_BITS = 7;
+const int HASH_SIZE = 1 << HASH_BITS;
+const int HASH_MASK = HASH_SIZE - 1;
+const int TOTAL_HASH_SIZE = 1 << (HASH_BITS * 2);
+const int TOTAL_HASH_MASK = TOTAL_HASH_SIZE - 1;
+
+/* Resolution of the hash, 0 = 1*1 tile, 1 = 2*2 tiles, 2 = 4*4 tiles, etc.
+ * Profiling results show that 0 is fastest. */
+const int HASH_RES = 0;
+
+static Vehicle *_new_vehicle_position_hash[TOTAL_HASH_SIZE];
+
+static void *VehicleFromHash(int xl, int yl, int xu, int yu, void *data, VehicleFromPosProc *proc)
+{
+	for (int y = yl; ; y = (y + (1 << HASH_BITS)) & (HASH_MASK << HASH_BITS)) {
+		for (int x = xl; ; x = (x + 1) & HASH_MASK) {
+			Vehicle *v = _new_vehicle_position_hash[(x + y) & TOTAL_HASH_MASK];
+			for (; v != NULL; v = v->next_new_hash) {
+				void *a = proc(v, data);
+				if (a != NULL) return a;
+			}
+			if (x == xu) break;
+		}
+		if (y == yu) break;
+	}
+
+	return NULL;
+}
+
+
+void *VehicleFromPosXY(int x, int y, void *data, VehicleFromPosProc *proc)
+{
+	const int COLL_DIST = 6;
+
+	/* Hash area to scan is from xl,yl to xu,yu */
+	int xl = GB((x - COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS);
+	int xu = GB((x + COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS);
+	int yl = GB((y - COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS) << HASH_BITS;
+	int yu = GB((y + COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS) << HASH_BITS;
+
+	return VehicleFromHash(xl, yl, xu, yu, data, proc);
+}
+
 
 void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc)
 {
-	Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, 0);
-
-	/* The hash area to scan */
-	const int xl = GB(pt.x - 174, 7, 6);
-	const int xu = GB(pt.x + 104, 7, 6);
-	const int yl = GB(pt.y - 294, 6, 6) << 6;
-	const int yu = GB(pt.y +  56, 6, 6) << 6;
-
-	int x;
-	int y;
-
-	for (y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) {
-		for (x = xl;; x = (x + 1) & 0x3F) {
-			Vehicle *v = _vehicle_position_hash[(x + y) & 0xFFFF];
-
-			while (v != NULL) {
-				void* a = proc(v, data);
-
-				if (a != NULL) return a;
-				v = v->next_hash;
-			}
-
-			if (x == xu) break;
-		}
-
-		if (y == yu) break;
+	int x = GB(TileX(tile), HASH_RES, HASH_BITS);
+	int y = GB(TileY(tile), HASH_RES, HASH_BITS) << HASH_BITS;
+
+	Vehicle *v = _new_vehicle_position_hash[(x + y) & TOTAL_HASH_MASK];
+	for (; v != NULL; v = v->next_new_hash) {
+		if (v->tile != tile) continue;
+
+		void *a = proc(v, data);
+		if (a != NULL) return a;
 	}
+
 	return NULL;
 }
 
+static void UpdateNewVehiclePosHash(Vehicle *v, bool remove)
+{
+	Vehicle **old_hash = v->old_new_hash;
+	Vehicle **new_hash;
+
+	if (remove) {
+		new_hash = NULL;
+	} else {
+		int x = GB(TileX(v->tile), HASH_RES, HASH_BITS);
+		int y = GB(TileY(v->tile), HASH_RES, HASH_BITS) << HASH_BITS;
+		new_hash = &_new_vehicle_position_hash[(x + y) & TOTAL_HASH_MASK];
+	}
+
+	if (old_hash == new_hash) return;
+
+	/* Remove from the old position in the hash table */
+	if (old_hash != NULL) {
+		Vehicle *last = NULL;
+		Vehicle *u = *old_hash;
+		while (u != v) {
+			last = u;
+			u = u->next_new_hash;
+			assert(u != NULL);
+		}
+
+		if (last == NULL) {
+			*old_hash = v->next_new_hash;
+		} else {
+			last->next_new_hash = v->next_new_hash;
+		}
+	}
+
+	/* Insert vehicle at beginning of the new position in the hash table */
+	if (new_hash != NULL) {
+		v->next_new_hash = *new_hash;
+		*new_hash = v;
+		assert(v != v->next_new_hash);
+	}
+
+	/* Remember current hash position */
+	v->old_new_hash = new_hash;
+}
+
+static Vehicle *_vehicle_position_hash[0x1000];
 
 static void UpdateVehiclePosHash(Vehicle* v, int x, int y)
 {
+	UpdateNewVehiclePosHash(v, x == INVALID_COORD);
+
 	Vehicle **old_hash, **new_hash;
 	int old_x = v->left_coord;
 	int old_y = v->top_coord;
@@ -467,7 +540,10 @@
 
 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));
 }
 
 void InitializeVehicles()
@@ -613,6 +689,7 @@
 
 	UpdateVehiclePosHash(v, INVALID_COORD, 0);
 	v->next_hash = NULL;
+	v->next_new_hash = NULL;
 	if (IsPlayerBuildableVehicleType(v)) DeleteVehicleOrders(v);
 
 	/* Now remove any artic part. This will trigger an other
@@ -768,9 +845,9 @@
 * @param engine_type Which engine to refit
 * @return Price for refitting
 */
-int32 GetRefitCost(EngineID engine_type)
+CommandCost GetRefitCost(EngineID engine_type)
 {
-	int32 base_cost = 0;
+	CommandCost base_cost = 0;
 
 	switch (GetEngine(engine_type)->type) {
 		case VEH_SHIP: base_cost = _eco->GetPrice(CEconomy::SHIP_BASE); break;
@@ -812,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) &&
@@ -1590,12 +1679,12 @@
  *   - bit 6 if set, then it's a vehicle list window, not a depot and Tile is ignored in this case
  *   - bit 8-11 Vehicle List Window type (ignored unless bit 1 is set)
  */
-int32 CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **vl = NULL;
 	uint16 engine_list_length = 0;
 	uint16 engine_count = 0;
-	int32 return_value = CMD_ERROR;
+	CommandCost return_value = CMD_ERROR;
 	uint i;
 	uint stop_command;
 	VehicleType vehicle_type = (VehicleType)GB(p2, 0, 5);
@@ -1622,7 +1711,7 @@
 
 	for (i = 0; i < engine_count; i++) {
 		const Vehicle *v = vl[i];
-		int32 ret;
+		CommandCost ret;
 
 		if (!!(v->vehstatus & VS_STOPPED) != start_stop) continue;
 
@@ -1636,7 +1725,7 @@
 
 		ret = DoCommand(tile, v->index, 0, flags, stop_command);
 
-		if (!CmdFailed(ret)) {
+		if (CmdSucceeded(ret)) {
 			return_value = 0;
 			/* We know that the command is valid for at least one vehicle.
 			 * If we haven't set DC_EXEC, then there is no point in continueing because it will be valid */
@@ -1654,7 +1743,7 @@
  * @param p1 Vehicle type
  * @param p2 unused
  */
-int32 CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **engines = NULL;
 	Vehicle **wagons = NULL;
@@ -1663,7 +1752,7 @@
 	uint16 wagon_list_length = 0;
 	uint16 wagon_count = 0;
 
-	int32 cost = 0;
+	CommandCost cost = 0;
 	uint i, sell_command, total_number_vehicles;
 	VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
 
@@ -1682,7 +1771,7 @@
 	total_number_vehicles = engine_count + wagon_count;
 	for (i = 0; i < total_number_vehicles; i++) {
 		const Vehicle *v;
-		int32 ret;
+		CommandCost ret;
 
 		if (i < engine_count) {
 			v = engines[i];
@@ -1692,7 +1781,7 @@
 
 		ret = DoCommand(tile, v->index, 1, flags, sell_command);
 
-		if (!CmdFailed(ret)) cost += ret;
+		if (CmdSucceeded(ret)) cost += ret;
 	}
 
 	free(engines);
@@ -1707,13 +1796,13 @@
  * @param p1 Type of vehicle
  * @param p2 Unused
  */
-int32 CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **vl = NULL;
 	uint16 engine_list_length = 0;
 	uint16 engine_count = 0;
 	uint i, x = 0, y = 0, z = 0;
-	int32 cost = 0;
+	CommandCost cost = 0;
 	VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
 
 	if (!IsTileOwner(tile, _current_player)) return CMD_ERROR;
@@ -1725,7 +1814,7 @@
 	for (i = 0; i < engine_count; i++) {
 		Vehicle *v = vl[i];
 		bool stopped = !(v->vehstatus & VS_STOPPED);
-		int32 ret;
+		CommandCost ret;
 
 		/* Ensure that the vehicle completely in the depot */
 		if (!IsVehicleInDepot(v)) continue;
@@ -1740,7 +1829,7 @@
 		}
 		ret = MaybeReplaceVehicle(v, !(flags & DC_EXEC), false);
 
-		if (!CmdFailed(ret)) {
+		if (CmdSucceeded(ret)) {
 			cost += ret;
 			if (!(flags & DC_EXEC)) break;
 			/* There is a problem with autoreplace and newgrf
@@ -1773,11 +1862,11 @@
  * @param p1 the original vehicle's index
  * @param p2 1 = shared orders, else copied orders
  */
-int32 CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v_front, *v;
 	Vehicle *w_front, *w, *w_rear;
-	int32 cost, total_cost = 0;
+	CommandCost cost, total_cost = 0;
 	uint32 build_argument = 2;
 
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1837,7 +1926,7 @@
 			if (v->type == VEH_TRAIN && !IsFrontEngine(v)) {
 				/* this s a train car
 				 * add this unit to the end of the train */
-				int32 result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
+				CommandCost result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
 				if (CmdFailed(result)) {
 					/* The train can't be joined to make the same consist as the original.
 					 * Sell what we already made (clean up) and return an error.           */
@@ -1883,7 +1972,7 @@
 
 				if (w->cargo_type != v->cargo_type || w->cargo_subtype != v->cargo_type) {
 					cost = DoCommand(0, w->index, v->cargo_type | (v->cargo_subtype << 8) | 1U << 16 , flags, GetCmdRefitVeh(v));
-					if (!CmdFailed(cost)) total_cost += cost;
+					if (CmdSucceeded(cost)) total_cost += cost;
 				}
 
 				if (w->type == VEH_TRAIN && EngineHasArticPart(w)) {
@@ -2134,7 +2223,7 @@
  * @param vlw_flag tells what kind of list requested the goto depot
  * @return 0 for success and CMD_ERROR if no vehicle is able to go to depot
  */
-int32 SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
+CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
 {
 	const Vehicle **sort_list = NULL;
 	uint n, i;
@@ -2145,13 +2234,13 @@
 	/* Send all the vehicles to a depot */
 	for (i = 0; i < n; i++) {
 		const Vehicle *v = sort_list[i];
-		int32 ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type));
+		CommandCost ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type));
 
 		/* Return 0 if DC_EXEC is not set this is a valid goto depot command)
 			* In this case we know that at least one vehicle can be sent to a depot
 			* and we will issue the command. We can now safely quit the loop, knowing
 			* it will succeed at least once. With DC_EXEC we really need to send them to the depot */
-		if (!CmdFailed(ret) && !(flags & DC_EXEC)) {
+		if (CmdSucceeded(ret) && !(flags & DC_EXEC)) {
 			free((void*)sort_list);
 			return 0;
 		}
@@ -2225,7 +2314,7 @@
 		v->current_order.flags = 0;
 
 		if (t.refit_cargo < NUM_CARGO) {
-			int32 cost;
+			CommandCost cost;
 
 			_current_player = v->owner;
 			cost = DoCommand(v->tile, v->index, t.refit_cargo | t.refit_subtype << 8, DC_EXEC, GetCmdRefitVeh(v));
@@ -2273,7 +2362,7 @@
  * @param p1 vehicle ID to name
  * @param p2 unused
  */
-int32 CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	StringID str;
@@ -2307,7 +2396,7 @@
  * @param p1 vehicle ID that is being service-interval-changed
  * @param p2 new service interval
  */
-int32 CmdChangeServiceInt(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeServiceInt(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle* v;
 	uint16 serv_int = GetServiceIntervalClamped(p2); /* Double check the service interval from the user-input */
--- a/src/vehicle.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/vehicle.h	Tue Jun 19 07:21:01 2007 +0000
@@ -290,6 +290,8 @@
 	int32 right_coord;
 	int32 bottom_coord;
 	Vehicle *next_hash;
+	Vehicle *next_new_hash;
+	Vehicle **old_new_hash;
 
 	/* Related to age and service time */
 	Date age;     // Age in days
@@ -497,6 +499,7 @@
 bool IsEngineCountable(const Vehicle *v);
 void DeleteVehicleChain(Vehicle *v);
 void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
+void *VehicleFromPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
 void CallVehicleTicks();
 Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z);
 
@@ -506,7 +509,7 @@
 
 bool CanRefitTo(EngineID engine_type, CargoID cid_to);
 CargoID FindFirstRefittableCargo(EngineID engine_type);
-int32 GetRefitCost(EngineID engine_type);
+CommandCost GetRefitCost(EngineID engine_type);
 
 void ViewportAddVehicles(DrawPixelInfo *dpi);
 
@@ -553,13 +556,13 @@
 
 uint GenerateVehicleSortList(const Vehicle*** sort_list, uint16 *length_of_array, VehicleType type, PlayerID owner, uint32 index, uint16 window_type);
 void BuildDepotVehicleList(VehicleType type, TileIndex tile, Vehicle ***engine_list, uint16 *engine_list_length, uint16 *engine_count, Vehicle ***wagon_list, uint16 *wagon_list_length, uint16 *wagon_count);
-int32 SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
+CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
 bool IsVehicleInDepot(const Vehicle *v);
 void VehicleEnterDepot(Vehicle *v);
 
 void InvalidateAutoreplaceWindow(EngineID e);
 
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
 
 /* Flags to add to p2 for goto depot commands */
 /* Note: bits 8-10 are used for VLW flags */
--- a/src/vehicle_gui.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/vehicle_gui.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -338,12 +338,12 @@
 			WP(w, refit_d).cargo = DrawVehicleRefitWindow(WP(w, refit_d).list, WP(w, refit_d).sel, w->vscroll.pos, w->vscroll.cap, w->resize.step_height);
 
 			if (WP(w, refit_d).cargo != NULL) {
-				int32 cost;
+				CommandCost cost;
 
 				cost = DoCommand(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8,
 								 DC_QUERY_COST, GetCmdRefitVeh(GetVehicle(w->window_number)->type));
 
-				if (!CmdFailed(cost)) {
+				if (CmdSucceeded(cost)) {
 					SetDParam(0, WP(w, refit_d).cargo->cargo);
 					SetDParam(1, _returned_refit_capacity);
 					SetDParam(2, cost);
--- a/src/video/cocoa_v.mm	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/video/cocoa_v.mm	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/video/dedicated_v.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/video/null_v.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/video/sdl_v.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/video/win32_v.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/viewport.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/water_cmd.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -56,11 +56,11 @@
  * @param p1 bit 0 depot orientation (Axis)
  * @param p2 unused
  */
-int32 CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex tile2;
 
-	int32 cost, ret;
+	CommandCost cost, ret;
 	Depot *depot;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -101,7 +101,7 @@
 	return cost + _eco->GetPrice(CEconomy::BUILD_SHIP_DEPOT);
 }
 
-static int32 RemoveShipDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveShipDepot(TileIndex tile, uint32 flags)
 {
 	TileIndex tile2;
 
@@ -127,9 +127,9 @@
 }
 
 /** build a shiplift */
-static int32 DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
+static CommandCost DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
 {
-	int32 ret;
+	CommandCost ret;
 	int delta;
 
 	/* middle tile */
@@ -167,7 +167,7 @@
 	return _eco->GetPrice(CEconomy::CLEAR_WATER) * 22 >> 3;
 }
 
-static int32 RemoveShiplift(TileIndex tile, uint32 flags)
+static CommandCost RemoveShiplift(TileIndex tile, uint32 flags)
 {
 	TileIndexDiff delta = TileOffsByDiagDir(GetLockDirection(tile));
 
@@ -200,7 +200,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	DiagDirection dir;
 
@@ -222,9 +222,9 @@
  * @param p1 start tile of stretch-dragging
  * @param p2 ctrl pressed - toggles ocean / canals at sealevel (ocean only allowed in the scenario editor)
  */
-int32 CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	int size_x, size_y;
 	int x;
 	int y;
@@ -251,7 +251,7 @@
 
 	cost = 0;
 	BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
-		int32 ret;
+		CommandCost ret;
 
 		if (GetTileSlope(tile, NULL) != SLOPE_FLAT) {
 			return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
@@ -284,7 +284,7 @@
 	}
 }
 
-static int32 ClearTile_Water(TileIndex tile, byte flags)
+static CommandCost ClearTile_Water(TileIndex tile, byte flags)
 {
 	switch (GetWaterTileType(tile)) {
 		case WATER_TILE_CLEAR:
@@ -588,7 +588,7 @@
 			case MP_CLEAR:
 			case MP_TREES:
 				_current_player = OWNER_WATER;
-				if (!CmdFailed(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
+				if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
 					MakeShore(target);
 					MarkTileDirtyByTile(target);
 				}
@@ -603,7 +603,7 @@
 		Vehicle *v = FindFloodableVehicleOnTile(target);
 		if (v != NULL) FloodVehicle(v);
 
-		if (!CmdFailed(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
+		if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
 			MakeWater(target);
 			MarkTileDirtyByTile(target);
 		}
@@ -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/waypoint.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/waypoint.cpp	Tue Jun 19 07:21:01 2007 +0000
@@ -201,7 +201,7 @@
  * @todo When checking for the tile slope,
  * distingush between "Flat land required" and "land sloped in wrong direction"
  */
-int32 CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Waypoint *wp;
 	Slope tileh;
@@ -295,7 +295,7 @@
  * @param justremove will indicate if it is removed from rail or if rails are removed too
  * @return cost of operation or error
  */
-int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
+CommandCost RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
 {
 	Waypoint *wp;
 
@@ -335,7 +335,7 @@
  * @param p2 unused
  * @return cost of operation or error
  */
-int32 CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 	return RemoveTrainWaypoint(tile, flags, true);
@@ -349,7 +349,7 @@
  * @param p2 unused
  * @return cost of operation or error
  */
-int32 CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Waypoint *wp;
 
--- a/src/waypoint.h	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/waypoint.h	Tue Jun 19 07:21:01 2007 +0000
@@ -66,7 +66,7 @@
 	return GetWaypoint(GetWaypointIndex(tile));
 }
 
-int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
+CommandCost RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
 Station *ComposeWaypointStation(TileIndex tile);
 void ShowRenameWaypointWindow(const Waypoint *cp);
 void DrawWaypointSprite(int x, int y, int image, RailType railtype);
--- a/src/win32.cpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/win32.cpp	Tue Jun 19 07:21:01 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	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/window.cpp	Tue Jun 19 07:21:01 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);
 	}
--- a/src/yapf/yapf_costrail.hpp	Wed Jun 13 12:05:56 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp	Tue Jun 19 07:21:01 2007 +0000
@@ -195,6 +195,7 @@
 		RailType rail_type = GetTileRailType(tile);
 
 		bool target_seen = Yapf().PfDetectDestination(tile, trackdir);
+		bool end_by_target_seen = false;
 
 		if (tf.m_is_station) {
 			// station tiles have an extra penalty
@@ -212,6 +213,7 @@
 
 			// finish if we have reached the destination
 			if (target_seen) {
+				end_by_target_seen = true;
 				break;
 			}
 
@@ -342,7 +344,7 @@
 		}
 
 		// special costs for the case we have reached our target
-		if (target_seen) {
+		if (end_by_target_seen) {
 			n.flags_u.flags_s.m_targed_seen = true;
 			if (n.flags_u.flags_s.m_last_signal_was_red) {
 				if (n.m_last_red_signal_type == SIGTYPE_EXIT) {
@@ -358,7 +360,7 @@
 		// total node cost
 		n.m_cost = parent_cost + first_tile_cost + segment_cost + extra_cost;
 
-		return !n.m_segment->flags_u.flags_s.m_end_of_line;
+		return !n.m_segment->flags_u.flags_s.m_end_of_line || end_by_target_seen;
 	}
 
 	FORCEINLINE bool CanUseGlobalCache(Node& n) const