(svn r9708) [cpp_gui] -Sync with trunk (r9633:9707) cpp_gui
authorKUDr
Sat, 21 Apr 2007 08:23:57 +0000
branchcpp_gui
changeset 6308 646711c5feaa
parent 6307 f40e88cff863
(svn r9708) [cpp_gui] -Sync with trunk (r9633:9707)
changelog.txt
config.lib
docs/openttd.6
known-bugs.txt
os/debian/changelog
os/win32/installer/install.nsi
readme.txt
src/ai/ai.h
src/ai/default/default.cpp
src/ai/trolly/build.cpp
src/ai/trolly/trolly.cpp
src/aircraft.h
src/aircraft_cmd.cpp
src/airport_gui.cpp
src/autoreplace_cmd.cpp
src/build_vehicle_gui.cpp
src/clear_cmd.cpp
src/command.cpp
src/command.h
src/depot_gui.cpp
src/disaster_cmd.cpp
src/dock_gui.cpp
src/economy.cpp
src/engine.cpp
src/engine.h
src/fios.cpp
src/genworld_gui.cpp
src/gfx.cpp
src/graph_gui.cpp
src/helpers.cpp
src/industry.h
src/industry_cmd.cpp
src/industry_gui.cpp
src/landscape.cpp
src/lang/brazilian_portuguese.txt
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/czech.txt
src/lang/danish.txt
src/lang/dutch.txt
src/lang/english.txt
src/lang/esperanto.txt
src/lang/estonian.txt
src/lang/finnish.txt
src/lang/french.txt
src/lang/german.txt
src/lang/hungarian.txt
src/lang/italian.txt
src/lang/japanese.txt
src/lang/korean.txt
src/lang/norwegian_bokmal.txt
src/lang/polish.txt
src/lang/romanian.txt
src/lang/russian.txt
src/lang/simplified_chinese.txt
src/lang/slovak.txt
src/lang/slovenian.txt
src/lang/spanish.txt
src/lang/swedish.txt
src/lang/traditional_chinese.txt
src/lang/turkish.txt
src/lang/ukrainian.txt
src/macros.h
src/main_gui.cpp
src/map.cpp
src/map.h
src/misc.cpp
src/misc/array.hpp
src/misc/autocopyptr.hpp
src/misc/autoptr.hpp
src/misc/binaryheap.hpp
src/misc/blob.hpp
src/misc/countedptr.hpp
src/misc/crc32.hpp
src/misc/fixedsizearray.hpp
src/misc/hashtable.hpp
src/misc_cmd.cpp
src/misc_gui.cpp
src/music/bemidi.cpp
src/music/dmusic.cpp
src/music_gui.cpp
src/namegen.cpp
src/network/core/os_abstraction.h
src/network/network_client.cpp
src/network/network_gui.cpp
src/network/network_udp.cpp
src/newgrf.cpp
src/newgrf_callbacks.h
src/newgrf_config.cpp
src/newgrf_engine.cpp
src/newgrf_engine.h
src/newgrf_gui.cpp
src/newgrf_spritegroup.cpp
src/newgrf_spritegroup.h
src/newgrf_station.cpp
src/newgrf_text.cpp
src/newgrf_town.cpp
src/news.h
src/news_gui.cpp
src/oldloader.cpp
src/openttd.cpp
src/openttd.h
src/order_cmd.cpp
src/order_gui.cpp
src/os2.cpp
src/pathfind.cpp
src/player_gui.cpp
src/players.cpp
src/rail.cpp
src/rail_cmd.cpp
src/road_cmd.cpp
src/road_gui.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/ship_gui.cpp
src/signs.cpp
src/smallmap_gui.cpp
src/spritecache.cpp
src/station.cpp
src/station.h
src/station_cmd.cpp
src/station_map.cpp
src/stdafx.h
src/strgen/strgen.cpp
src/strings.cpp
src/table/ai_rail.h
src/table/build_industry.h
src/table/engines.h
src/table/industry_land.h
src/table/namegen.h
src/table/palettes.h
src/table/sprites.h
src/table/station_land.h
src/table/town_land.h
src/table/tree_land.h
src/terraform_gui.cpp
src/texteff.cpp
src/town.h
src/town_cmd.cpp
src/train_cmd.cpp
src/train_gui.cpp
src/transparency_gui.cpp
src/tree_cmd.cpp
src/tunnel_map.cpp
src/tunnelbridge_cmd.cpp
src/unmovable_cmd.cpp
src/unmovable_map.h
src/variables.h
src/vehicle.cpp
src/vehicle.h
src/vehicle_gui.cpp
src/video/win32_v.cpp
src/viewport.cpp
src/void_map.h
src/water_cmd.cpp
src/widget.cpp
src/win32.cpp
src/window.cpp
src/yapf/yapf.h
src/yapf/yapf_base.hpp
src/yapf/yapf_rail.cpp
src/yapf/yapf_road.cpp
src/yapf/yapf_ship.cpp
--- a/changelog.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/changelog.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -1,3 +1,22 @@
+0.5.1 (2007-04-20)
+------------------------------------------------------------------------
+(None)
+
+0.5.1-RC3 (2007-04-17)
+------------------------------------------------------------------------
+- Feature: Add list_patches to console commands; shows all patches and values (r9565)
+- Fix: Select "Custom" in the difficulty settings gui when changing a setting [FS#733] (r9647)
+- Fix: Building rail on steep slopes ignored build_on_slopes patch setting (r9602)
+- Fix: Wrong characters in Finnish town names (r9641)
+- Fix: When checking for no vehicle on ground-tiles, do not take into account vehicles that are in the air (r9542)
+- Fix: Bankrupt AIs no longer buy over themselves (also added safeguards to prevent in future) (r9540 / r9541)
+- Fix: When company is removed, sell all shares of the and in the company (r9533)
+- Fix: Crash when 2 or more clients joined at roughly the same time (r9529)
+- Fix: Custom currency was overwritten and fix euro introduction (r9467, r9469)
+- Fix: Values of diff_custom and snow_line in .cfg were not checked properly (r9455)
+- Fix: When deleting a vehicle which has shared orders with one more vehicle and no orders, segfaulted (r9429)
+
+
 0.5.1-RC2 (2007-03-23)
 ------------------------------------------------------------------------
 - Fix: crashes when the chatbox would be drawn outside of the main window [FS#701] (r9420)
@@ -1337,7 +1356,6 @@
 
 0.2.1 (2004-04-04)
 ------------------------------------------------------------------------
-
 - Fix: copy orders crashed if you clicked on a wagon
 - Feature: 'A' hotkey now always opens autorail
 - Change: Moved autorail button
@@ -1350,7 +1368,6 @@
 
 0.2 (2004-04-03)
 ------------------------------------------------------------------------
-
 - Feature: autoscroll (only works to left/right)
 - Feature: train checkpoints, instead of ttdpatch's nonstop handling
 - Feature: ttdpatch compatible nonstop handling
@@ -1411,7 +1428,6 @@
 
 0.1.4 (2004-03-25)
 ------------------------------------------------------------------------
-
 - Feature: crash submit system on win32
 - Fix: train smoke clouds
 - Fix: train engine sounds
@@ -1452,7 +1468,6 @@
 
 0.1.3 (2004-03-18)
 ------------------------------------------------------------------------
-
 - Fixed message options window
 - Fixed company takeover/purchase
 - Feature: Improved mouse scroll zooming
@@ -1476,7 +1491,6 @@
 
 0.1.2 (2004-03-15)
 ------------------------------------------------------------------------
-
 - Mouse wheel can be used to zoom in out on win32 (ludde)
 - Implemented some support for resizing the window dynamically in win32 (ludde)
 - Fixed tunnel mouse icon for maglev and monorail
@@ -1484,7 +1498,6 @@
 
 0.1.1 (2004-03-14)
 ------------------------------------------------------------------------
-
 - Preliminary presignal support
 - Added external MIDI driver for unix version (by robertnorris)
 - Added DirectMusic driver for Win32 version
--- a/config.lib	Sun Apr 15 17:04:44 2007 +0000
+++ b/config.lib	Sat Apr 21 08:23:57 2007 +0000
@@ -237,9 +237,9 @@
 			--with-osx-sysroot)           with_osx_sysroot="2";;
 			--with-osx-sysroot=*)         with_osx_sysroot="$optarg";;
 
-			--without-application-bundle) with_applicant_bundle="0";;
-			--with-application-bundle)    with_applicant_bundle="1";;
-			--with-application-bundle=*)  with_applicant_bundle="$optarg";;
+			--without-application-bundle) with_application_bundle="0";;
+			--with-application-bundle)    with_application_bundle="1";;
+			--with-application-bundle=*)  with_application_bundle="$optarg";;
 
 			CC=* | --CC=*)                CC="$optarg";;
 			CXX=* | --CXX=*)              CXX="$optarg";;
--- a/docs/openttd.6	Sun Apr 15 17:04:44 2007 +0000
+++ b/docs/openttd.6	Sat Apr 21 08:23:57 2007 +0000
@@ -1,6 +1,6 @@
 .\"                                      Hey, EMACS: -*- nroff -*-
 .\" Please adjust this date whenever revising the manpage.
-.Dd March 23, 2007
+.Dd April 20, 2007
 .Dt OPENTTD 6
 .Sh NAME
 .Nm openttd
--- a/known-bugs.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/known-bugs.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -19,20 +19,21 @@
 ------------------------------------------------------------------------
 URL: http://bugs.openttd.org
 
--677 	Badspacing in news summaries
--674 	Map signs allow less nonenglish characters than english ones
--672 	Non-transparent station names' backgrounds do not resize properly upon language change
+-735	Plural rule not expanded correctly when non-numeric placeholder uses
+-732	Trains are lost after autorenewal/autoreplace
+-716	Train Crash in Depot
+-677	Badspacing in news summaries
+-674	Map signs allow less nonenglish characters than english ones
+-672	Non-transparent station names' backgrounds do not resize properly upon language change
 -669	Docks/Airports/RV Stations can be built without available vehicles
 -646	AI builds useless stations
--601	airports can't get flooded when they have planes in them
--599	reloaded game lost company passwords
--594	terraforming wipes out canals
+-601	Airports can't get flooded when they have planes in them
+-599	Reloaded game lost company passwords
+-594	Terraforming wipes out canals
 -591	Autorenew fails under certain conditions
--583	Fatal fault or crash during startup
--571	Problems with vehicle purchase lists with NewGRFs
 -559	Front-/Rear-facing engines don't line up with each other
 -553	Autorenew doesn't warn when replacement isn't available
--546	[0.5.0 RC3] Inflation overflow
+-546	Overflows due to inflation
 -540	Planes vanished when offered exclusive
 -539	Trains can cash the same cargo multiple times
 -522	overflow on vehicle costs
--- a/os/debian/changelog	Sun Apr 15 17:04:44 2007 +0000
+++ b/os/debian/changelog	Sat Apr 21 08:23:57 2007 +0000
@@ -4,6 +4,18 @@
 
  -- Matthijs Kooijman <m.kooijman@student.utwente.nl>  Mon, 26 Feb 2007 21:07:05 +0100
 
+openttd (0.5.1-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Matthijs Kooijman <m.kooijman@student.utwente.nl>  Fri, 20 Aprr 2007 21:45:32 +0100
+
+openttd (0.5.1~rc3-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Matthijs Kooijman <m.kooijman@student.utwente.nl>  Tue, 17 Aprr 2007 22:00:46 +0100
+
 openttd (0.5.1~rc2-1) unstable; urgency=low
 
   * New upstream release.
--- a/os/win32/installer/install.nsi	Sun Apr 15 17:04:44 2007 +0000
+++ b/os/win32/installer/install.nsi	Sat Apr 21 08:23:57 2007 +0000
@@ -1,6 +1,6 @@
 !define APPNAME "OpenTTD"   ; Define application name
 !define APPVERSION "0.5.1"  ; Define application version
-!define INSTALLERVERSION 30 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
+!define INSTALLERVERSION 32 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
 
 !define APPURLLINK "http://www.openttd.org"
 !define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
--- a/readme.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/readme.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -1,6 +1,6 @@
 OpenTTD README
-Last updated:    2007-03-23
-Release version: 0.5.1-RC2
+Last updated:    2007-04-20
+Release version: 0.5.1
 ------------------------------------------------------------------------
 
 
--- a/src/ai/ai.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/ai/ai.h	Sat Apr 21 08:23:57 2007 +0000
@@ -77,8 +77,8 @@
 	return true;
 }
 
-#define AI_CHANCE16(a,b)    ((uint16)     AI_Random()  <= (uint16)((65536 * a) / b))
-#define AI_CHANCE16R(a,b,r) ((uint16)(r = AI_Random()) <= (uint16)((65536 * a) / b))
+#define AI_CHANCE16(a, b)    ((uint16)     AI_Random()  <= (uint16)((65536 * a) / b))
+#define AI_CHANCE16R(a, b, r) ((uint16)(r = AI_Random()) <= (uint16)((65536 * a) / b))
 
 /**
  * The random-function that should be used by ALL AIs.
--- a/src/ai/default/default.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/ai/default/default.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -516,7 +516,7 @@
 {
 	uint i;
 	const Subsidy* s;
-	Town *from,*to;
+	Town *from, *to;
 
 	// initially error
 	fr->distance = -1;
@@ -1561,7 +1561,7 @@
 				return false;
 			if (cargo != CT_MAIL)
 				return true;
-			return !!((values[cargo]>>1) & ~7);
+			return !!((values[cargo] >> 1) & ~7);
 		}
 	}
 
@@ -1574,7 +1574,7 @@
 	int32 total_cost = 0;
 	Town *t = NULL;
 	int rating = 0;
-	int i,j,k;
+	int i, j, k;
 
 	for (;;) {
 		// This will seldomly overflow for valid reasons. Mask it to be on the safe side.
@@ -1588,7 +1588,7 @@
 				ret = DoCommand(c, railtype, p->attr, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_TRAIN_DEPOT);
 			} else {
 				// Station
-				ret = DoCommand(c, (p->attr&1) | (p->attr>>4)<<8 | (p->attr>>1&7)<<16, railtype, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_RAILROAD_STATION);
+				ret = DoCommand(c, (p->attr & 1) | (p->attr >> 4) << 8 | (p->attr >> 1 & 7) << 16, railtype, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_RAILROAD_STATION);
 			}
 
 			if (CmdFailed(ret)) return CMD_ERROR;
@@ -1610,7 +1610,7 @@
 
 			// Build the rail
 			for (i = 0; i != 6; i++, j >>= 1) {
-				if (j&1) {
+				if (j & 1) {
 					k = i;
 					ret = DoCommand(c, railtype, i, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_SINGLE_RAIL);
 					if (CmdFailed(ret)) return CMD_ERROR;
@@ -1642,7 +1642,7 @@
 			total_cost += ret + _price.build_rail;
 
 			if (flag & DC_EXEC) {
-				DoCommand(c, railtype, p->attr&1, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_SINGLE_RAIL);
+				DoCommand(c, railtype, p->attr & 1, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_SINGLE_RAIL);
 			}
 
 			goto clear_town_stuff;
@@ -1784,7 +1784,7 @@
 			if (rule == -1) {
 				// cannot build, terraform after a while
 				if (p->ai.state_counter >= 600) {
-					AiDoTerraformLand(aib->use_tile, Random()&3, 3, (int8)p->ai.state_mode);
+					AiDoTerraformLand(aib->use_tile, Random() & 3, 3, (int8)p->ai.state_mode);
 				}
 				// also try the other terraform direction
 				if (++p->ai.state_counter >= 1000) {
@@ -1804,7 +1804,7 @@
 				);
 				assert(!CmdFailed(r));
 			}
-		} while (++aib,--j);
+		} while (++aib, --j);
 	}
 
 	// check if we're done with all of them
@@ -1812,7 +1812,7 @@
 	j = p->ai.num_build_rec;
 	do {
 		if (aib->cur_building_rule == 255) return;
-	} while (++aib,--j);
+	} while (++aib, --j);
 
 	// yep, all are done. switch state to the rail building state.
 	p->ai.state = AIS_BUILD_RAIL;
@@ -1857,7 +1857,7 @@
 	arpfd.tile2 = p->ai.cur_tile_a;
 	arpfd.flag = false;
 	arpfd.count = 0;
-	FollowTrack(p->ai.cur_tile_a + TileOffsByDiagDir(p->ai.cur_dir_a), 0x2000 | TRANSPORT_RAIL, (DiagDirection)(p->ai.cur_dir_a^2),
+	FollowTrack(p->ai.cur_tile_a + TileOffsByDiagDir(p->ai.cur_dir_a), 0x2000 | TRANSPORT_RAIL, (DiagDirection)(p->ai.cur_dir_a ^ 2),
 		(TPFEnumProc*)AiEnumFollowTrack, NULL, &arpfd);
 	return arpfd.count > 8;
 }
@@ -2001,8 +2001,8 @@
 	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)) {
-			AiBuildRailRecursive(arf, _build_tunnel_endtile, p[0]&3);
+		if (!CmdFailed(cost) && cost <= (arf->player->player_money >> 4)) {
+			AiBuildRailRecursive(arf, _build_tunnel_endtile, p[0] & 3);
 			if (arf->depth == 1) AiCheckRailPathBetter(arf, p);
 		}
 	}
@@ -2017,7 +2017,7 @@
 
 	// Reached destination?
 	if (tile == arf->final_tile) {
-		if (arf->final_dir != (dir^2)) {
+		if (arf->final_dir != (dir ^ 2)) {
 			if (arf->recursive_mode != 2) arf->recursive_mode = 1;
 		} else if (arf->recursive_mode != 2) {
 			arf->recursive_mode = 2;
@@ -2063,17 +2063,17 @@
 			if (arf->depth == 1) AiCheckRailPathBetter(arf, p);
 
 			p += 2;
-		} while (!(p[0]&0x80));
+		} while (!(p[0] & 0x80));
 	}
 
 	AiCheckBuildRailBridgeHere(arf, tile, p);
-	AiCheckBuildRailTunnelHere(arf, tile, p+1);
+	AiCheckBuildRailTunnelHere(arf, tile, p + 1);
 
 	arf->depth--;
 }
 
 
-static const byte _dir_table_3[]= {0x25, 0x2A, 0x19, 0x16};
+static const byte _dir_table_3[] = {0x25, 0x2A, 0x19, 0x16};
 
 static void AiBuildRailConstruct(Player *p)
 {
@@ -2324,23 +2324,23 @@
 	}
 
 	// Find first edge to build from.
-	tile = AiGetEdgeOfDefaultRailBlock(aib->cur_building_rule, aib->use_tile, cmd&3, &dir);
+	tile = AiGetEdgeOfDefaultRailBlock(aib->cur_building_rule, aib->use_tile, cmd & 3, &dir);
 	p->ai.start_tile_a = tile;
 	p->ai.cur_tile_a = tile;
 	p->ai.start_dir_a = dir;
 	p->ai.cur_dir_a = dir;
-	DoCommand(TILE_MASK(tile + TileOffsByDiagDir(dir)), 0, (dir&1)?1:0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
+	DoCommand(TILE_MASK(tile + TileOffsByDiagDir(dir)), 0, (dir & 1) ? 1 : 0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
 
 	assert(TILE_MASK(tile) != 0xFF00);
 
 	// Find second edge to build to
-	aib = (&p->ai.src) + ((cmd >> 4)&0xF);
-	tile = AiGetEdgeOfDefaultRailBlock(aib->cur_building_rule, aib->use_tile, (cmd>>2)&3, &dir);
+	aib = (&p->ai.src) + ((cmd >> 4) & 0xF);
+	tile = AiGetEdgeOfDefaultRailBlock(aib->cur_building_rule, aib->use_tile, (cmd >> 2) & 3, &dir);
 	p->ai.start_tile_b = tile;
 	p->ai.cur_tile_b = tile;
 	p->ai.start_dir_b = dir;
 	p->ai.cur_dir_b = dir;
-	DoCommand(TILE_MASK(tile + TileOffsByDiagDir(dir)), 0, (dir&1)?1:0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
+	DoCommand(TILE_MASK(tile + TileOffsByDiagDir(dir)), 0, (dir & 1) ? 1 : 0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
 
 	assert(TILE_MASK(tile) != 0xFF00);
 
@@ -2503,7 +2503,7 @@
 		for (b = _default_rail_track_data[aib->cur_building_rule]->data; b->mode != 4; b++) {
 			DoCommand(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
 		}
-	} while (++aib,--num);
+	} while (++aib, --num);
 
 	p->ai.state = AIS_0;
 }
@@ -2682,14 +2682,14 @@
 			if (rule == -1) {
 				// cannot build, terraform after a while
 				if (p->ai.state_counter >= 600) {
-					AiDoTerraformLand(aib->use_tile, Random()&3, 3, (int8)p->ai.state_mode);
+					AiDoTerraformLand(aib->use_tile, Random() & 3, 3, (int8)p->ai.state_mode);
 				}
 				// also try the other terraform direction
 				if (++p->ai.state_counter >= 1000) {
 					p->ai.state_counter = 0;
 					p->ai.state_mode = -p->ai.state_mode;
 				}
-			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p,aib->use_tile)) {
+			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p, aib->use_tile)) {
 				int32 r;
 
 				// player has money, build it.
@@ -2702,7 +2702,7 @@
 				);
 				assert(!CmdFailed(r));
 			}
-		} while (++aib,--j);
+		} while (++aib, --j);
 	}
 
 	// check if we're done with all of them
@@ -2710,7 +2710,7 @@
 	j = p->ai.num_build_rec;
 	do {
 		if (aib->cur_building_rule == 255) return;
-	} while (++aib,--j);
+	} while (++aib, --j);
 
 	// yep, all are done. switch state to the rail building state.
 	p->ai.state = AIS_BUILD_ROAD;
@@ -2901,8 +2901,8 @@
 	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)) {
-			AiBuildRoadRecursive(arf, _build_tunnel_endtile, p[0]&3);
+		if (!CmdFailed(cost) && cost <= (arf->player->player_money >> 4)) {
+			AiBuildRoadRecursive(arf, _build_tunnel_endtile, p[0] & 3);
 			if (arf->depth == 1)  AiCheckRoadPathBetter(arf, p);
 		}
 	}
@@ -2918,7 +2918,7 @@
 
 	// Reached destination?
 	if (tile == arf->final_tile) {
-		if ((arf->final_dir^2) == dir) {
+		if ((arf->final_dir ^ 2) == dir) {
 			arf->recursive_mode = 2;
 			arf->cur_best_depth = arf->depth;
 		}
@@ -2962,7 +2962,7 @@
 	}
 
 	AiCheckBuildRoadBridgeHere(arf, tile, p);
-	AiCheckBuildRoadTunnelHere(arf, tile, p+1);
+	AiCheckBuildRoadTunnelHere(arf, tile, p + 1);
 
 	arf->depth--;
 }
@@ -3020,7 +3020,7 @@
 
 	tile = TILE_MASK(p->ai.cur_tile_a + TileOffsByDiagDir(p->ai.cur_dir_a));
 
-	if (arf.best_ptr[0]&0x80) {
+	if (arf.best_ptr[0] & 0x80) {
 		int i;
 		int32 bridge_len;
 		p->ai.cur_tile_a = arf.bridge_end_tile;
@@ -3042,7 +3042,7 @@
 		DoCommand(tile, p->ai.cur_tile_a, i + (0x80 << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
 
 		p->ai.state_counter = 0;
-	} else if (arf.best_ptr[0]&0x40) {
+	} else if (arf.best_ptr[0] & 0x40) {
 		// tunnel
 		DoCommand(tile, 0x200, 0, DC_AUTO | DC_EXEC, CMD_BUILD_TUNNEL);
 		p->ai.cur_tile_a = _build_tunnel_endtile;
@@ -3148,7 +3148,7 @@
 	p->ai.cur_dir_a = dir;
 
 	// Find second edge to build to
-	aib = (&p->ai.src) + (cmd&0xF);
+	aib = (&p->ai.src) + (cmd & 0xF);
 	tile = AiGetRoadBlockEdge(aib->cur_building_rule, aib->use_tile, &dir);
 	p->ai.start_tile_b = tile;
 	p->ai.cur_tile_b = tile;
@@ -3239,7 +3239,7 @@
 			if (b->mode > 1) continue;
 			DoCommand(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
 		}
-	} while (++aib,--num);
+	} while (++aib, --num);
 
 	p->ai.state = AIS_0;
 }
@@ -3326,7 +3326,7 @@
 
 	for (; p->mode == 0; p++) {
 		if (!HASBIT(avail_airports, p->attr)) return CMD_ERROR;
-		ret = DoCommand(TILE_MASK(tile + ToTileIndexDiff(p->tileoffs)), p->attr,0,flag | DC_AUTO | DC_NO_WATER,CMD_BUILD_AIRPORT);
+		ret = DoCommand(TILE_MASK(tile + ToTileIndexDiff(p->tileoffs)), p->attr, 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_AIRPORT);
 		if (CmdFailed(ret)) return CMD_ERROR;
 		total_cost += ret;
 	}
@@ -3408,14 +3408,14 @@
 			if (rule == -1) {
 				// cannot build, terraform after a while
 				if (p->ai.state_counter >= 600) {
-					AiDoTerraformLand(aib->use_tile, Random()&3, 3, (int8)p->ai.state_mode);
+					AiDoTerraformLand(aib->use_tile, Random() & 3, 3, (int8)p->ai.state_mode);
 				}
 				// also try the other terraform direction
 				if (++p->ai.state_counter >= 1000) {
 					p->ai.state_counter = 0;
 					p->ai.state_mode = -p->ai.state_mode;
 				}
-			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p,aib->use_tile)) {
+			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p, aib->use_tile)) {
 				// player has money, build it.
 				int32 r;
 
@@ -3428,7 +3428,7 @@
 				);
 				assert(!CmdFailed(r));
 			}
-		} while (++aib,--j);
+		} while (++aib, --j);
 	} while (--i);
 
 	// check if we're done with all of them
@@ -3436,7 +3436,7 @@
 	j = p->ai.num_build_rec;
 	do {
 		if (aib->cur_building_rule == 255) return;
-	} while (++aib,--j);
+	} while (++aib, --j);
 
 	// yep, all are done. switch state.
 	p->ai.state = AIS_BUILD_AIRCRAFT_VEHICLES;
@@ -3650,7 +3650,7 @@
 				}
 			}
 		} else {
-			static const byte _depot_bits[] = {0x19,0x16,0x25,0x2A};
+			static const byte _depot_bits[] = {0x19, 0x16, 0x25, 0x2A};
 
 			DiagDirection dir = GetRailDepotDirection(tile);
 
@@ -3795,13 +3795,13 @@
 		// Ask the guy with the highest performance hist.
 		FOR_ALL_PLAYERS(pp) {
 			if (pp->is_active &&
-					!(asked&1) &&
+					!(asked & 1) &&
 					pp->bankrupt_asked == 0 &&
 					best_val < pp->old_economy[1].performance_history) {
 				best_val = pp->old_economy[1].performance_history;
 				best_pl = pp;
 			}
-			asked>>=1;
+			asked >>= 1;
 		}
 
 		// Asked all players?
@@ -3843,7 +3843,7 @@
 		// Increase loan
 		if (p->current_loan < _economy.max_loan &&
 				p->num_valid_stat_ent >= 2 &&
-				-(p->old_economy[0].expenses+p->old_economy[1].expenses) < base * 60) {
+				-(p->old_economy[0].expenses + p->old_economy[1].expenses) < base * 60) {
 			DoCommand(0, 0, 0, DC_EXEC, CMD_INCREASE_LOAN);
 		}
 	}
@@ -3872,7 +3872,7 @@
 	//  to the patch-setting
 	// Also, it takes into account the setting if the service-interval is in days
 	//  or in %
-	_ai_service_interval = _patches.servint_ispercent?80:180;
+	_ai_service_interval = _patches.servint_ispercent ? 80 : 180;
 
 	if (IsHumanPlayer(_current_player)) return;
 
@@ -3883,7 +3883,7 @@
 	{
 		static byte old_state = 99;
 		static bool hasdots = false;
-		char *_ai_state_names[]={
+		char *_ai_state_names[] = {
 			"AiCase0",
 			"AiCase1",
 			"AiStateVehLoop",
--- a/src/ai/trolly/build.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/ai/trolly/build.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -123,7 +123,7 @@
 		}
 		// Bridge code
 		if ((AI_PATHFINDER_FLAG_BRIDGE & route_extra[part]) != 0) {
-			cost += AiNew_Build_Bridge(p, route[part], route[part-1], flag);
+			cost += AiNew_Build_Bridge(p, route[part], route[part - 1], flag);
 			PathFinderInfo->position++;
 			// TODO: problems!
 			if (CmdFailed(cost)) {
@@ -173,7 +173,7 @@
 		}
 		// Bridge code
 		if ((AI_PATHFINDER_FLAG_BRIDGE & route_extra[part]) != 0) {
-			cost += AiNew_Build_Bridge(p, route[part], route[part+1], flag);
+			cost += AiNew_Build_Bridge(p, route[part], route[part + 1], flag);
 			PathFinderInfo->position++;
 			// TODO: problems!
 			if (CmdFailed(cost)) {
--- a/src/ai/trolly/trolly.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/ai/trolly/trolly.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -220,9 +220,9 @@
 
 		// Check if the rating in a city is high enough
 		//  If not, take a chance if we want to continue
-		if (t->ratings[_current_player] < 0 && AI_CHANCE16(1,4)) return false;
+		if (t->ratings[_current_player] < 0 && AI_CHANCE16(1, 4)) return false;
 
-		if (t->max_pass - t->act_pass < AI_CHECKCITY_NEEDED_CARGO && !AI_CHANCE16(1,AI_CHECKCITY_CITY_CHANCE)) return false;
+		if (t->max_pass - t->act_pass < AI_CHECKCITY_NEEDED_CARGO && !AI_CHANCE16(1, AI_CHECKCITY_CITY_CHANCE)) return false;
 
 		// Check if we have build a station in this town the last 6 months
 		//  else we don't do it. This is done, because stat updates can be slow
@@ -275,7 +275,7 @@
 		int count = 0;
 		int j = 0;
 
-		if (i->town != NULL && i->town->ratings[_current_player] < 0 && AI_CHANCE16(1,4)) return false;
+		if (i->town != NULL && i->town->ratings[_current_player] < 0 && AI_CHANCE16(1, 4)) return false;
 
 		// No limits on delevering stations!
 		//  Or for industry that does not give anything yet
@@ -642,8 +642,8 @@
 		int r;
 		uint best;
 		uint accepts[NUM_CARGO];
-		TileIndex found_spot[AI_FINDSTATION_TILE_RANGE*AI_FINDSTATION_TILE_RANGE*4];
-		uint found_best[AI_FINDSTATION_TILE_RANGE*AI_FINDSTATION_TILE_RANGE*4];
+		TileIndex found_spot[AI_FINDSTATION_TILE_RANGE*AI_FINDSTATION_TILE_RANGE * 4];
+		uint found_best[AI_FINDSTATION_TILE_RANGE*AI_FINDSTATION_TILE_RANGE * 4];
 		// 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
@@ -961,13 +961,13 @@
 
 	// Now we can build the route, check the direction of the stations!
 	if (p->ainew.from_direction == AI_PATHFINDER_NO_DIRECTION) {
-		p->ainew.from_direction = AiNew_GetDirection(p->ainew.path_info.route[p->ainew.path_info.route_length-1], p->ainew.path_info.route[p->ainew.path_info.route_length-2]);
+		p->ainew.from_direction = AiNew_GetDirection(p->ainew.path_info.route[p->ainew.path_info.route_length - 1], p->ainew.path_info.route[p->ainew.path_info.route_length - 2]);
 	}
 	if (p->ainew.to_direction == AI_PATHFINDER_NO_DIRECTION) {
 		p->ainew.to_direction = AiNew_GetDirection(p->ainew.path_info.route[0], p->ainew.path_info.route[1]);
 	}
 	if (p->ainew.from_tile == AI_STATION_RANGE)
-		p->ainew.from_tile = p->ainew.path_info.route[p->ainew.path_info.route_length-1];
+		p->ainew.from_tile = p->ainew.path_info.route[p->ainew.path_info.route_length - 1];
 	if (p->ainew.to_tile == AI_STATION_RANGE)
 		p->ainew.to_tile = p->ainew.path_info.route[0];
 
--- a/src/aircraft.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/aircraft.h	Sat Apr 21 08:23:57 2007 +0000
@@ -109,4 +109,10 @@
  */
 void UpdateAirplanesOnNewStation(const Station *st);
 
+/** Update cached values of an aircraft.
+ * Currently caches callback 36 max speed.
+ * @param v Vehicle
+ */
+void UpdateAircraftCache(Vehicle *v);
+
 #endif /* AIRCRAFT_H */
--- a/src/aircraft_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/aircraft_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -393,6 +393,8 @@
 		v->vehicle_flags = 0;
 		if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
 
+		UpdateAircraftCache(v);
+
 		VehiclePositionChanged(v);
 		VehiclePositionChanged(u);
 
@@ -569,6 +571,8 @@
 		}
 
 		if (flags & DC_EXEC) {
+			if (v->current_order.type == OT_LOADING) v->LeaveStation();
+
 			v->current_order.type = OT_GOTO_DEPOT;
 			v->current_order.flags = OF_NON_STOP;
 			if (!(p2 & DEPOT_SERVICE)) SETBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
@@ -715,7 +719,7 @@
 
 	if (v->vehstatus & VS_STOPPED) return;
 
-	int32 cost = AircraftVehInfo(v->engine_type)->running_cost * _price.aircraft_running / 364;
+	int32 cost = GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) * _price.aircraft_running / 364;
 
 	v->profit_this_year -= cost >> 8;
 
@@ -862,6 +866,21 @@
 	}
 }
 
+
+void UpdateAircraftCache(Vehicle *v)
+{
+	uint max_speed = GetVehicleProperty(v, 0x0C, 0);
+	if (max_speed != 0) {
+		/* Convert from original units to (approx) km/h */
+		max_speed = (max_speed * 129) / 10;
+
+		v->u.air.cached_max_speed = max_speed;
+	} else {
+		v->u.air.cached_max_speed = 0xFFFF;
+	}
+}
+
+
 /**
  * Special velocities for aircraft
  */
@@ -885,6 +904,11 @@
 	uint spd = v->acceleration * 16;
 	byte t;
 
+	if (v->u.air.cached_max_speed < speed_limit) {
+		if (v->cur_speed < speed_limit) hard_limit = false;
+		speed_limit = v->u.air.cached_max_speed;
+	}
+
 	speed_limit = min(speed_limit, v->max_speed);
 
 	v->subspeed = (t=v->subspeed) + (byte)spd;
@@ -1389,6 +1413,7 @@
 			}
 
 			Order b = v->current_order;
+			v->LeaveStation();
 			v->current_order.Free();
 			MarkAircraftDirty(v);
 			if (!(b.flags & OF_NON_STOP)) return;
@@ -1856,8 +1881,10 @@
 	/* we have arrived in an important state (eg terminal, hangar, etc.) */
 	if (current->heading == v->u.air.state) {
 		byte prev_pos = v->u.air.pos; // location could be changed in state, so save it before-hand
+		byte prev_state = v->u.air.state;
 		_aircraft_state_handlers[v->u.air.state](v, apc);
 		if (v->u.air.state != FLYING) v->u.air.previous_pos = prev_pos;
+		if (v->u.air.state != prev_state) UpdateAircraftCache(v);
 		return true;
 	}
 
--- a/src/airport_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/airport_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -105,7 +105,7 @@
 
 		w = BaseWindow::FindById(WC_BUILD_STATION, 0);
 		if (w != 0)
-			WP(w,def_d).close = true;
+			WP(w, def_d).close = true;
 		break;
 
 	case WE_DESTROY:
@@ -155,7 +155,7 @@
 		uint32 avail_airports;
 		const AirportFTAClass *airport;
 
-		if (WP(w,def_d).close) return;
+		if (WP(w, def_d).close) return;
 
 		avail_airports = GetValidAirports();
 
@@ -207,7 +207,7 @@
 	} break;
 
 	case WE_MOUSELOOP: {
-		if (WP(w,def_d).close) {
+		if (WP(w, def_d).close) {
 			w->Close();
 			return;
 		}
@@ -216,7 +216,7 @@
 	} break;
 
 	case WE_DESTROY:
-		if (!WP(w,def_d).close) ResetObjectToPlace();
+		if (!WP(w, def_d).close) ResetObjectToPlace();
 		break;
 	}
 }
--- a/src/autoreplace_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/autoreplace_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -87,34 +87,9 @@
  */
 static CargoID GetNewCargoTypeForReplace(Vehicle *v, EngineID engine_type)
 {
-	bool new_cargo_capacity = true;
-	CargoID new_cargo_type = CT_INVALID;
-
-	switch (v->type) {
-		case VEH_TRAIN:
-			new_cargo_capacity = (RailVehInfo(engine_type)->capacity > 0);
-			new_cargo_type     = RailVehInfo(engine_type)->cargo_type;
-			break;
+	CargoID new_cargo_type = GetEngineCargoType(engine_type);
 
-		case VEH_ROAD:
-			new_cargo_capacity = (RoadVehInfo(engine_type)->capacity > 0);
-			new_cargo_type     = RoadVehInfo(engine_type)->cargo_type;
-			break;
-		case VEH_SHIP:
-			new_cargo_capacity = (ShipVehInfo(engine_type)->capacity > 0);
-			new_cargo_type     = ShipVehInfo(engine_type)->cargo_type;
-			break;
-
-		case VEH_AIRCRAFT:
-			/* all aircraft starts as passenger planes with cargo capacity
-			 * new_cargo_capacity is always true for aircraft, which is the init value. No need to set it here */
-			new_cargo_type     = CT_PASSENGERS;
-			break;
-
-		default: NOT_REACHED(); break;
-	}
-
-	if (!new_cargo_capacity) return CT_NO_REFIT; // Don't try to refit an engine with no cargo capacity
+	if (new_cargo_type == CT_INVALID) return CT_NO_REFIT; // Don't try to refit an engine with no cargo capacity
 
 	if (v->cargo_type == new_cargo_type || CanRefitTo(engine_type, v->cargo_type)) {
 		if (VerifyAutoreplaceRefitForOrders(v, engine_type)) {
@@ -137,7 +112,7 @@
 		/* Now we found a cargo type being carried on the train and we will see if it is possible to carry to this one */
 		if (v->cargo_type == new_cargo_type) return CT_NO_REFIT;
 		if (CanRefitTo(engine_type, v->cargo_type)) return v->cargo_type;
-	} while ((v=v->next) != NULL);
+	} while ((v = v->next) != NULL);
 	return CT_NO_REFIT; // We failed to find a cargo type on the old vehicle and we will not refit the new one
 }
 
--- a/src/build_vehicle_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -312,19 +312,19 @@
 	&TrainEngineRunningCostSorter,
 	&TrainEnginePowerVsRunningCostSorter,
 	&EngineReliabilitySorter,
-},{
+}, {
 	/* Road vehicles */
 	&EngineNumberSorter,
 	&EngineIntroDateSorter,
 	&EngineNameSorter,
 	&EngineReliabilitySorter,
-},{
+}, {
 	/* Ships */
 	&EngineNumberSorter,
 	&EngineIntroDateSorter,
 	&EngineNameSorter,
 	&EngineReliabilitySorter,
-},{
+}, {
 	/* Aircraft */
 	&EngineNumberSorter,
 	&AircraftEngineCostSorter,
@@ -348,21 +348,21 @@
 	STR_ENGINE_SORT_POWER_VS_RUNNING_COST,
 	STR_SORT_BY_RELIABILITY,
 	INVALID_STRING_ID
-},{
+}, {
 	/* Road vehicles */
 	STR_ENGINE_SORT_ENGINE_ID,
 	STR_ENGINE_SORT_INTRO_DATE,
 	STR_SORT_BY_DROPDOWN_NAME,
 	STR_SORT_BY_RELIABILITY,
 	INVALID_STRING_ID
-},{
+}, {
 	/* Ships */
 	STR_ENGINE_SORT_ENGINE_ID,
 	STR_ENGINE_SORT_INTRO_DATE,
 	STR_SORT_BY_DROPDOWN_NAME,
 	STR_SORT_BY_RELIABILITY,
 	INVALID_STRING_ID
-},{
+}, {
 	/* Aircraft */
 	STR_ENGINE_SORT_ENGINE_ID,
 	STR_ENGINE_SORT_COST,
@@ -392,7 +392,7 @@
 	/* Wagon speed limit, displayed if above zero */
 	if (rvi->max_speed > 0 && _patches.wagon_speed_limits) {
 		SetDParam(0, rvi->max_speed * 10 / 16);
-		DrawString(x,y, STR_PURCHASE_INFO_SPEED, 0);
+		DrawString(x, y, STR_PURCHASE_INFO_SPEED, 0);
 		y += 10;
 	}
 	return y;
@@ -406,13 +406,13 @@
 	/* Purchase Cost - Engine weight */
 	SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5);
 	SetDParam(1, rvi->weight << multihead);
-	DrawString(x,y, STR_PURCHASE_INFO_COST_WEIGHT, 0);
+	DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, 0);
 	y += 10;
 
 	/* Max speed - Engine power */
 	SetDParam(0, rvi->max_speed * 10 / 16);
 	SetDParam(1, rvi->power << multihead);
-	DrawString(x,y, STR_PURCHASE_INFO_SPEED_POWER, 0);
+	DrawString(x, y, STR_PURCHASE_INFO_SPEED_POWER, 0);
 	y += 10;
 
 	/* Max tractive effort - not applicable if old acceleration or maglev */
@@ -423,15 +423,15 @@
 	}
 
 	/* Running cost */
-	SetDParam(0, (rvi->running_cost_base * _price.running_rail[rvi->running_cost_class] >> 8) << multihead);
-	DrawString(x,y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
+	SetDParam(0, (GetEngineProperty(engine_number, 0x0D, rvi->running_cost_base) * _price.running_rail[rvi->running_cost_class] >> 8) << multihead);
+	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
 	y += 10;
 
 	/* Powered wagons power - Powered wagons extra weight */
 	if (rvi->pow_wag_power != 0) {
 		SetDParam(0, rvi->pow_wag_power);
 		SetDParam(1, rvi->pow_wag_weight);
-		DrawString(x,y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0);
+		DrawString(x, y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0);
 		y += 10;
 	};
 
@@ -444,7 +444,7 @@
 	bool refittable = (_engine_info[engine_number].refit_mask != 0);
 
 	/* Purchase cost - Max speed */
-	SetDParam(0, rvi->base_cost * (_price.roadveh_base>>3)>>5);
+	SetDParam(0, rvi->base_cost * (_price.roadveh_base >> 3) >> 5);
 	SetDParam(1, rvi->max_speed * 10 / 32);
 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
 	y += 10;
@@ -468,21 +468,21 @@
 static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi)
 {
 	/* Purchase cost - Max speed */
-	SetDParam(0, svi->base_cost * (_price.ship_base>>3)>>5);
+	SetDParam(0, svi->base_cost * (_price.ship_base >> 3) >> 5);
 	SetDParam(1, svi->max_speed * 10 / 32);
-	DrawString(x,y, STR_PURCHASE_INFO_COST_SPEED, 0);
+	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
 	y += 10;
 
 	/* Cargo type + capacity */
 	SetDParam(0, svi->cargo_type);
 	SetDParam(1, svi->capacity);
 	SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY);
-	DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0);
+	DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
 	y += 10;
 
 	/* Running cost */
-	SetDParam(0, svi->running_cost * _price.ship_running >> 8);
-	DrawString(x,y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
+	SetDParam(0, GetEngineProperty(engine_number, 0x0B, svi->running_cost) * _price.ship_running >> 8);
+	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
 	y += 10;
 
 	return y;
@@ -494,7 +494,7 @@
 	CargoID cargo;
 
 	/* Purchase cost - Max speed */
-	SetDParam(0, avi->base_cost * (_price.aircraft_base>>3)>>5);
+	SetDParam(0, avi->base_cost * (_price.aircraft_base >> 3) >> 5);
 	SetDParam(1, avi->max_speed * 10 / 16);
 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
 	y += 10;
@@ -516,7 +516,7 @@
 	y += 10;
 
 	/* Running cost */
-	SetDParam(0, avi->running_cost * _price.aircraft_running >> 8);
+	SetDParam(0, GetEngineProperty(engine_number, 0x0E, avi->running_cost) * _price.aircraft_running >> 8);
 	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
 	y += 10;
 
@@ -560,7 +560,7 @@
 				SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
 				SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
 			}
-			DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0);
+			DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
 			y += 10;
 		}
 			break;
@@ -1001,7 +1001,7 @@
 
 	switch (type) {
 		case VEH_TRAIN:
-			WP(w,buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
+			WP(w, buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
 			w->Resize(0, 16);
 			break;
 		case VEH_ROAD:
--- a/src/clear_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/clear_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -79,7 +79,7 @@
 
 	if (count >= 625) return;
 
-	for (t = ts->tile_table; count != 0; count--,t++) {
+	for (t = ts->tile_table; count != 0; count--, t++) {
 		if (*t == tile) return;
 	}
 
@@ -141,7 +141,7 @@
 		}
 	}
 
-	ret = DoCommand(tile, 0,0, ts->flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
+	ret = DoCommand(tile, 0, 0, ts->flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
 
 	if (CmdFailed(ret)) {
 		_terraform_err_tile = tile;
@@ -215,8 +215,8 @@
 			tile += ToTileIndexDiff(*ttm);
 
 			r = TerraformGetHeightOfTile(ts, tile);
-			if (r != height && r-direction != height && r+direction != height) {
-				if (!TerraformTileHeight(ts, tile, r+direction))
+			if (r != height && r - direction != height && r + direction != height) {
+				if (!TerraformTileHeight(ts, tile, r + direction))
 					return false;
 			}
 		}
@@ -382,8 +382,8 @@
 	if (ey < sy) Swap(ey, sy);
 	tile = TileXY(sx, sy);
 
-	size_x = ex-sx+1;
-	size_y = ey-sy+1;
+	size_x = ex - sx + 1;
+	size_y = ey - sy + 1;
 
 	money = GetAvailableMoneyForCommand();
 	cost = 0;
--- a/src/command.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/command.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -407,7 +407,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;
+	int32 res = 0, res2;
 	CommandProc *proc;
 	uint32 flags;
 	bool notest;
@@ -544,7 +544,7 @@
 		if (res2 != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2);
 		if (_additional_cash_required) {
 			SetDParam(0, _additional_cash_required);
-			ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x,y);
+			ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x, y);
 			if (res2 == 0) goto callb_err;
 		}
 	}
@@ -558,7 +558,7 @@
 show_error:
 	/* show error message if the command fails? */
 	if (IsLocalPlayer() && error_part1 != 0) {
-		ShowErrorMessage(_error_message, error_part1, x,y);
+		ShowErrorMessage(_error_message, error_part1, x, y);
 	}
 
 callb_err:
--- a/src/command.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/command.h	Sat Apr 21 08:23:57 2007 +0000
@@ -158,7 +158,7 @@
 	CMD_ERROR = ((int32)0x80000000),
 };
 
-#define CMD_MSG(x) ((x)<<16)
+#define CMD_MSG(x) ((x) << 16)
 
 enum {
 	CMD_AUTO                  = 0x0200,
--- a/src/depot_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/depot_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -535,9 +535,9 @@
 		case VEH_TRAIN:
 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_8800_TRAIN_DEPOT;
 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
-			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_DEPOT_TRAIN_TIP;
+			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
-			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
+			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
 
 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_8815_NEW_VEHICLES;
@@ -559,9 +559,9 @@
 		case VEH_ROAD:
 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_9003_ROAD_VEHICLE_DEPOT;
 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
-			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_DEPOT_ROADVEH_TIP;
+			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
-			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
+			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
 
 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_9004_NEW_VEHICLES;
@@ -583,9 +583,9 @@
 		case VEH_SHIP:
 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_9803_SHIP_DEPOT;
 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
-			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_DEPOT_SHIP_TIP;
+			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
-			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
+			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
 
 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_9804_NEW_SHIPS;
@@ -607,9 +607,9 @@
 		case VEH_AIRCRAFT:
 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_A002_AIRCRAFT_HANGAR;
 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
-			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_HANGAR_TIP;
+			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
-			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
+			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
 
 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_A003_NEW_AIRCRAFT;
--- a/src/disaster_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/disaster_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -233,7 +233,7 @@
 
 				SetDParam(0, GetStationIndex(tile));
 				AddNewsItem(STR_B000_ZEPPELIN_DISASTER_AT,
-					NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
+					NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0),
 					v->index,
 					0);
 			}
@@ -263,7 +263,7 @@
 
 	x = v->x_pos;
 	y = v->y_pos;
-	z = GetSlopeZ(x,y);
+	z = GetSlopeZ(x, y);
 	if (z < v->z_pos) z = v->z_pos - 1;
 	SetDisasterVehiclePos(v, x, y, z);
 
@@ -359,14 +359,14 @@
 		if (dist <= TILE_SIZE && z > u->z_pos) z--;
 		SetDisasterVehiclePos(v, gp.x, gp.y, z);
 
-		if (z <= u->z_pos && (u->vehstatus & VS_HIDDEN)==0) {
+		if (z <= u->z_pos && (u->vehstatus & VS_HIDDEN) == 0) {
 			v->age++;
 			if (u->u.road.crashed_ctr == 0) {
 				u->u.road.crashed_ctr++;
 				u->vehstatus |= VS_CRASHED;
 
 				AddNewsItem(STR_B001_ROAD_VEHICLE_DESTROYED,
-					NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
+					NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0),
 					u->index,
 					0);
 			}
@@ -441,7 +441,7 @@
 			DestructIndustry(i);
 
 			SetDParam(0, i->town->index);
-			AddNewsItem(STR_B002_OIL_REFINERY_EXPLOSION, NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy, 0);
+			AddNewsItem(STR_B002_OIL_REFINERY_EXPLOSION, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ACCIDENT, 0), i->xy, 0);
 			SndPlayTileFx(SND_12_EXPLOSION, i->xy);
 		}
 	} else if (v->current_order.dest == 0) {
@@ -514,7 +514,7 @@
 			DestructIndustry(i);
 
 			SetDParam(0, i->town->index);
-			AddNewsItem(STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS, NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy, 0);
+			AddNewsItem(STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ACCIDENT, 0), i->xy, 0);
 			SndPlayTileFx(SND_12_EXPLOSION, i->xy);
 		}
 	} else if (v->current_order.dest == 0) {
@@ -600,7 +600,7 @@
 		t = ClosestTownFromTile(v->dest_tile, (uint)-1);
 		SetDParam(0, t->index);
 		AddNewsItem(STR_B004_UFO_LANDS_NEAR,
-			NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ACCIDENT, 0),
+			NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ACCIDENT, 0),
 			v->tile,
 			0);
 
@@ -951,7 +951,7 @@
 static void Disaster_Big_Submarine_Init()
 {
 	Vehicle *v = ForceAllocateSpecialVehicle();
-	int x,y;
+	int x, y;
 	Direction dir;
 	uint32 r;
 
@@ -986,7 +986,7 @@
 			if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CAN_SUBSIDENCE) && --index < 0) {
 				SetDParam(0, i->town->index);
 				AddNewsItem(STR_B005_COAL_MINE_SUBSIDENCE_LEAVES,
-					NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy + TileDiffXY(1, 1), 0);
+					NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ACCIDENT, 0), i->xy + TileDiffXY(1, 1), 0);
 
 				{
 					TileIndex tile = i->xy;
--- a/src/dock_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/dock_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -165,10 +165,10 @@
 		w->RaiseButtons();
 
 		w = BaseWindow::FindById(WC_BUILD_STATION, 0);
-		if (w != NULL) WP(w,def_d).close = true;
+		if (w != NULL) WP(w, def_d).close = true;
 
 		w = BaseWindow::FindById(WC_BUILD_DEPOT, 0);
-		if (w != NULL) WP(w,def_d).close = true;
+		if (w != NULL) WP(w, def_d).close = true;
 		break;
 
 	case WE_PLACE_PRESIZE: {
@@ -233,7 +233,7 @@
 	case WE_PAINT: {
 		int rad;
 
-		if (WP(w,def_d).close) return;
+		if (WP(w, def_d).close) return;
 		w->DrawWidgets();
 
 		rad = (_patches.modified_catchment) ? CA_DOCK : 4;
@@ -258,7 +258,7 @@
 		break;
 
 	case WE_MOUSELOOP:
-		if (WP(w,def_d).close) {
+		if (WP(w, def_d).close) {
 			w->Close();
 			return;
 		}
@@ -267,7 +267,7 @@
 		break;
 
 	case WE_DESTROY:
-		if (!WP(w,def_d).close) ResetObjectToPlace();
+		if (!WP(w, def_d).close) ResetObjectToPlace();
 		break;
 	}
 }
@@ -333,11 +333,11 @@
 	} break;
 
 	case WE_MOUSELOOP:
-		if (WP(w,def_d).close) w->Close();
+		if (WP(w, def_d).close) w->Close();
 		break;
 
 	case WE_DESTROY:
-		if (!WP(w,def_d).close) ResetObjectToPlace();
+		if (!WP(w, def_d).close) ResetObjectToPlace();
 		break;
 	}
 }
--- a/src/economy.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/economy.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1331,7 +1331,6 @@
 static bool LoadWait(const Vehicle* v, const Vehicle* u)
 {
 	const Vehicle *w;
-	const Vehicle *x;
 	bool has_any_cargo = false;
 
 	if (!(u->current_order.flags & OF_FULL_LOAD)) return false;
@@ -1346,12 +1345,11 @@
 		}
 	}
 
-	FOR_ALL_VEHICLES(x) {
-		if ((x->type != VEH_TRAIN || IsFrontEngine(x)) && // for all locs
-				u->last_station_visited == x->last_station_visited && // at the same station
-				!(x->vehstatus & (VS_STOPPED | VS_CRASHED)) && // not stopped or crashed
-				x->current_order.type == OT_LOADING && // loading
-				u != x) { // not itself
+	const Station *st = GetStation(u->last_station_visited);
+	std::list<Vehicle *>::const_iterator iter;
+	for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) {
+		const Vehicle *x = *iter;
+		if (!(x->vehstatus & (VS_STOPPED | VS_CRASHED)) && u != x) {
 			bool other_has_any_cargo = false;
 			bool has_space_for_same_type = false;
 			bool other_has_same_type = false;
@@ -1826,8 +1824,9 @@
 /** Cargo payment rates */
 static void SaveLoad_CAPR()
 {
-	SlArray(&_cargo_payment_rates,      NUM_CARGO, SLE_INT32);
-	SlArray(&_cargo_payment_rates_frac, NUM_CARGO, SLE_UINT16);
+	uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO;
+	SlArray(&_cargo_payment_rates,      num_cargo, SLE_INT32);
+	SlArray(&_cargo_payment_rates_frac, num_cargo, SLE_UINT16);
 }
 
 static const SaveLoad _economy_desc[] = {
--- a/src/engine.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/engine.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -249,6 +249,7 @@
 /** Accept an engine prototype. XXX - it is possible that the top-player
  * changes while you are waiting to accept the offer? Then it becomes invalid
  * @param tile unused
+ * @param flags operation to perfom
  * @param p1 engine-prototype offered
  * @param p2 unused
  */
@@ -350,6 +351,7 @@
 
 /** Rename an engine.
  * @param tile unused
+ * @param flags operation to perfom
  * @param p1 engine ID to rename
  * @param p2 unused
  */
@@ -402,6 +404,35 @@
 	return true;
 }
 
+/** Get the default cargo type for a certain engine type
+ * @param engine The ID to get the cargo for
+ * @return The cargo type. CT_INVALID means no cargo capacity
+ */
+CargoID GetEngineCargoType(EngineID engine)
+{
+	assert(IsEngineIndex(engine));
+
+	switch (GetEngine(engine)->type) {
+		case VEH_TRAIN:
+			if (RailVehInfo(engine)->capacity == 0) return CT_INVALID;
+			return RailVehInfo(engine)->cargo_type;
+
+		case VEH_ROAD:
+			if (RoadVehInfo(engine)->capacity == 0) return CT_INVALID;
+			return RoadVehInfo(engine)->cargo_type;
+
+		case VEH_SHIP:
+			if (ShipVehInfo(engine)->capacity == 0) return CT_INVALID;
+			return ShipVehInfo(engine)->cargo_type;
+
+		case VEH_AIRCRAFT:
+			/* all aircraft starts as passenger planes with cargo capacity */
+			return CT_PASSENGERS;
+
+		default: NOT_REACHED(); return CT_INVALID;
+	}
+}
+
 /************************************************************************
  * Engine Replacement stuff
  ************************************************************************/
--- a/src/engine.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/engine.h	Sat Apr 21 08:23:57 2007 +0000
@@ -90,7 +90,7 @@
 	Date base_intro;
 	Year lifelength;
 	Year base_life;
-	byte unk2;         ///< Carriages have the highest bit set in this one
+	byte unk2;         ///< flag for carriage(bit 7) and decay speed(bits0..6)
 	byte load_amount;
 	byte climates;
 	uint32 refit_mask;
@@ -153,6 +153,7 @@
 void DeleteCustomEngineNames();
 
 bool IsEngineBuildable(EngineID engine, byte type, PlayerID player);
+CargoID GetEngineCargoType(EngineID engine);
 
 enum {
 	NUM_NORMAL_RAIL_ENGINES = 54,
@@ -295,7 +296,7 @@
 
 /**
  * Remove all engine replacement settings for the player.
- * @param  er The renewlist for a given player.
+ * @param  erl The renewlist for a given player.
  * @return The new renewlist for the player.
  */
 void RemoveAllEngineReplacement(EngineRenewList* erl);
--- a/src/fios.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/fios.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -57,7 +57,7 @@
 /**
  * Compare two FiosItem's. Used with qsort when sorting the file list.
  * @param a A pointer to the first FiosItem to compare.
- * @param a A pointer to the second FiosItem to compare.
+ * @param b A pointer to the second FiosItem to compare.
  * @return -1, 0 or 1, depending on how the two items should be sorted.
  */
 int CDECL compare_FiosItems(const void *a, const void *b)
@@ -200,9 +200,8 @@
 typedef byte fios_getlist_callback_proc(int mode, const char *filename, const char *ext, char *title);
 
 /** Create a list of the files in a directory, according to some arbitrary rule.
- *  @param num Will be filled with the amount of items.
  *  @param mode The mode we are in. Some modes don't allow 'parent'.
- *  @param callback The function that is called where you need to do the filtering.
+ *  @param callback_proc The function that is called where you need to do the filtering.
  *  @return Return the list of files. */
 static FiosItem *FiosGetFileList(int mode, fios_getlist_callback_proc *callback_proc)
 {
--- a/src/genworld_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/genworld_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -899,7 +899,7 @@
 
 /**
  * Set the total of a stage of the world generation.
- * @param class the current class we are in.
+ * @param cls the current class we are in.
  * @param total Set the total expected items for this class.
  *
  * Warning: this function isn't clever. Don't go from class 4 to 3. Go upwards, always.
@@ -914,7 +914,7 @@
 
 /**
  * Increases the current stage of the world generation with one.
- * @param class the current class we are in.
+ * @param cls the current class we are in.
  *
  * Warning: this function isn't clever. Don't go from class 4 to 3. Go upwards, always.
  *  Also, progress works if total is zero, total works if progress is zero.
--- a/src/gfx.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/gfx.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -201,7 +201,7 @@
 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)
+	if ((x -= dpi->left) < 0 || x >= dpi->width || (y -= dpi->top)<0 || y >= dpi->height)
 		return;
 	dpi->dst_ptr[y * dpi->pitch + x] = color;
 }
@@ -275,7 +275,7 @@
 
 /** Truncate a given string to a maximum width if neccessary.
  * If the string is truncated, add three dots ('...') to show this.
- * @param *dest string that is checked and possibly truncated
+ * @param *str string that is checked and possibly truncated
  * @param maxw maximum width in pixels of the string
  * @return new width of (truncated) string */
 static int TruncateString(char *str, int maxw)
@@ -413,11 +413,11 @@
 /** 'Correct' a string to a maximum length. Longer strings will be cut into
  * additional lines at whitespace characters if possible. The string parameter
  * is modified with terminating characters mid-string which are the
- * placeholders for the newlines.<br/>
+ * placeholders for the newlines.
  * The string WILL be truncated if there was no whitespace for the current
  * line's maximum width.
  *
- * @note To know if the the terminating '\0' is the string end or just a
+ * @note To know if the terminating '\0' is the string end or just a
  * newline, the returned 'num' value should be consulted. The num'th '\0',
  * starting with index 0 is the real string end.
  *
@@ -461,7 +461,7 @@
 				switch (c) {
 					case '\0': return num + (size << 16); break;
 					case SCC_SETX:  str++; break;
-					case SCC_SETXY: str +=2; break;
+					case SCC_SETXY: str += 2; break;
 					case SCC_TINYFONT: size = FS_SMALL; break;
 					case SCC_BIGFONT:  size = FS_LARGE; break;
 					case '\n': goto end_of_inner_loop;
@@ -487,7 +487,7 @@
  * @param x Centre the string around this pixel width
  * @param y Draw the string at this pixel height (first line's bottom)
  * @param str String to draw
- * @param max Maximum width the string can have before it is wrapped */
+ * @param maxw Maximum width the string can have before it is wrapped */
 void DrawStringMultiCenter(int x, int y, StringID str, int maxw)
 {
 	char buffer[512];
@@ -509,7 +509,7 @@
 
 	for (;;) {
 		w = GetStringBoundingBox(src).width;
-		DoDrawString(src, x - (w>>1), y, 0xFE);
+		DoDrawString(src, x - (w >> 1), y, 0xFE);
 		_cur_fontsize = _last_fontsize;
 
 		for (;;) {
@@ -524,7 +524,7 @@
 			} else if (c == SCC_SETX) {
 				src++;
 			} else if (c == SCC_SETXY) {
-				src+=2;
+				src += 2;
 			}
 		}
 	}
@@ -574,7 +574,7 @@
 			} else if (c == SCC_SETX) {
 				src++;
 			} else if (c == SCC_SETXY) {
-				src+=2;
+				src += 2;
 			}
 		}
 	}
@@ -626,7 +626,7 @@
 /** Draw a string at the given coordinates with the given colour
  * @param string the string to draw
  * @param x offset from left side of the screen, if negative offset from the right side
- * @param x offset from top side of the screen, if negative offset from the bottom
+ * @param y offset from top side of the screen, if negative offset from the bottom
  * @param real_color colour of the string, see _string_colormap in
  * table/palettes.h or docs/ottd-colourtext-palette.png
  * @return the x-coordinates where the drawing has finished. If nothing is drawn
@@ -643,7 +643,7 @@
 
 	if (color != 0xFE) {
 		if (x >= dpi->left + dpi->width ||
-				x + _screen.width*2 <= dpi->left ||
+				x + _screen.width * 2 <= dpi->left ||
 				y >= dpi->top + dpi->height ||
 				y + _screen.height <= dpi->top)
 					return x;
@@ -652,10 +652,11 @@
 switch_color:;
 			if (real_color & IS_PALETTE_COLOR) {
 				_string_colorremap[1] = color;
-				_string_colorremap[2] = 215;
+				_string_colorremap[2] = _use_dos_palette ? 1 : 215;
 			} else {
-				_string_colorremap[1] = _string_colormap[color].text;
-				_string_colorremap[2] = _string_colormap[color].shadow;
+				uint palette = _use_dos_palette ? 1 : 0;
+				_string_colorremap[1] = _string_colormap[palette][color].text;
+				_string_colorremap[2] = _string_colormap[palette][color].shadow;
 			}
 			_color_remap_ptr = _string_colorremap;
 		}
--- a/src/graph_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/graph_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -26,7 +26,7 @@
 /************************/
 
 enum {
-	GRAPH_MAX_DATASETS = 16,
+	GRAPH_MAX_DATASETS = 32,
 	GRAPH_AXIS_LABEL_COLOUR = 16,
 	GRAPH_AXIS_LINE_COLOUR  = 215,
 
@@ -222,7 +222,7 @@
 					y = gw->top + x_axis_offset - (x_axis_offset * datapoint) / highest_value;
 
 					/* Draw the point. */
-					GfxFillRect(x-1, y-1, x+1, y+1, color);
+					GfxFillRect(x - 1, y - 1, x + 1, y + 1, color);
 
 					/* Draw the line connected to the previous point. */
 					if (prev_x != INVALID_DATAPOINT_POS) GfxDrawLine(prev_x, prev_y, x, y, color);
@@ -269,7 +269,7 @@
 			FOR_ALL_PLAYERS(p) {
 				if (!p->is_active) continue;
 
-				DrawPlayerIcon(p->index, 4, 18+p->index*12);
+				DrawPlayerIcon(p->index, 4, 18 + p->index * 12);
 
 				SetDParam(0, p->name_1);
 				SetDParam(1, p->name_2);
@@ -331,7 +331,7 @@
 	const Player* p;
 	uint excluded_players = _legend_excluded_players;
 	byte nums;
-	int mo,yr;
+	int mo, yr;
 
 	/* Exclude the players which aren't valid */
 	FOR_ALL_PLAYERS(p) {
@@ -909,7 +909,7 @@
 
 void ShowCompanyLeagueTable()
 {
-	BaseWindow::AllocateFront(&_company_league_desc,0);
+	BaseWindow::AllocateFront(&_company_league_desc, 0);
 }
 
 /*****************************/
--- a/src/helpers.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/helpers.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -44,7 +44,7 @@
 
 /** Add new item at the end of Engine List
  * @param el list o which to add an engine
- * @param eif engine to add to the list
+ * @param eid engine to add to the list
  */
 void EngList_Add(EngineList *el, EngineID eid)
 {
@@ -81,7 +81,7 @@
  * @param el list to be sorted
  * @param compare function for evaluation of the quicksort
  * @param begin start of sorting
- * @param count of items to be sorted
+ * @param num_items count of items to be sorted
  */
 void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items)
 {
--- a/src/industry.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/industry.h	Sat Apr 21 08:23:57 2007 +0000
@@ -13,6 +13,7 @@
 
 enum {
 	INVALID_INDUSTRY = 0xFFFF,
+	NUM_INDUSTRYTYPES = 37,
 	INDUTILE_NOANIM = 0xFF,        ///< flag to mark industry tiles as having no animation
 };
 
--- a/src/industry_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/industry_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -67,9 +67,9 @@
 
 	assert(IsTileType(tile, MP_INDUSTRY));
 
-	for (iloop = IT_COAL_MINE; iloop < IT_END; iloop += 1) {
+	for (iloop = IT_COAL_MINE; iloop < NUM_INDUSTRYTYPES; iloop += 1) {
 		if (IS_BYTE_INSIDE(this_type, industry_gfx_Solver[iloop].MinGfx,
-				industry_gfx_Solver[iloop].MaxGfx+1)) {
+				industry_gfx_Solver[iloop].MaxGfx + 1)) {
 			return iloop;
 		}
 	}
@@ -82,12 +82,12 @@
  * This will ensure at once : proper access and
  * not allowing modifications of it.
  * @param thistype of industry (which is the index in _industry_specs)
- * @pre thistype < IT_END
+ * @pre thistype < NUM_INDUSTRYTYPES
  * @return a pointer to the corresponding industry spec
  **/
 const IndustrySpec *GetIndustrySpec(IndustryType thistype)
 {
-	assert(thistype < IT_END);
+	assert(thistype < NUM_INDUSTRYTYPES);
 	return &_industry_specs[thistype];
 }
 
@@ -137,8 +137,7 @@
 
 static void IndustryDrawSugarMine(const TileInfo *ti)
 {
-	const DrawIndustrySpec1Struct *d;
-	uint32 image;
+	const DrawIndustryAnimationStruct *d;
 
 	if (!IsIndustryCompleted(ti->tile)) return;
 
@@ -146,23 +145,23 @@
 
 	AddChildSpriteScreen(SPR_IT_SUGAR_MINE_SIEVE + d->image_1, PAL_NONE, d->x, 0);
 
-	image = d->image_2;
-	if (image != 0) AddChildSpriteScreen(SPR_IT_SUGAR_MINE_CLOUDS + image - 1, PAL_NONE, 8, 41);
+	if (d->image_2 != 0) {
+		AddChildSpriteScreen(SPR_IT_SUGAR_MINE_CLOUDS + d->image_2 - 1, PAL_NONE, 8, 41);
+	}
 
-	image = d->image_3;
-	if (image != 0) {
-		AddChildSpriteScreen(SPR_IT_SUGAR_MINE_PILE + image - 1, PAL_NONE,
-			_drawtile_proc1_x[image - 1], _drawtile_proc1_y[image - 1]);
+	if (d->image_3 != 0) {
+		AddChildSpriteScreen(SPR_IT_SUGAR_MINE_PILE + d->image_3 - 1, PAL_NONE,
+			_drawtile_proc1[d->image_3 - 1].x, _drawtile_proc1[d->image_3 - 1].y);
 	}
 }
 
 static void IndustryDrawToffeeQuarry(const TileInfo *ti)
 {
-	int x = 0;
+	uint8 x = 0;
 
 	if (IsIndustryCompleted(ti->tile)) {
-		x = _industry_anim_offs[GetIndustryAnimationState(ti->tile)];
-		if ( (byte)x == 0xFF)
+		x = _industry_anim_offs_toffee[GetIndustryAnimationState(ti->tile)];
+		if (x == 0xFF)
 			x = 0;
 	}
 
@@ -173,7 +172,7 @@
 static void IndustryDrawBubbleGenerator( const TileInfo *ti)
 {
 	if (IsIndustryCompleted(ti->tile)) {
-		AddChildSpriteScreen(SPR_IT_BUBBLE_GENERATOR_BUBBLE, PAL_NONE, 5, _industry_anim_offs_2[GetIndustryAnimationState(ti->tile)]);
+		AddChildSpriteScreen(SPR_IT_BUBBLE_GENERATOR_BUBBLE, PAL_NONE, 5, _industry_anim_offs_bubbles[GetIndustryAnimationState(ti->tile)]);
 	} else {
 		AddChildSpriteScreen(SPR_IT_BUBBLE_GENERATOR_SPRING, PAL_NONE, 3, 67);
 	}
@@ -181,12 +180,12 @@
 
 static void IndustryDrawToyFactory(const TileInfo *ti)
 {
-	const DrawIndustrySpec4Struct *d;
+	const DrawIndustryAnimationStruct *d;
 
-	d = &_industry_anim_offs_3[GetIndustryAnimationState(ti->tile)];
+	d = &_industry_anim_offs_toys[GetIndustryAnimationState(ti->tile)];
 
 	if (d->image_1 != 0xFF) {
-		AddChildSpriteScreen(SPR_IT_TOY_FACTORY_CLAY, PAL_NONE, 50 - d->image_1 * 2, 96 + d->image_1);
+		AddChildSpriteScreen(SPR_IT_TOY_FACTORY_CLAY, PAL_NONE, d->x, 96 + d->image_1);
 	}
 
 	if (d->image_2 != 0xFF) {
@@ -200,13 +199,13 @@
 static void IndustryDrawCoalPlantSparks(const TileInfo *ti)
 {
 	if (IsIndustryCompleted(ti->tile)) {
-		uint image = GetIndustryAnimationState(ti->tile);
+		uint8 image = GetIndustryAnimationState(ti->tile);
 
 		if (image != 0 && image < 7) {
 			AddChildSpriteScreen(image + SPR_IT_POWER_PLANT_TRANSFORMERS,
 				PAL_NONE,
-				_coal_plant_sparks_x[image - 1],
-				_coal_plant_sparks_y[image - 1]
+				_coal_plant_sparks[image - 1].x,
+				_coal_plant_sparks[image - 1].y
 			);
 		}
 	}
@@ -412,7 +411,7 @@
 		if ((_tick_counter & 3) == 0) {
 			m = GetIndustryAnimationState(tile);
 
-			if (_industry_anim_offs[m] == 0xFF) {
+			if (_industry_anim_offs_toffee[m] == 0xFF) {
 				SndPlayTileFx(SND_30_CARTOON_SOUND, tile);
 			}
 
@@ -458,23 +457,22 @@
 		if ((_tick_counter & 1) == 0) {
 			m = GetIndustryAnimationState(tile) + 1;
 
-			if (m == 1) {
-				SndPlayTileFx(SND_2C_MACHINERY, tile);
-			} else if (m == 23) {
-				SndPlayTileFx(SND_2B_COMEDY_HIT, tile);
-			} else if (m == 28) {
-				SndPlayTileFx(SND_2A_EXTRACT_AND_POP, tile);
+			switch (m) {
+				case  1: SndPlayTileFx(SND_2C_MACHINERY, tile); break;
+				case 23: SndPlayTileFx(SND_2B_COMEDY_HIT, tile); break;
+				case 28: SndPlayTileFx(SND_2A_EXTRACT_AND_POP, tile); break;
+				default:
+					if (m >= 50) {
+						int n = GetIndustryAnimationLoop(tile) + 1;
+						m = 0;
+						if (n >= 8) {
+							n = 0;
+							DeleteAnimatedTile(tile);
+						}
+						SetIndustryAnimationLoop(tile, n);
+					}
 			}
 
-			if (m >= 50) {
-				int n = GetIndustryAnimationLoop(tile) + 1;
-				m = 0;
-				if (n >= 8) {
-					n = 0;
-					DeleteAnimatedTile(tile);
-				}
-				SetIndustryAnimationLoop(tile, n);
-			}
 			SetIndustryAnimationState(tile, m);
 			MarkTileDirtyByTile(tile);
 		}
@@ -497,7 +495,7 @@
 	case GFX_OILWELL_ANIMATED_2:
 	case GFX_OILWELL_ANIMATED_3:
 		if ((_tick_counter & 7) == 0) {
-			bool b = CHANCE16(1,7);
+			bool b = CHANCE16(1, 7);
 			IndustryGfx gfx = GetIndustryGfx(tile);
 
 			m = GetIndustryAnimationState(tile) + 1;
@@ -706,7 +704,7 @@
 		break;
 
 	case GFX_POWERPLANT_SPARKS:
-		if (CHANCE16(1,3)) {
+		if (CHANCE16(1, 3)) {
 			SndPlayTileFx(SND_0C_ELECTRIC_SPARK, tile);
 			AddAnimatedTile(tile);
 		}
@@ -965,7 +963,7 @@
 
 	/* play a sound? */
 	if ((i->counter & 0x3F) == 0) {
-		if (CHANCE16R(1,14,r) && (num=_industry_sounds[i->type][0]) != 0) {
+		if (CHANCE16R(1, 14, r) && (num = _industry_sounds[i->type][0]) != 0) {
 			SndPlayTileFx(
 				(SoundFx)(_industry_sounds[i->type][1] + (((r >> 16) * num) >> 16)),
 				i->xy);
@@ -1591,7 +1589,7 @@
 	const IndustrySpec *ind_spc;
 
 	/* Find the total amount of industries */
-	for (it = IT_COAL_MINE; it < IT_END; it++) {
+	for (it = IT_COAL_MINE; it < NUM_INDUSTRYTYPES; it++) {
 		int num;
 
 		ind_spc = GetIndustrySpec(it);
@@ -1611,7 +1609,7 @@
 
 	SetGeneratingWorldProgress(GWP_INDUSTRY, i);
 
-	for (it = IT_COAL_MINE; it < IT_END; it++) {
+	for (it = IT_COAL_MINE; it < NUM_INDUSTRYTYPES; it++) {
 		/* Once the number of industries has been determined, let's really create them.
 		 * The test for chance allows us to try create industries that are available only
 		 * for this landscape.
@@ -1669,7 +1667,7 @@
 					SetDParam(1, i->index);
 					AddNewsItem(
 						percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
-						NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ECONOMY, 0),
+						NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
 						i->xy + TileDiffXY(1, 1), 0
 					);
 				}
@@ -1683,7 +1681,7 @@
 		SetDParam(0, i->index);
 		AddNewsItem(
 			indspec->closure_text,
-			NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_OPENCLOSE, 0),
+			NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0),
 			i->xy + TileDiffXY(1, 1), 0
 		);
 	}
@@ -1693,12 +1691,13 @@
 static void UpdateIndustryStatistics(Industry *i)
 {
 	byte pct;
+	bool refresh = false;
 
 	if (i->produced_cargo[0] != CT_INVALID) {
 		pct = 0;
 		if (i->last_mo_production[0] != 0) {
 			i->last_prod_year = _cur_year;
-			pct = min(i->last_mo_transported[0] * 256 / i->last_mo_production[0],255);
+			pct = min(i->last_mo_transported[0] * 256 / i->last_mo_production[0], 255);
 		}
 		i->pct_transported[0] = pct;
 
@@ -1707,13 +1706,14 @@
 
 		i->total_transported[0] = i->last_mo_transported[0];
 		i->last_mo_transported[0] = 0;
+		refresh = true;
 	}
 
 	if (i->produced_cargo[1] != CT_INVALID) {
 		pct = 0;
 		if (i->last_mo_production[1] != 0) {
 			i->last_prod_year = _cur_year;
-			pct = min(i->last_mo_transported[1] * 256 / i->last_mo_production[1],255);
+			pct = min(i->last_mo_transported[1] * 256 / i->last_mo_production[1], 255);
 		}
 		i->pct_transported[1] = pct;
 
@@ -1722,10 +1722,11 @@
 
 		i->total_transported[1] = i->last_mo_transported[1];
 		i->last_mo_transported[1] = 0;
+		refresh = true;
 	}
 
 
-	if (i->produced_cargo[0] != CT_INVALID || i->produced_cargo[1] != CT_INVALID)
+	if (refresh)
 		InvalidateWindow(WC_INDUSTRY_VIEW, i->index);
 
 	if (i->prod_level == 0) {
@@ -1750,11 +1751,11 @@
 	IndustryType rndtype, j;     // Loop controlers
 	const IndustrySpec *ind_spc;
 	uint num = 0;
-	ProbabilityHelper cumulative_probs[IT_END]; // probability collector
+	ProbabilityHelper cumulative_probs[NUM_INDUSTRYTYPES]; // probability collector
 	uint16 probability_max = 0;
 
 	/* Generate a list of all possible industries that can be built. */
-	for (j = 0; j < IT_END; j++) {
+	for (j = 0; j < NUM_INDUSTRYTYPES; j++) {
 		byte chance = GetIndustrySpec(j)->appear_ingame[_opt.landscape];
 
 		/* if appearing chance for this landscape is above 0, this industry can be chosen */
@@ -1768,7 +1769,7 @@
 
 	/* Find a random type, with maximum being what has been evaluate above*/
 	rndtype = RandomRange(probability_max);
-	for (j = 0; j < IT_END; j++) {
+	for (j = 0; j < NUM_INDUSTRYTYPES; j++) {
 		/* and choose the index of the industry that matches as close as possible this random type */
 		if (cumulative_probs[j].prob >= rndtype) break;
 	}
@@ -1789,7 +1790,7 @@
 	SetDParam(0, ind_spc->name);
 	SetDParam(1, ind->town->index);
 	AddNewsItem(ind_spc->new_industry_text,
-		NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0);
+		NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0);
 }
 
 static void ChangeIndustryProduction(Industry *i)
@@ -1808,9 +1809,9 @@
 			if ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE)
 				only_decrease = true;
 
-			if (only_decrease || CHANCE16(1,3)) {
+			if (only_decrease || CHANCE16(1, 3)) {
 				/* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
-				if (!only_decrease && (i->pct_transported[0] > 153) != CHANCE16(1,3)) {
+				if (!only_decrease && (i->pct_transported[0] > 153) != CHANCE16(1, 3)) {
 					/* Increase production */
 					if (i->prod_level != 0x80) {
 						byte b;
@@ -1847,7 +1848,7 @@
 
 		case INDUSTRYLIFE_CLOSABLE:
 			/* maybe close */
-			if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1,2)) {
+			if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
 				i->prod_level = 0;
 				str = indspec->closure_text;
 			}
@@ -1856,7 +1857,7 @@
 
 	if (str != STR_NULL) {
 		SetDParam(0, i->index);
-		AddNewsItem(str, NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, str == indspec->closure_text ? NT_OPENCLOSE : NT_ECONOMY, 0), i->xy + TileDiffXY(1, 1), 0);
+		AddNewsItem(str, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, str == indspec->closure_text ? NT_OPENCLOSE : NT_ECONOMY, 0), i->xy + TileDiffXY(1, 1), 0);
 	}
 }
 
--- a/src/industry_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/industry_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -37,7 +37,7 @@
 	case WE_PAINT:
 		w->DrawWidgets();
 		if (_thd.place_mode == 1 && _thd.window_class == WC_BUILD_INDUSTRY) {
-			int ind_type = _build_industry_types[_opt_ptr->landscape][WP(w,def_d).data_1];
+			int ind_type = _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1];
 
 			SetDParam(0, (_price.build_industry >> 5) * GetIndustrySpec(ind_type)->cost_multiplier);
 			DrawStringCentered(85, w->Height() - 21, STR_482F_COST, 0);
@@ -48,12 +48,12 @@
 		int wid = e->we.click.widget;
 		if (wid >= 3) {
 			if (HandlePlacePushButton(w, wid, SPR_CURSOR_INDUSTRY, 1, NULL))
-				WP(w,def_d).data_1 = wid - 3;
+				WP(w, def_d).data_1 = wid - 3;
 		}
 	} break;
 
 	case WE_PLACE_OBJ:
-		if (DoCommandP(e->we.place.tile, _build_industry_types[_opt_ptr->landscape][WP(w,def_d).data_1], 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY)))
+		if (DoCommandP(e->we.place.tile, _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1], 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY)))
 			ResetObjectToPlace();
 		break;
 
@@ -274,7 +274,7 @@
 void ShowBuildIndustryWindow()
 {
 	if (!IsValidPlayer(_current_player)) return;
-	BaseWindow::AllocateFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt_ptr->landscape],0);
+	BaseWindow::AllocateFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt_ptr->landscape], 0);
 }
 
 static inline bool isProductionMinimum(const Industry *i, int pt) {
@@ -330,7 +330,7 @@
 			DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), 127, STR_482B_TRANSPORTED, 0);
 			/* Let's put out those buttons.. */
 			if (IsProductionAlterable(i)) {
-				DrawArrowButtons(5, 127, 3, (WP(w,vp2_d).data_2 == 1) ? WP(w,vp2_d).data_3 : 0,
+				DrawArrowButtons(5, 127, 3, (WP(w, vp2_d).data_2 == 1) ? WP(w, vp2_d).data_3 : 0,
 						!isProductionMinimum(i, 0), !isProductionMaximum(i, 0));
 			}
 
@@ -341,7 +341,7 @@
 				DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), 137, STR_482B_TRANSPORTED, 0);
 				/* Let's put out those buttons.. */
 				if (IsProductionAlterable(i)) {
-					DrawArrowButtons(5, 137, 3, (WP(w,vp2_d).data_2 == 2) ? WP(w,vp2_d).data_3 : 0,
+					DrawArrowButtons(5, 137, 3, (WP(w, vp2_d).data_2 == 2) ? WP(w, vp2_d).data_3 : 0,
 						!isProductionMinimum(i, 1), !isProductionMaximum(i, 1));
 				}
 			}
@@ -379,11 +379,11 @@
 					UpdateIndustryProduction(i);
 					w->SetDirty();
 					w->autorepeat_timeout = 5;
-					WP(w,vp2_d).data_2 = line+1;
-					WP(w,vp2_d).data_3 = (x < 15 ? 1 : 2);
+					WP(w, vp2_d).data_2 = line + 1;
+					WP(w, vp2_d).data_3 = (x < 15 ? 1 : 2);
 				} else if (IS_INT_INSIDE(x, 34, 160)) {
 					/* clicked the text */
-					WP(w,vp2_d).data_1 = line;
+					WP(w, vp2_d).data_1 = line;
 					SetDParam(0, i->production_rate[line] * 8);
 					ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_CONFIG_GAME_PRODUCTION, 10, 100, w, CS_ALPHANUMERAL);
 				}
@@ -392,20 +392,20 @@
 		case 6:
 			i = GetIndustry(w->window_number);
 			ScrollMainWindowToTile(i->xy + TileDiffXY(1, 1));
-		}	break;
+		} break;
 
 		}
 		break;
 	case WE_TIMEOUT:
-		WP(w,vp2_d).data_2 = 0;
-		WP(w,vp2_d).data_3 = 0;
+		WP(w, vp2_d).data_2 = 0;
+		WP(w, vp2_d).data_3 = 0;
 		w->SetDirty();
 		break;
 
 	case WE_ON_EDIT_TEXT:
 		if (e->we.edittext.str[0] != '\0') {
 			Industry* i = GetIndustry(w->window_number);
-			int line = WP(w,vp2_d).data_1;
+			int line = WP(w, vp2_d).data_1;
 
 			i->production_rate[line] = clampu(atoi(e->we.edittext.str), 0, 255);
 			UpdateIndustryProduction(i);
@@ -449,9 +449,9 @@
 
 	if (w != NULL) {
 		w->flags4 |= WF_DISABLE_VP_SCROLL;
-		WP(w,vp2_d).data_1 = 0;
-		WP(w,vp2_d).data_2 = 0;
-		WP(w,vp2_d).data_3 = 0;
+		WP(w, vp2_d).data_1 = 0;
+		WP(w, vp2_d).data_2 = 0;
+		WP(w, vp2_d).data_3 = 0;
 		AssignWindowViewport(w, 3, 17, 0xFE, 0x56, GetIndustry(w->window_number)->xy + TileDiffXY(1, 1), 1);
 	}
 }
@@ -599,7 +599,7 @@
 		SetVScrollCount(w, _num_industry_sort);
 
 		w->DrawWidgets();
-		DoDrawString(_industry_sort_order & 1 ? DOWNARROW : UPARROW, _indicator_positions[_industry_sort_order>>1], 15, 0x10);
+		DoDrawString(_industry_sort_order & 1 ? DOWNARROW : UPARROW, _indicator_positions[_industry_sort_order >> 1], 15, 0x10);
 
 		p = w->vscroll.pos;
 		n = 0;
@@ -617,13 +617,13 @@
 					SetDParam(4, i->total_production[1]);
 					SetDParam(5, i->pct_transported[0] * 100 >> 8);
 					SetDParam(6, i->pct_transported[1] * 100 >> 8);
-					DrawString(4, 28+n*10, STR_INDUSTRYDIR_ITEM_TWO, 0);
+					DrawString(4, 28 + n * 10, STR_INDUSTRYDIR_ITEM_TWO, 0);
 				} else {
 					SetDParam(3, i->pct_transported[0] * 100 >> 8);
-					DrawString(4, 28+n*10, STR_INDUSTRYDIR_ITEM, 0);
+					DrawString(4, 28 + n * 10, STR_INDUSTRYDIR_ITEM, 0);
 				}
 			} else {
-				DrawString(4, 28+n*10, STR_INDUSTRYDIR_ITEM_NOPROD, 0);
+				DrawString(4, 28 + n * 10, STR_INDUSTRYDIR_ITEM_NOPROD, 0);
 			}
 			p++;
 			if (++n == w->vscroll.cap) break;
@@ -633,25 +633,25 @@
 	case WE_CLICK:
 		switch (e->we.click.widget) {
 		case 3: {
-			_industry_sort_order = _industry_sort_order==0 ? 1 : 0;
+			_industry_sort_order = _industry_sort_order == 0 ? 1 : 0;
 			_industry_sort_dirty = true;
 			w->SetDirty();
 		} break;
 
 		case 4: {
-			_industry_sort_order = _industry_sort_order==2 ? 3 : 2;
+			_industry_sort_order = _industry_sort_order == 2 ? 3 : 2;
 			_industry_sort_dirty = true;
 			w->SetDirty();
 		} break;
 
 		case 5: {
-			_industry_sort_order = _industry_sort_order==4 ? 5 : 4;
+			_industry_sort_order = _industry_sort_order == 4 ? 5 : 4;
 			_industry_sort_dirty = true;
 			w->SetDirty();
 		} break;
 
 		case 6: {
-			_industry_sort_order = _industry_sort_order==6 ? 7 : 6;
+			_industry_sort_order = _industry_sort_order == 6 ? 7 : 6;
 			_industry_sort_dirty = true;
 			w->SetDirty();
 		} break;
--- a/src/landscape.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/landscape.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -76,13 +76,13 @@
 		break;
 
 	case SLOPE_S:
-		y^=0xF;
+		y ^= 0xF;
 		if ( (x - y) >= 0)
 			z = (x - y) >> 1;
 		break;
 
 	case SLOPE_SW:
-		z = (x>>1) + 1;
+		z = (x >> 1) + 1;
 		break;
 
 	case SLOPE_E:
@@ -97,12 +97,12 @@
 		break;
 
 	case SLOPE_SE:
-		z = (y>>1) + 1;
+		z = (y >> 1) + 1;
 		break;
 
 	case SLOPE_WSE:
 		z = 8;
-		y^=0xF;
+		y ^= 0xF;
 		if (x - y < 0)
 			z += (x - y) >> 1;
 		break;
@@ -114,7 +114,7 @@
 		break;
 
 	case SLOPE_NW:
-		z = (y^0xF)>>1;
+		z = (y ^ 0xF) >> 1;
 		break;
 
 	case SLOPE_NWS:
@@ -124,7 +124,7 @@
 		break;
 
 	case SLOPE_NE:
-		z = (x^0xF)>>1;
+		z = (x ^ 0xF) >> 1;
 		break;
 
 	case SLOPE_ENW:
@@ -141,19 +141,19 @@
 		break;
 
 	case SLOPE_STEEP_S:
-		z = 1 + ((x+y)>>1);
+		z = 1 + ((x + y) >> 1);
 		break;
 
 	case SLOPE_STEEP_W:
-		z = 1 + ((x+(y^0xF))>>1);
+		z = 1 + ((x + (y ^ 0xF)) >> 1);
 		break;
 
 	case SLOPE_STEEP_N:
-		z = 1 + (((x^0xF)+(y^0xF))>>1);
+		z = 1 + (((x ^ 0xF) + (y ^ 0xF)) >> 1);
 		break;
 
 	case SLOPE_STEEP_E:
-		z = 1 + (((x^0xF)+(y^0xF))>>1);
+		z = 1 + (((x ^ 0xF) + (y ^ 0xF)) >> 1);
 		break;
 
 		default: break;
@@ -385,8 +385,8 @@
 	int32 cost, ret, money;
 	int ex;
 	int ey;
-	int sx,sy;
-	int x,y;
+	int sx, sy;
+	int x, y;
 	bool success = false;
 
 	if (p1 >= MapSize()) return CMD_ERROR;
@@ -435,7 +435,7 @@
 
 #define TILELOOP_BITS 4
 #define TILELOOP_SIZE (1 << TILELOOP_BITS)
-#define TILELOOP_ASSERTMASK ((TILELOOP_SIZE-1) + ((TILELOOP_SIZE-1) << MapLogX()))
+#define TILELOOP_ASSERTMASK ((TILELOOP_SIZE - 1) + ((TILELOOP_SIZE - 1) << MapLogX()))
 #define TILELOOP_CHKMASK (((1 << (MapLogX() - TILELOOP_BITS))-1) << TILELOOP_BITS)
 
 void RunTileLoop()
--- a/src/lang/brazilian_portuguese.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -1137,6 +1137,14 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Direita
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Raio de atração de janelas: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Raio de atração de janelas: {ORANGE}desativado
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Velocidade de crescimento de cidade: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Nenhum
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Devagar
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Rápido
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Muito rápido
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporção de cidades que irão crescer duas vezes mais rápido: {ORANGE}1 em {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporção de cidades que irão crescer duas vezes mais rápido: {ORANGE}Nenhum
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construção
--- a/src/lang/bulgarian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/bulgarian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -753,6 +753,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Малък
 STR_02A2_MEDIUM                                                 :{BLACK}Среден
 STR_02A3_LARGE                                                  :{BLACK}ГолÑм
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Град
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Избери големина на града
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Големина на града:
 
@@ -1145,6 +1146,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Много бърза
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}СъразмерноÑÑ‚ на градове който ще пораÑнат двойно по-бързо: {ORANGE}1 в {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}СъразмерноÑÑ‚ на градове който ще пораÑнат двойно по-бързо: {ORANGE}Ðито един
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Множител за големината на града: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}ИнтерфейÑ
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Строене
--- a/src/lang/catalan.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/catalan.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Petit
 STR_02A2_MEDIUM                                                 :{BLACK}Mitjà
 STR_02A3_LARGE                                                  :{BLACK}Gran
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Ciutat
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Selecciona mida de població
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Mida de població:
 
@@ -1143,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Molt ràpida
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporció de ciutats que creixeran el doble de ràpid: {ORANGE}1 de cada {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporció de ciutats que creixeran el doble de ràpid: {ORANGE}Cap
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Multiplicador de mida de ciutat inicial: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interficie
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construcció
--- a/src/lang/czech.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/czech.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -809,6 +809,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Malé
 STR_02A2_MEDIUM                                                 :{BLACK}Středni
 STR_02A3_LARGE                                                  :{BLACK}Velké
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Město
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Zvol velikost města:
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Velikost města:
 
@@ -1201,6 +1202,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :velmi rychlá
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Podíl měst, které budou růst dvakrát tak rychle: {ORANGE}1 z {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Podíl měst, které budou růst dvakrát tak rychle: {ORANGE}žádné
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Násobitel původní velikosti města: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Ovládaní
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Výstavba
--- a/src/lang/danish.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/danish.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Lille
 STR_02A2_MEDIUM                                                 :{BLACK}Mellem
 STR_02A3_LARGE                                                  :{BLACK}Stor
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}By
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Vælg bystørrelse
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Bystørrelse:
 
@@ -1143,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Meget hurtig
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Andel af byer der vil vokse dobbelt så hurtigt: {ORANGE}1 af {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Andel af byer der vil vokse dobbelt så hurtigt: {ORANGE}Ingen
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Startværdi for bystørrelsesfaktor: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Brugerflade
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstruktion
--- a/src/lang/dutch.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/dutch.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Klein
 STR_02A2_MEDIUM                                                 :{BLACK}Middel
 STR_02A3_LARGE                                                  :{BLACK}Groot
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Stad
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Kies stadsgrootte
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Stadsgrootte:
 
@@ -1135,6 +1136,15 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Rechts
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Vaste plaats venster radius: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Vaste plaats venster radius: {ORANGE}uit
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Groeisnelheid steden: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Niet
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Langzaam
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normaal
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Snel
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Heel snel
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Verhouding van steden die twee keer zo snel groeien: {ORANGE}1 in {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Verhouding van steden die twee keer zo snel groeien: {ORANGE}Niet
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Stad groei indicator: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Constructie
@@ -3105,7 +3115,7 @@
 STR_TREE_GENERATION                                             :{BLACK}Bos plaatsing
 STR_UNMOVABLE_GENERATION                                        :{BLACK}Onverplaatsbare generatie
 STR_CLEARING_TILES                                              :{BLACK}Ruig en
-STR_SETTINGUP_GAME                                              :{BLACK}Spel aan het instellen
+STR_SETTINGUP_GAME                                              :{BLACK}Spel aan het configureren
 STR_PREPARING_TILELOOP                                          :{BLACK}Bezig met vlakken
 STR_PREPARING_GAME                                              :{BLACK}Voorbereiden spel
 STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Deze aktie past de moeilijkheidsgraag aan naam custom
--- a/src/lang/english.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/english.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Small
 STR_02A2_MEDIUM                                                 :{BLACK}Medium
 STR_02A3_LARGE                                                  :{BLACK}Large
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}City
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Select town size
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Town size:
 
@@ -1141,8 +1142,9 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Fast
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Very fast
-STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proportion of towns that will grow twice as fast: {ORANGE}1 in {STRING1}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proportion of towns that will grow twice as fast: {ORANGE}None
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proportion of towns that will become cities: {ORANGE}1 in {STRING1}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proportion of towns that will become cities: {ORANGE}None
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Initial city size multiplier: {ORANGE}{STRING1}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construction
--- a/src/lang/esperanto.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/esperanto.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -752,6 +752,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Malgranda
 STR_02A2_MEDIUM                                                 :{BLACK}Mezgranda
 STR_02A3_LARGE                                                  :{BLACK}Granda
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Urbo
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Elektu urban grandecon
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Urba grandeco:
 
@@ -1144,6 +1145,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Tre rapide
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Grandeco de urboj kiuj duoble rapide kreskas: {ORANGE}1 en {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Grandeco de urboj kiuj duoble rapide kreskas: {ORANGE}Ne
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Komenca urbgrandeca multobligo: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfaco
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstruado
--- a/src/lang/estonian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/estonian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -851,6 +851,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Väike
 STR_02A2_MEDIUM                                                 :{BLACK}Keskmine
 STR_02A3_LARGE                                                  :{BLACK}Suur
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Linn
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Vali linna suurus
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Linna suurus:
 
@@ -1241,6 +1242,9 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normaalne
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Kiire
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Väga Kiire
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Topeltkiirusel suurenevaid linnu: {ORANGE}1 iga {STRING} linna kohta
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Topeltkiirusel suurenevaid linnu: {ORANGE}puudub
+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}Ehitamine
@@ -3260,4 +3264,13 @@
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Kanna Raha: {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
 
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Läbipaistvusvalikud
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Vaheta jaamamärkide läbipaistvust
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Vaheta puude läbipaistvust
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Vaheta majade läbipaistvust
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Vaheta tööstusehitiste läbipaistvust
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Vaheta läbipaistvust ehitistel nagu: jaamad, depood, vahepunktid ja elektriliinid
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Vaheta sildade läbipaistvust
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Vaheta läbipaistvust objektidel, nagu: majakad, antennid ja võimalik, et tulevikus ka silmailu
--- a/src/lang/finnish.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/finnish.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Pieni
 STR_02A2_MEDIUM                                                 :{BLACK}Keskisuuri
 STR_02A3_LARGE                                                  :{BLACK}Suuri
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Kaupunki
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Valitse kaupungin koko.
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Kaupungin koko:
 
@@ -1143,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Erittäin nopea
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Kaksinkertaisella nopeudella kasvavien kaupunkien osuus: {ORANGE}1/{STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Kaksinkertaisella nopeudella kasvavien kaupunkien osuus: {ORANGE}0
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Kasvukerroin alussa: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Käyttöliittymä
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Rakentaminen
@@ -1903,8 +1905,8 @@
 STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY}: tuotanto vähenee 50{NBSP}%:lla.
 STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}{INDUSTRY}: hyönteisparvet aiheuttavat tuhoa!{}Tuotanto vähenee 50{NBSP}%:lla.
 STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...voidaan asettaa vain kartan reunoille.
-STR_INDUSTRY_PROD_GOUP                                          ::{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä enemmän!
-STR_INDUSTRY_PROD_GODOWN                                        ::{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä vähemmän!
+STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä enemmän!
+STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä vähemmän!
 
 ##id 0x5000
 STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Juna on tunnelissa.
--- a/src/lang/french.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/french.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -752,6 +752,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Petite
 STR_02A2_MEDIUM                                                 :{BLACK}Moyenne
 STR_02A3_LARGE                                                  :{BLACK}Grande
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Métropole
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Sélectionner la taille de la ville
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Taille:
 
@@ -1142,8 +1143,9 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normale
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Rapide
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Très rapide
-STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proportion des villes qui vont croitre deux fois plus vite: {ORANGE}1 sur {STRING}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proportion des villes qui vont croitre deux fois plus vite: {ORANGE}Aucune
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proportion des villes qui deviendront des métropoles: {ORANGE}1 sur {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proportion des villes qui deviendront des métropoles: {ORANGE}Aucune
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Multiplicateur de taille de ville initial: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construction
--- a/src/lang/german.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/german.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -752,6 +752,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Klein
 STR_02A2_MEDIUM                                                 :{BLACK}Mittel
 STR_02A3_LARGE                                                  :{BLACK}Groß
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Stadt
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Stadtgröße bestimmen
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Stadtgröße:
 
@@ -1143,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Sehr schnell
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Anteil der Städte die doppelt so schnell wachsen: {ORANGE}1 in {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Anteil der Städte die doppelt so schnell wachsen: {ORANGE}Keine
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Startmultiplikator der Stadtgröße: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Oberfläche
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstruktion
@@ -3162,6 +3164,7 @@
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Ãœberweise Geld: {LTBLUE}{CURRENCY}
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...diese Straße ist in kommunaler Trägerschaft
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...Straße verläuft in die falsche Richtung
 
 STR_TRANSPARENCY_TOOLB                                          :{WHITE}Transparenzoptionen
 STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Verändere die Transparenz für Stationsschilder
--- a/src/lang/hungarian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/hungarian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -817,6 +817,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Kicsi
 STR_02A2_MEDIUM                                                 :{BLACK}Közepes
 STR_02A3_LARGE                                                  :{BLACK}Nagy
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Város
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}A város méretének kiválasztása
 STR_02A5_TOWN_SIZE                                              :{YELLOW}A város mérete:
 
@@ -1209,6 +1210,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Nagyon gyors
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Dupla gyorsan növekvő városok aránya: {ORANGE}{STRING} városból 1
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Dupla gyorsan növekvő városok aránya: {ORANGE}Nincsennek
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Kezdeti városméret-szorzó: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Megjelenítés
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Építkezés
--- a/src/lang/italian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/italian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -753,6 +753,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Piccola
 STR_02A2_MEDIUM                                                 :{BLACK}Media
 STR_02A3_LARGE                                                  :{BLACK}Grande
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Metropoli
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Seleziona la dimensione della città
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Dimensione città:
 
@@ -1021,11 +1022,11 @@
 STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Mostra velocità veicoli sulla barra di stato: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Consenti la costruzione sui pendii e coste: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Consenti aree di copertura più realistiche: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Consenti la rimozione di più strade, ponti, etc. delle città: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Consenti la rimozione di strade, ponti, etc. delle città: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Consenti la costruzione di treni molto lunghi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Abilita accelerazione realistica per i treni: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Impredisci a treni e navi di curvare a 90°: {ORANGE}{STRING} {LTBLUE} (richiede NPF)
-STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Unisci le stazioni ferroviari costruite una accanto all'altra: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Impedisci a treni e navi di curvare a 90°: {ORANGE}{STRING} {LTBLUE} (richiede NPF)
+STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Unisci le stazioni ferroviarie costruite una accanto all'altra: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Lascia stazione quando una qualsiasi merce è a pieno carico: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Usa l'algoritmo di caricamento migliorato: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Carica i veicoli gradualmente: {ORANGE}{STRING}
@@ -1035,7 +1036,7 @@
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Consenti gli ordini 'Vai al deposito': {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Consenti la costruzione di industrie primarie: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Consenti più industrie dello stesso tipo nella stessa città: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Consenti la costruzione di industrie uguali anche se molto vicine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Consenti la costruzione di industrie uguali anche molto vicine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mostra sempre la data lunga nella barra di stato: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Mostra i segnali sul lato di guida: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Mostra la finestra delle finanze alla fine dell'anno: {ORANGE}{STRING}
@@ -1083,7 +1084,7 @@
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :Oraria
 STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Altitudine delle mappe pianeggiante: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Max estensione stazioni: {ORANGE}{STRING} {RED}Attenzione: valori alti rallentano il gioco
+STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Max estensione stazioni: {ORANGE}{STRING} {RED}Nota: Valori alti rallentano il gioco
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Manutieni automaticamente gli elicotteri presso gli eliporti: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Apri strumenti terreno assieme a quelli di costruzione: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Inverti direzione di scorrimento della mappa: {ORANGE}{STRING}
@@ -1112,14 +1113,14 @@
 STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Abilita la nuova IA (alpha): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Permetti le IA nelle partite multigiocatore (sperimentale): {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Intervallo manutenzione predefinito per i treni: {ORANGE}{STRING} giorni/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Intervallo manutenzione predefinito per i treni: {ORANGE}Disabilitato
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Intervallo manutenzione predefinito per gli automezzi: {ORANGE}{STRING} giorni/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Intervallo manutenzione predefinito per gli automezzi: {ORANGE}Disabilitato
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Intervallo manutenzione predefinito per gli aeromobili: {ORANGE}{STRING} giorni/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Intervallo manutenzione predefinito per gli aeromobili: {ORANGE}Disabilitato
-STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Intervallo manutenzione predefinito per le navi: {ORANGE}{STRING} giorni/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Intervallo manutenzione predefinito per le navi: {ORANGE}Disabilitato
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Intervallo manutenzione predefinito treni: {ORANGE}{STRING} giorni/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Intervallo manutenzione predefinito treni: {ORANGE}Disabilitato
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Intervallo manutenzione predefinito automezzi: {ORANGE}{STRING} giorni/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Intervallo manutenzione predefinito automezzi: {ORANGE}Disabilitato
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Intervallo manutenzione predefinito aeromobili: {ORANGE}{STRING} giorni/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Intervallo manutenzione predefinito aeromobili: {ORANGE}Disabilitato
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Intervallo manutenzione predefinito navi: {ORANGE}{STRING} giorni/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Intervallo manutenzione predefinito navi: {ORANGE}Disabilitato
 STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Disabilita manutenzione con i guasti veicoli disattivati: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Abilita limiti di velocità dei vagoni: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Disabilita ferrovie elettrificate: {ORANGE}{STRING}
@@ -1143,8 +1144,9 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normale
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Veloce
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Molto veloce
-STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Città che cresceranno a velocità doppia: {ORANGE}1 su {STRING}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Città che cresceranno a velocità doppia: {ORANGE}Nessuna
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Città che diventeranno metropoli: {ORANGE}1 su {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Città che diventeranno metropoli: {ORANGE}Nessuna
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Moltiplicatore iniziale dimensioni metropoli: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfaccia
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Costruzione
@@ -1157,7 +1159,7 @@
 STR_CONFIG_PATCHES_INT32                                        :{NUM}
 STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
 
-STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Cambia valore impostazione
+STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Cambia impostazione
 STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Alcuni degli intervalli sottostanti sono incompatibili con l'impostazione scelta! Valori ammessi: 5-90% e 30-800 giorni
 STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Usa YAPF per le navi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Usa YAPF per gli automezzi: {ORANGE}{STRING}
@@ -1613,7 +1615,7 @@
 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}L'edificio dele essere demolito prima
+STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}L'edificio deve essere demolito prima
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Popolazione: {ORANGE}{COMMA}{BLACK}  Case: {ORANGE}{COMMA}
 STR_2007_RENAME_TOWN                                            :Rinomina città
@@ -1651,13 +1653,13 @@
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} da {STRING} a {STRING}
 STR_2028_BY                                                     :{YELLOW} (entro {DATE_SHORT})
 STR_202A_NONE                                                   :{ORANGE}Nessuno
-STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Servizi già sussidiati:
+STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Servizi già sovvenzionati:
 STR_202C_FROM_TO                                                :{ORANGE}{STRING} da {STATION} a {STATION}{YELLOW} ({COMPANY}
 STR_202D_UNTIL                                                  :{YELLOW}, fino al {DATE_SHORT})
 STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Offerta di sussidio scaduta:{}{}Il trasporto di {STRING} da {STRING} a {STRING} non darà più diritto a sovvenzioni.
-STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Sussidio terminato:{}{}servizio di {STRING} da {STATION} a {STATION} non è più sovvenzionato.
-STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Offerta di sussidio:{}{}Primo servizio di {STRING} da {STRING} a {STRING} riceverà un'anno di sussidio dall'autorità locale!
-STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato da {COMPANY}!{}{}servizio di {STRING} da {STATION} a {STATION} verrà pagato il 50% in più per il prossimo anno!
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Sussidio terminato:{}{}Il trasporto di {STRING} da {STATION} a {STATION} non è più sovvenzionato.
+STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Offerta di sussidio:{}{}Il primo servizio di {STRING} da {STRING} a {STRING} riceverà un'anno di sovvenzioni dall'autorità locale!
+STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato alla {COMPANY}!{}{}Il trasporto di {STRING} da {STATION} a {STATION} verrà pagato il 50% in più per il prossimo anno!
 STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato alla {COMPANY}!{}{}Il trasporto di {STRING} da {STATION} a {STATION} verrà pagato il doppio per il prossimo anno!
 STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato alla {COMPANY}!{}{}Il trasporto di {STRING} da {STATION} a {STATION} verrà pagato il triplo per il prossimo anno!
 STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato alla {COMPANY}!{}{}Il trasporto di {STRING} da {STATION} a {STATION} verrà pagato il quadruplo per il prossimo anno!
@@ -2016,10 +2018,10 @@
 ############ range for difficulty levels ends
 
 ############ range for difficulty settings starts
-STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Numero max. di avversari: {ORANGE}{COMMA}
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Numero massimo di avversari: {ORANGE}{COMMA}
 STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Partenza avversari: {ORANGE}{STRING}
-STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Num. di città: {ORANGE}{STRING}
-STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Num. di industrie: {ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Numero di città: {ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Numero di industrie: {ORANGE}{STRING}
 STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Prestito massimo iniziale: {ORANGE}{CURRENCY}
 STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Tasso d'interesse iniziale: {ORANGE}{COMMA}%
 STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Costi d'esercizio dei veicoli: {ORANGE}{STRING.mp}
@@ -2050,8 +2052,8 @@
 STR_VERY_LOW                                                    :Molto basso
 STR_VERY_LOW.ms                                                 :Molto basso
 STR_VERY_LOW.mp                                                 :Molto bassi
+STR_VERY_LOW.fp                                                 :Molto basse
 STR_VERY_LOW.fs                                                 :Molto bassa
-STR_VERY_LOW.fp                                                 :Molto basse
 STR_6820_LOW                                                    :Basso
 STR_6820_LOW.ms                                                 :Basso
 STR_6820_LOW.mp                                                 :Bassi
@@ -2185,7 +2187,7 @@
 STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Stiamo cercando una compagnia di trasporti disposta a rilevare la nostra società.{}{} Vorrebbe acquistare la {COMPANY} per {CURRENCY}?
 STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Bancarotta!
 STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}La {COMPANY} è stata chiusa dai creditori e tutti i suoi beni sono stati venduti!
-STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Lanciata nuova compagnia di trasporti!
+STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Nuova compagnia di trasporti!
 STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}La {COMPANY} inizia a costruire vicino a {TOWN}!
 STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}Impossibile comprare la compagnia...
 STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Tariffe di pagamento merci
@@ -2219,8 +2221,8 @@
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vendi il 25% delle azioni
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Compra il 25% delle azioni di questa compagnia
 STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Vende il 25% delle azioni di questa compagnia
-STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}Impossibile comprare il 25% delle azioni di questa compagnia...
-STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}Impossibile vendere il 25% delle azioni di questa compagnia...
+STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}Impossibile comprare il 25% delle azioni...
+STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}Impossibile vendere il 25% delle azioni...
 STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% posseduto dalla {COMPANY})
 STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% posseduto dalla {COMPANY}{}   {COMMA}% posseduto dalla {COMPANY})
 STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}La {COMPANY} è stata rilevata dalla {COMPANY}!
--- a/src/lang/japanese.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/japanese.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}æ‘
 STR_02A2_MEDIUM                                                 :{BLACK}町
 STR_02A3_LARGE                                                  :{BLACK}市
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}市町æ‘
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}町ã®ã‚µã‚¤ã‚ºã‚’é¸æŠžã—ã¾ã™
 STR_02A5_TOWN_SIZE                                              :{YELLOW}町ã®ã‚µã‚¤ã‚ºï¼š
 
@@ -1135,6 +1136,15 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :å³
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}ウィンドウスナップ範囲:{ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}ウィンドウスナップ範囲:{ORANGE}切
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}市町æ‘ã®å±•é–‹ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :ãªã—
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :é…ã„
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :普通
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :æ—©ã„
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :特ã«æ—©ã„
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}市ã«å±•é–‹ã™ã‚‹ç”ºã®å‰²åˆï¼š{ORANGE}{STRING}ã®ï¼‘
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}市ã«å±•é–‹ã™ã‚‹ç”ºã®å‰²åˆï¼š{ORANGE}ãªã—
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}åˆæœŸã®å¸‚町æ‘ã®ã‚µã‚¤ã‚ºã®ä¹—数:{ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}インターフェース
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}建設
--- a/src/lang/korean.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/korean.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -752,6 +752,7 @@
 STR_02A1_SMALL                                                  :{BLACK}소형
 STR_02A2_MEDIUM                                                 :{BLACK}중형
 STR_02A3_LARGE                                                  :{BLACK}대형
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}ë„ì‹œ
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}ë„ì‹œ í¬ê¸° ì„ íƒ
 STR_02A5_TOWN_SIZE                                              :{YELLOW}ë„ì‹œ í¬ê¸°:
 
@@ -1144,6 +1145,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :매우 빠름
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}2ë°° 빠르게 성장하는 마ì„ì˜ ë¹„ìœ¨: {ORANGE}1 대 {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}2ë°° 빠르게 성장하는 마ì„ì˜ ë¹„ìœ¨: {ORANGE}ì—†ìŒ
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}ì´ˆê¸°ì˜ ë„ì‹œ í¬ê¸° 배수: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}ì¸í„°íŽ˜ì´ìŠ¤
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}건설
--- a/src/lang/norwegian_bokmal.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -727,6 +727,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Plasser fyrtårn
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Plasser radiosender
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Definer ørkenområde.{}Trykk og hold inne CTRL for å fjerne den
+STR_CREATE_LAKE                                                 :{BLACK}Definer vannområde.{}Lag en kanal, untatt hvis CTRL holdes nede på havnivå, hvor områdene vil fylles istedenfor
 STR_0290_DELETE                                                 :{BLACK}Slett
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Slett denne byen fullstendig
 STR_0292_SAVE_SCENARIO                                          :Lagre scenario
@@ -750,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Liten
 STR_02A2_MEDIUM                                                 :{BLACK}Middels
 STR_02A3_LARGE                                                  :{BLACK}Stor
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}By
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Velg bystørrelse
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Bystørrelse:
 
@@ -801,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Verdenskart
 STR_EXTRA_VIEW_PORT                                             :Ekstra vindu
 STR_SIGN_LIST                                                   :Skiltliste
+STR_TRANSPARENCY_OPTIONS                                        :Instillinger for gjennomsiktighet
 STR_02DF_TOWN_DIRECTORY                                         :Byoversikt
 STR_TOWN_POPULATION                                             :{BLACK}Verdensbefolkning: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vindu {COMMA}
@@ -1133,6 +1136,15 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Høyre
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Knipseradius for vindu: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Knipseradius for vindu: {ORANGE}deaktivert
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Hastighet for byenes vekst: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Ingen
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Sakte
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Rask
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Veldig rask
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Andel tettsteder som kommer til å bli byer: {ORANGE}1 av {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Andel tettsted som kommer til å bli byer: {ORANGE}Ingen
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Innledende bystørrelse multiplikator: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Grensesnitt
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstruksjon
@@ -1212,6 +1224,7 @@
 STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Plasser trær av tilfeldig type
 
 STR_CANT_BUILD_CANALS                                           :{WHITE}Kan ikke bygge kanaler her...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Bygg kanaler.
 STR_LANDINFO_CANAL                                              :Kanal
 
 STR_CANT_BUILD_LOCKS                                            :{WHITE}Kan ikke bygge sluser her...
@@ -3010,6 +3023,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}La den automatiske utskiftningen beholde lengen på toget ved å fjerne vogner (fra første vogn), hvis utskiftningen gjør toget lenger.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Erstatter: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} Eksperimentell del {}Skift mellom tog- og vognvinduet.{}Vognutskiftningen vil bare bli utført hvis den nye vognen kan ha samme last som den gamle. Dette blir sjekket når utskiftingen finner sted.
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Kjøretøyet er ikke tilgjengelig
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Kjøretøyet er ikke tilgjengelig
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Skipet er ikke tilgjengelig
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Flyfartøyet er ikke tilgjengelig
 
 STR_ENGINES                                                     :Motorer
 STR_WAGONS                                                      :Vogner
@@ -3146,3 +3163,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Overfør kreditt: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...denne veien er eid av en by
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...veien vender mot feil retning
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Instillinger for gjennomsiktighet
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Skru på gjennomsiktighet for stasjonskilt
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Skru på gjennomsiktighet for trær
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Skru på gjennomsiktighet for hus
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Skru på gjennomsiktighet for industrier
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Skru på gjennomsiktighet for stasjoner, depoter, lokalstasjoner og skinner
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Skru på gjennomsiktighet for broer
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Skru på gjennomsiktighet for fyrtårn og antenner
--- a/src/lang/polish.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/polish.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -838,6 +838,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Male
 STR_02A2_MEDIUM                                                 :{BLACK}Åšrednie
 STR_02A3_LARGE                                                  :{BLACK}Duże
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Metropolia
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Wybierz wielkość miasta
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Wielkość miasta:
 
@@ -1222,6 +1223,15 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Z prawej strony
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Strefa przyciÄ…gania okien: {ORANGE}{STRING} pkt
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Strefa przyciągania okien: {ORANGE}niedostępne
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Szybkość rozwoju miast: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Brak
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Mała
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normalna
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Duża
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Bardzo duża
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Ilość miast które staną się metropoliami: {ORANGE}1 na {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Ilość miast które staną się metropoliami: {ORANGE}Brak
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Początkowy mnożnik rozmiarów metropolii: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfejs
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstrukcje
--- a/src/lang/romanian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/romanian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Mic
 STR_02A2_MEDIUM                                                 :{BLACK}Mediu
 STR_02A3_LARGE                                                  :{BLACK}Mare
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Oras
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Alege mãrimea orasului
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Mãrime oras:
 
@@ -1143,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Foarte rapida
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proportia oraselor care se vor dezvolta de doua ori mai repede: {ORANGE}1 in {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proportia oraselor care se vor dezvolta de doua ori mai repede: {ORANGE}None
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Multiplicator initial dimensiune oras: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfatã
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Constructie
--- a/src/lang/russian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/russian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -753,6 +753,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Малый
 STR_02A2_MEDIUM                                                 :{BLACK}Средний
 STR_02A3_LARGE                                                  :{BLACK}Большой
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Город
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Выбор размера города
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Размер города:
 
@@ -1145,6 +1146,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :очень быÑтраÑ
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Соотношение городов, которые раÑтут вдвое быÑтрее: {ORANGE}1 из {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Соотношение городов, которые раÑтут вдвое быÑтрее: {ORANGE}Выкл.
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Изначальный множитель размера города: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}ИнтерфейÑ
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}СтроительÑтво
--- a/src/lang/simplified_chinese.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}å°
 STR_02A2_MEDIUM                                                 :{BLACK}中
 STR_02A3_LARGE                                                  :{BLACK}大
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}城市
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}选择城镇规模
 STR_02A5_TOWN_SIZE                                              :{YELLOW}城镇规模:
 
@@ -1135,6 +1136,14 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :å³ä¾§
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}窗å£ä¾é™„åŠå¾„:{ORANGE}{STRING} åƒç´ 
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}窗å£ä¾é™„åŠå¾„:{ORANGE}ç¦ç”¨
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}城镇å‘展速度:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :æ— 
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :æ…¢
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :正常
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :å¿«
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :éžå¸¸å¿«
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}城镇å‘展为城市的比例:{ORANGE}1 / {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}城镇å‘展为城市的比例:{ORANGE}æ— 
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}ç•Œé¢
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}建设
--- a/src/lang/slovak.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/slovak.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -815,6 +815,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Male
 STR_02A2_MEDIUM                                                 :{BLACK}Stredne
 STR_02A3_LARGE                                                  :{BLACK}Velke
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Mesto
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Vyber velkost mesta
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Velkost mesta:
 
@@ -1207,6 +1208,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Velmi rýchly
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Pomer miest, ktoré budú rást 2x rýchlejšie: {ORANGE}1 v {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Pomer miest, ktoré budú rást 2x rýchlejšie: {ORANGE}Žiadny
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Násobok pociatocnej velkosti mesta: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Rozhranie
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Vystavba
--- a/src/lang/slovenian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/slovenian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -793,6 +793,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Majhno
 STR_02A2_MEDIUM                                                 :{BLACK}Srednje
 STR_02A3_LARGE                                                  :{BLACK}Veliko
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Mesto
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Izberi velikost mesta
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Velikost mesta:
 
@@ -1185,6 +1186,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Zelo hitro
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Razmerje mest, ki bodo rastla z dvakratno hitrostjo: {ORANGE}1 v {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Razmerje mest, ki bodo rastla z dvakratno hitrostjo: {ORANGE}Brez
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}ZaÄetni faktor rasti mesta: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Vmesnik
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Gradnja
--- a/src/lang/spanish.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/spanish.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -752,6 +752,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Pequeña
 STR_02A2_MEDIUM                                                 :{BLACK}Mediana
 STR_02A3_LARGE                                                  :{BLACK}Grande
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Ciudad
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Selecciona el tamaño de la población
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Tamaño población:
 
@@ -1144,6 +1145,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Muy rápida
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporción de ciudades que crecerán el doble de rápido: {ORANGE}1 de {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporción de ciudades que crecerán el doble de rápido: {ORANGE}Ninguna
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Multiplicador inicial tamaño de ciudad: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfaz
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construcción
--- a/src/lang/swedish.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/swedish.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Liten
 STR_02A2_MEDIUM                                                 :{BLACK}Mellan
 STR_02A3_LARGE                                                  :{BLACK}Stor
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Stad
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Välj stadsstorlek
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Stadsstorlek:
 
@@ -802,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Världskarta
 STR_EXTRA_VIEW_PORT                                             :Nytt vyfönster
 STR_SIGN_LIST                                                   :Skyltlista
+STR_TRANSPARENCY_OPTIONS                                        :Genomskinlighetsinställningar
 STR_02DF_TOWN_DIRECTORY                                         :Stadslista
 STR_TOWN_POPULATION                                             :{BLACK}Världsbefolkning: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vyfönster {COMMA}
@@ -1134,6 +1136,15 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Höger
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Fönstersnäppsradie: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Fönstersnäppsradie: {ORANGE}avaktiverad
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Stadens tillväxthastighet: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Ingen
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :LÃ¥ngsamt
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normalt
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Snabbt
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Väldigt snabbt
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Andel av städerna som kommer växa dubbelt så fort: {ORANGE}1 av {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Andel av städerna som kommer växa dubbelt så fort: {ORANGE}Inga
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Initial stadsstorleks multiplikator: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Gränssnitt
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstruktion
@@ -1678,7 +1689,7 @@
 STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Starta en liten lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{}  Kostnad: {CURRENCY}
 STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Starta en mellanstor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{}  Kostnad: {CURRENCY}
 STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Starta en stor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{}  Kostnad: {CURRENCY}
-STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Bekosta ombyggnad av stadens vägnätverk. Orsakar ansenlig splittring för vägtrafik upp till 6 månader.{}  Kostnad: {CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Bekosta ombyggnad av stadens vägnätverk. Orsakar ansenliga störningar för vägtrafik i upp till 6 månader.{}  Kostnad: {CURRENCY}
 STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Bygg en staty i ditt företags ära.{} Kostnad: {CURRENCY}
 STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Bekosta uppbyggnad av nya kommersiella byggnader i staden.{}  Kostnad: {CURRENCY}
 STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Köp 1 års exklusiv transporträttighet i staden. Stadens myndigheter kommer bara tillåta passagerare och gods till användning för ditt företags stationer.{} Kostnad: {CURRENCY}
@@ -3012,6 +3023,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Gör så att automatiskt utbytning behåller ett tågs längd genom att ta bort vagnar (med början längst fram) om utbytandet av loket skulle göra tåget längre.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Ersätter: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTIELL FEATURE {}Välj mellan lok och vagn ersättnings-fönster.{}Vagns-ersättning kommer endast ske om den nya vagnen kan bli omrustad till att bära samma typ av last som den gamla. Detta kollas för varje vagn när den faktiska ersättningen sker
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Fordonet är ej tillgängligt
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Fordonet är ej tillgängligt
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Fartyget är ej tillgängligt
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Flygplanet är ej tillgängligt
 
 STR_ENGINES                                                     :Lok
 STR_WAGONS                                                      :Vagnar
@@ -3148,3 +3163,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Överföringingskredit: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...detta är en stadsägd väg
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...vägen pekar i fel riktning
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Genomskinlighetsinställningar
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Växla genomskinlighet för stationsskyltar
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Växla genomskinlighet för träd
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Växla genomskinlighet för byggnader
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Växla genomskinlighet för industrier
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Växla genomskinlighet för byggnader såsom stationer, depåer, riktmärken eller kedjelinje
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Växla genomskinlighet för industrier
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Växla genomskinlighet för byggnader såsom fyrar och antenner, kanske i framtiden även ögongodis
--- a/src/lang/traditional_chinese.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -12,12 +12,12 @@
 STR_0005                                                        :{RED}{CURRENCY64}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}需è¦å¹³åœ°
-STR_0008_WAITING                                                :{BLACK}等候: {WHITE}{STRING}
+STR_0008_WAITING                                                :{BLACK}等候:{WHITE}{STRING}
 STR_0009                                                        :{WHITE}{CARGO}
 STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (轉é‹è‡ª
 STR_000B                                                        :{YELLOW}{STATION})
-STR_000C_ACCEPTS                                                :{BLACK}接å—: {WHITE}
-STR_000D_ACCEPTS                                                :{BLACK}接å—: {GOLD}
+STR_000C_ACCEPTS                                                :{BLACK}接å—:{WHITE}
+STR_000D_ACCEPTS                                                :{BLACK}接å—:{GOLD}
 STR_000E                                                        :
 STR_000F_PASSENGERS                                             :乘客
 STR_0010_COAL                                                   :煤炭
@@ -37,7 +37,7 @@
 STR_001E_FOOD                                                   :食物
 STR_001F_PAPER                                                  :ç´™
 STR_0020_GOLD                                                   :金塊
-STR_0021_WATER                                                  :食水
+STR_0021_WATER                                                  :æ·¡æ°´
 STR_0022_WHEAT                                                  :å°éº¥
 STR_0023_RUBBER                                                 :橡膠
 STR_0024_SUGAR                                                  :ç ‚ç³–
@@ -66,10 +66,10 @@
 STR_003B_MAIZE                                                  :玉蜀é»
 STR_003C_FRUIT                                                  :水果
 STR_003D_DIAMOND                                                :鑽石
-STR_003E_FOOD                                                   :食物
+STR_003E_FOOD                                                   :食å“
 STR_003F_PAPER                                                  :紙張
 STR_0040_GOLD                                                   :金塊
-STR_0041_WATER                                                  :食水
+STR_0041_WATER                                                  :æ·¡æ°´
 STR_0042_WHEAT                                                  :å°éº¥
 STR_0043_RUBBER                                                 :橡膠
 STR_0044_SUGAR                                                  :ç ‚ç³–
@@ -225,11 +225,11 @@
 STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}å°åˆ·å» 
 STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}油井
 STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}éµç¤¦
-STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}鋼廠
+STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}煉鋼廠
 STR_0105_BANK                                                   :{BLACK}{TINYFONT}銀行
 STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}造紙廠
 STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}金礦
-STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}食物加工廠
+STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}食å“加工廠
 STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}鑽石礦
 STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}銅礦
 STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}水果莊園
@@ -287,9 +287,9 @@
 STR_013D_INFORMATION                                            :{BLACK}資訊
 STR_013E_CAPACITIES                                             :{BLACK}載é‡
 STR_013E_TOTAL_CARGO                                            :{BLACK}總貨物é‡
-STR_013F_CAPACITY                                               :{BLACK}總載é‡: {LTBLUE}{CARGO}
-STR_CAPACITY_MULT                                               :{BLACK}載é‡: {LTBLUE}{CARGO} (x{NUM})
-STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}此列車的總載é‡:
+STR_013F_CAPACITY                                               :{BLACK}載é‡ï¼š{LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}載é‡ï¼š{LTBLUE}{CARGO} (x{NUM})
+STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}此列車的總載é‡ï¼š
 STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
 STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
 STR_0140_NEW_GAME                                               :{BLACK}é–‹æ–°éŠæˆ²
@@ -304,7 +304,7 @@
 STR_512                                                         :512
 STR_1024                                                        :1024
 STR_2048                                                        :2048
-STR_MAPSIZE                                                     :{BLACK}版圖大å°:
+STR_MAPSIZE                                                     :{BLACK}版圖大å°ï¼š
 STR_BY                                                          :{BLACK}*
 STR_0148_GAME_OPTIONS                                           :{BLACK}éŠæˆ²é¸é …
 
@@ -346,9 +346,9 @@
 STR_UNITS_FORCE_SI                                              :{COMMA} kN
 
 ############ range for menu starts
-STR_0154_OPERATING_PROFIT_GRAPH                                 :營é‹åˆ©ç›Šåœ–表
+STR_0154_OPERATING_PROFIT_GRAPH                                 :營é‹å ±è¡¨
 STR_0155_INCOME_GRAPH                                           :收入圖表
-STR_0156_DELIVERED_CARGO_GRAPH                                  :å·²é‹è¼‰é‡åœ–表
+STR_0156_DELIVERED_CARGO_GRAPH                                  :é‹è¼‰å ±è¡¨
 STR_0157_PERFORMANCE_HISTORY_GRAPH                              :業績歷å²åœ–表
 STR_0158_COMPANY_VALUE_GRAPH                                    :å…¬å¸å¸‚值圖表
 STR_0159_CARGO_PAYMENT_RATES                                    :貨物收費圖表
@@ -430,22 +430,22 @@
 STR_0170                                                        :{TINYFONT}{STRING}-
 STR_0171_PAUSE_GAME                                             :{BLACK}æš«åœéŠæˆ²
 STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}儲存éŠæˆ², 於棄éŠæˆ², 離開
-STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}顯示公å¸å„車站列表
+STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}列出å„å…¬å¸è»Šç«™æ¸…å–®
 STR_0174_DISPLAY_MAP                                            :{BLACK}顯示地圖
-STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}顯示地圖和市鎮目錄
-STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}顯示市鎮目錄
+STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}顯示地圖和市鎮清冊
+STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}顯示市鎮清冊
 STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}顯示公å¸è²¡å‹™è³‡è¨Š
 STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}顯示公å¸ä¸€èˆ¬è³‡è¨Š
 STR_0179_DISPLAY_GRAPHS                                         :{BLACK}顯示圖表
 STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}顯示公å¸æŽ’行榜
 STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}顯示公å¸æ“有的列車
-STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}顯示公å¸æ“有的巴士與貨車
+STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}顯示公å¸æ“有的公車/貨車
 STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}顯示公å¸æ“有的輪船
 STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}顯示公å¸æ“有的飛機
 STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}拉近視域
 STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}拉é è¦–域
-STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}鋪設路軌
-STR_0182_BUILD_ROADS                                            :{BLACK}鋪設é“è·¯
+STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}興建路軌設施
+STR_0182_BUILD_ROADS                                            :{BLACK}興建é“路設施
 STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}興建碼頭設施
 STR_0184_BUILD_AIRPORTS                                         :{BLACK}興建機場設施
 STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}æ¤æ¨¹/置放標示
@@ -471,7 +471,7 @@
 STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}於地圖上顯示è‰æœ¨
 STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}於地圖上顯示土地æ“有人
 STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}於地圖上開關市鎮å稱
-STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}本年利潤: {CURRENCY} (去年利潤: {CURRENCY})
+STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}本年利潤:{CURRENCY} (去年利潤:{CURRENCY})
 
 ############ range for service numbers starts
 STR_AGE                                                         :{COMMA} å¹´ ({COMMA})
@@ -486,11 +486,11 @@
 STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA}使用年é™å·²éŽ
 STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA}使用年é™å·²éŽå¿…須替æ›
 STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}土地資訊
-STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}清拆æˆæœ¬: {LTBLUE}ä¸é©ç”¨
-STR_01A5_COST_TO_CLEAR                                          :{BLACK}清拆æˆæœ¬: {LTBLUE}{CURRENCY}
+STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}整地花費:{LTBLUE}ä¸é©ç”¨
+STR_01A5_COST_TO_CLEAR                                          :{BLACK}整地花費:{LTBLUE}{CURRENCY}
 STR_01A6_N_A                                                    :ä¸é©ç”¨
-STR_01A7_OWNER                                                  :{BLACK}æ“有人: {LTBLUE}{STRING}
-STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}地方政府: {LTBLUE}{STRING}
+STR_01A7_OWNER                                                  :{BLACK}æ“有人:{LTBLUE}{STRING}
+STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}地方政府:{LTBLUE}{STRING}
 STR_01A9_NONE                                                   :ç„¡
 STR_01AA_NAME                                                   :{BLACK}å稱
 STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
@@ -531,7 +531,7 @@
 
 STR_01CB                                                        :{TINYFONT}{COMMA}
 
-STR_01CE_CARGO_ACCEPTED                                         :{BLACK}接收貨物: {LTBLUE}
+STR_01CE_CARGO_ACCEPTED                                         :{BLACK}接收貨物:{LTBLUE}
 
 STR_01D1_8                                                      :({COMMA}/8 {STRING})
 STR_01D2_JAZZ_JUKEBOX                                           :{WHITE}爵士樂唱盤
@@ -586,7 +586,7 @@
 STR_MESSAGE_HISTORY_MENU                                        :訊æ¯ç´€éŒ„
 STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}展示「上一次訊æ¯æˆ–æ–°èžå ±å‘Šã€ã€ã€Œé¡¯ç¤ºè¨Šæ¯ã€é¸é …
 STR_0204_MESSAGE_OPTIONS                                        :{WHITE}訊æ¯é¸é …
-STR_0205_MESSAGE_TYPES                                          :{BLACK}訊æ¯ç¨®é¡ž:
+STR_0205_MESSAGE_TYPES                                          :{BLACK}訊æ¯ç¨®é¡žï¼š
 STR_0206_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}首個交通工具已到é”玩家的車站
 STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}首個交通工具已到é”競爭å°æ‰‹çš„車站
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}æ„外 / ç½é›£
@@ -598,7 +598,7 @@
 STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}接收貨物的改動
 STR_020E_SUBSIDIES                                              :{YELLOW}資助
 STR_020F_GENERAL_INFORMATION                                    :{YELLOW}一般資訊
-STR_MESSAGES_ALL                                                :{YELLOW}將所有訊æ¯è¨­ç‚º: 關閉 / æ¦‚è¦ / 完整
+STR_MESSAGES_ALL                                                :{YELLOW}將所有訊æ¯è¨­ç‚ºï¼šé—œé–‰ / æ¦‚è¦ / 完整
 STR_MESSAGE_SOUND                                               :{YELLOW}摘è¦è¨Šæ¯ç™¼å‡ºè²éŸ³æ示
 STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...與上一個目的地相è·å¤ªé 
 STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}å…¬å¸å·²é”到 {NUM}{}({STRING} 等級)
@@ -751,8 +751,9 @@
 STR_02A1_SMALL                                                  :{BLACK}å°åž‹
 STR_02A2_MEDIUM                                                 :{BLACK}中型
 STR_02A3_LARGE                                                  :{BLACK}大型
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}市鎮
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}é¸æ“‡å¸‚鎮大å°
-STR_02A5_TOWN_SIZE                                              :{YELLOW}市鎮大å°:
+STR_02A5_TOWN_SIZE                                              :{YELLOW}市鎮大å°ï¼š
 
 STR_02B6                                                        :{STRING}  -  {STRING}
 STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}顯示最近的訊æ¯æˆ–æ–°èž
@@ -804,7 +805,7 @@
 STR_SIGN_LIST                                                   :標誌清單
 STR_TRANSPARENCY_OPTIONS                                        :é€æ˜Žåº¦é¸é …
 STR_02DF_TOWN_DIRECTORY                                         :市鎮索引
-STR_TOWN_POPULATION                                             :{BLACK}世界人å£: {COMMA}
+STR_TOWN_POPULATION                                             :{BLACK}世界人å£ï¼š{COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}視野 {COMMA}
 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}將視窗視野移到主視野
 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}將這個視窗的視野ä½ç½®ç§»åˆ°ä¸»è¦–野的ä½ç½®
@@ -814,9 +815,9 @@
 STR_02E0_CURRENCY_UNITS                                         :{BLACK}貨幣單ä½
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
 STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}é¸æ“‡è²¨å¹£å–®ä½
-STR_MEASURING_UNITS                                             :{BLACK}é‡åº¦å–®ä½
+STR_MEASURING_UNITS                                             :{BLACK}度é‡å–®ä½
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
-STR_MEASURING_UNITS_SELECTION                                   :{BLACK}é‡åº¦å–®ä½
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}度é‡å–®ä½
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}公車/貨車
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}é¸æ“‡è»Šè¼›åœ¨è·¯ä¸Šçš„行駛ä½ç½®
@@ -900,7 +901,7 @@
 ############ end of townname region
 
 STR_CURR_GBP                                                    :英鎊 (£)
-STR_CURR_USD                                                    :å…ƒ ($)
+STR_CURR_USD                                                    :美元 ($)
 STR_CURR_EUR                                                    :æ­å…ƒ (€)
 STR_CURR_YEN                                                    :日圓 (¥)
 STR_CURR_ATS                                                    :奧地利先令 (ATS)
@@ -960,8 +961,8 @@
 STR_MONTH_NOV                                                   :å一月
 STR_MONTH_DEC                                                   :å二月
 
-STR_HEADING_FOR_STATION                                         :{LTBLUE}目的地: {STATION}
-STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}目的地: {STATION}, {VELOCITY}
+STR_HEADING_FOR_STATION                                         :{LTBLUE}目的地:{STATION}
+STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}目的地:{STATION},{VELOCITY}
 STR_NO_ORDERS                                                   :{LTBLUE}沒有指令
 STR_NO_ORDERS_VEL                                               :{LTBLUE}沒有指令, {VELOCITY}
 
@@ -1016,125 +1017,125 @@
 
 STR_CONFIG_PATCHES_OFF                                          :關
 STR_CONFIG_PATCHES_ON                                           :é–‹
-STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}於狀態列顯示速度: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}於斜å¡å’Œå²¸é‚Šèˆˆå»º: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}真實大å°çš„收集範åœ: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}å¯ç§»é™¤æ›´åŸŽéŽ®æ“有的é“路,橋樑等: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}æ高列車長度é™åˆ¶: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}真實的列車加速: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}ç¦æ­¢åˆ—車直角轉å‘: {ORANGE}{STRING} {LTBLUE} (requires NPF)
-STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}åˆä½µå»ºåœ¨ä¸€èµ·çš„車站: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}其中一種貨物滿載,列車å³å¯é›¢é–‹è»Šç«™: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}使用改善éŽçš„載貨演算法: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}é€æ­¥è¼‰è²¨: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}通脹: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}有需求æ‰å‘車站供貨: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}æ高橋樑長度é™åˆ¶: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}å¯ä»¥ä¸‹ã€Œåˆ°ç¶­ä¿®å» ã€æŒ‡ä»¤: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}å¯ä»¥èˆˆå»ºåŽŸæ料工業: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}æ¯å€‹å¸‚鎮å¯æ“有多個åŒé¡žåž‹å·¥æ¥­: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}åŒé¡žåž‹å·¥æ¥­èˆˆå»ºè·é›¢ä¸å—é™åˆ¶: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}æ°¸é æ–¼ç‹€æ…‹åˆ—顯示長日期: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}於駕駛者的一邊顯示訊號燈: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}於年末顯示財政視窗: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTDPatch 兼容ä¸åœç«™è™•ç†: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}車輛排隊 (é‡å­æ•ˆæ‡‰): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}滑鼠在視窗邊緣時移動視窗: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}å¯ä»¥å‘地方政府行賄: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}ä¸è¦å‰‡å½¢ç‹€è»Šç«™: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}新路徑æœå°‹æ¼”算法 (NPF, 覆蓋 NTP): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}貨物é‡é‡ç³»æ•¸ï¼Œä»¥æ¨¡æ“¬è¼ƒé‡åˆ—車: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}å¯åœ¨éŽ®å…§èˆˆå»ºè·¯é‚Šè»Šç«™: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}於狀態列顯示速度:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}於斜å¡å’Œå²¸é‚Šèˆˆå»ºï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}真實大å°çš„收集範åœï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}å¯ç§»é™¤æ›´åŸŽéŽ®æ“有的é“路,橋樑等:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}æ高列車長度é™åˆ¶ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}真實的列車加速:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}ç¦æ­¢åˆ—車直角轉å‘:{ORANGE}{STRING} {LTBLUE} (需è¦å•Ÿç”¨ NPF)
+STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}åˆä½µå»ºåœ¨ä¸€èµ·çš„車站:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}其中一種貨物滿載,列車å³å¯é›¢é–‹è»Šç«™ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}使用改善éŽçš„載貨演算法:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}é€æ­¥è¼‰è²¨ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}通貨膨脹:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}有需求æ‰å‘車站供貨:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}æ高橋樑長度é™åˆ¶ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}å¯ä»¥ä¸‹ã€Œåˆ°ç¶­ä¿®å» ã€æŒ‡ä»¤ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}å¯ä»¥èˆˆå»ºåŽŸç‰©æ–™å·¥æ¥­ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}æ¯å€‹å¸‚鎮å¯æ“有多個åŒé¡žåž‹å·¥æ¥­ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}åŒé¡žåž‹å·¥æ¥­èˆˆå»ºè·é›¢ä¸å—é™åˆ¶ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}æ°¸é æ–¼ç‹€æ…‹åˆ—顯示長日期:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}於駕駛者的一邊顯示訊號燈:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}於年末顯示財政視窗:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}與 TTDPatch 相容之ä¸åœç«™è™•ç†ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}車輛排隊 (é‡å­æ•ˆæ‡‰):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}滑鼠在視窗邊緣時移動視窗:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}å¯ä»¥å‘地方政府行賄:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}ä¸è¦å‰‡å½¢ç‹€è»Šç«™ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}新路徑æœå°‹æ¼”算法 (NPF 將覆蓋 NTP):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}貨物é‡é‡ç³»æ•¸ï¼Œä»¥æ¨¡æ“¬è¼ƒé‡åˆ—車:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}å¯åœ¨éŽ®å…§èˆˆå»ºè·¯é‚Šè»Šç«™ï¼š{ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}æ°¸é å¯ä»¥èˆˆå»ºå°åž‹æ©Ÿå ´: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}æ°¸é å¯ä»¥èˆˆå»ºå°åž‹æ©Ÿå ´ï¼š{ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}列車迷路警告: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}覆查é‹è¼¸å·¥å…·æŒ‡ä»¤: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}列車迷路警告:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}覆查é‹è¼¸å·¥å…·æŒ‡ä»¤ï¼š{ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :å¦
 STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :是, ä¸éŽé™¤åœä¸‹ä¾†çš„é‹è¼¸å·¥å…·ä»¥å¤–
 STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :所有é‹è¼¸å·¥å…·
-STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}於列車盈利虧æ時發出警告: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}é‹è¼¸å·¥å…·æ°¸é ä¸æœƒéŽæœŸ: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}於列車盈利虧æ時發出警告:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}é‹è¼¸å·¥å…·æ°¸é ä¸æœƒéŽæœŸï¼š{ORANGE}{STRING}
 STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}é‹è¼¸å·¥å…·è‡ªå‹•ç¿»æ–°
 STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}當é‹å…·åœ¨ä½¿ç”¨å¹´é™ {ORANGE}{STRING}{LTBLUE} 個月å‰/後自動更新
-STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}自動翻新最低費用: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}錯誤訊æ¯é¡¯ç¤ºæ™‚é–“: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}於標籤顯示市鎮人å£: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}é¸æ“‡åŠé€æ˜Žå»ºç¯‰ç‰©æ™‚將樹木隱è—: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}自動翻新最低費用:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}錯誤訊æ¯é¡¯ç¤ºæ™‚間:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}於標籤顯示市鎮人å£ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}é¸æ“‡åŠé€æ˜Žå»ºç¯‰ç‰©æ™‚將樹木隱è—:{ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}地形產生器: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}地形產生器:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :原版
 STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
 STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}煉油廠與版圖邊緣最大è·é›¢ {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}雪線高度: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}地形ä¸å¹³åº¦ (åªé©ç”¨æ–¼ TerraGenesis) : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}雪線高度:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}地形ä¸å¹³åº¦ (åªé©ç”¨æ–¼ TerraGenesis):{ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :éžå¸¸å¹³æ»‘
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :平滑
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :高低ä¸å¹³
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :éžå¸¸ç²—ç³™
-STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}樹木分佈演算法: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}樹木分佈演算法:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :沒有
 STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :原版
 STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :改進版
-STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}高度圖旋轉: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}高度圖旋轉:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :逆時é‡
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :順時é‡
-STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}å¹³é¢ç‰ˆåœ–高度: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}å¹³é¢ç‰ˆåœ–高度:{ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}車站最長長度: {ORANGE}{STRING} {RED}注æ„: éŽé«˜æœƒä»¤æ•ˆèƒ½ä¸‹é™
-STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}ç›´å‡æ©Ÿæ–¼ç›´å‡æ©Ÿå°è‡ªå‹•ç¶­ä¿®: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}地形工具列與路軌/é“è·¯/碼頭建設/機場建設åˆä½µ: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}倒轉滾動棒方å‘: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}使用æŸäº›å»ºè¨­å·¥å…·æ™‚顯示é‡åº¦æ示: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}顯示公å¸æ¨™è¨˜: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}車站最長延展範åœï¼š{ORANGE}{STRING} {RED}注æ„:éŽé«˜æœƒä½¿æ•ˆèƒ½ä¸‹é™
+STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}ç›´å‡æ©Ÿæ–¼ç›´å‡æ©Ÿå°è‡ªå‹•ç¶­ä¿®ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}地形工具列與路軌/é“è·¯/碼頭建設/機場建設åˆä½µï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}倒轉滾動棒方å‘:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}使用æŸäº›å»ºè¨­å·¥å…·æ™‚顯示é‡åº¦æ示:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}顯示公å¸æ¨™è¨˜ï¼š{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :ä¸é¡¯ç¤º
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :自己的公å¸
 STR_CONFIG_PATCHES_LIVERIES_ALL                                 :所有公å¸
-STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}按 <ENTER> éµèˆ‡å°éšŠäº¤è«‡: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}按 <ENTER> éµèˆ‡å°éšŠäº¤è«‡ï¼š{ORANGE}{STRING}
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}滑鼠滾輪作用: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :放大地圖
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :æ²å‹•åœ°åœ–
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :關閉
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}滾輪地圖æ²å‹•é€Ÿåº¦ï¼š {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有列車數目: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有車輛數目: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有飛機數目: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有輪船數目: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}電腦ä¸å¯æ“有列車: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}電腦ä¸å¯æ“有路é¢è»Šè¼›: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}電腦ä¸å¯æ“有飛機: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}電腦ä¸å¯æ“有飛機: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}使用新人工智能 (開發中): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}å¯æ–¼é€£ç·šéŠæˆ²åŠ å…¥é›»è…¦å°æ‰‹ (測試階段): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有列車數目:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有車輛數目:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有飛機數目:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}æ¯ä½çŽ©å®¶å¯æ“有船舶數目:{ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}列車é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}{STRING} æ—¥/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}列車é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}關閉
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}è·¯é¢è»Šè¼›é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}{STRING} æ—¥/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}è·¯é¢è»Šè¼›é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}關閉
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}飛機é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}{STRING} æ—¥/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}飛機é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}關閉
-STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}船隻é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}{STRING} æ—¥/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}船隻é è¨­æª¢ä¿®é »çŽ‡: {ORANGE}關閉
-STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}當故障關閉時ä¸ä½œå®šæœŸæª¢æŸ¥ç¶­ä¿®: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}車å¡é€Ÿåº¦é™åˆ¶: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}電氣化éµè·¯: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}電腦ä¸å¯æ“有列車:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}電腦ä¸å¯æ“有路é¢è»Šè¼›ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}電腦ä¸å¯æ“有飛機:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}電腦ä¸å¯æ“有飛機:{ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}彩色新èžå‡ºç¾æ–¼: {ORANGE}{STRING} å¹´
-STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}開始時間: {ORANGE}{STRING} 年
-STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}終çµéŠæˆ²å¹´ä»½: {ORANGE}{STRING} å¹´
+STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}使用新人工智能 (開發階段):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}å¯æ–¼é€£ç·šéŠæˆ²åŠ å…¥é›»è…¦å°æ‰‹ (測試階段):{ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}列車é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}{STRING} æ—¥/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}列車é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}關閉
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}è·¯é¢è»Šè¼›é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}{STRING} æ—¥/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}è·¯é¢è»Šè¼›é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}關閉
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}飛機é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}{STRING} æ—¥/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}飛機é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}關閉
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}船隻é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}{STRING} æ—¥/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}船隻é è¨­æª¢ä¿®é »çŽ‡ï¼š{ORANGE}關閉
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}當故障關閉時ä¸ä½œå®šæœŸæª¢æŸ¥ç¶­ä¿®ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}載具速度é™åˆ¶ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}電氣化éµè·¯ï¼š{ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}彩色報紙出ç¾æ–¼ï¼š{ORANGE}{STRING} å¹´
+STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}開始時間:{ORANGE}{STRING} 年
+STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}終çµéŠæˆ²å¹´ä»½ï¼š{ORANGE}{STRING} å¹´
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}å¹³æ»‘ç¶“æ¿Ÿæ¨¡å¼ (更多而å°çš„變化)
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}å¯ä»¥å¾žå°æ‰‹è³¼å…¥è‚¡ä»½
-STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}拖放時訊號燈之間è·é›¢: {ORANGE}{STRING} æ ¼
-STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}於日期å‰è‡ªå‹•å»ºç«‹èˆŠå¼è™ŸèªŒè‡‚: {ORANGE}{STRING}å¹´
-STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主工具列ä½ç½®: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}拖放時訊號燈之間è·é›¢ï¼š{ORANGE}{STRING} æ ¼
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}於日期å‰è‡ªå‹•å»ºç«‹èˆŠå¼è™ŸèªŒè‡‚:{ORANGE}{STRING}å¹´
+STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主工具列ä½ç½®ï¼š{ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :å·¦
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :中
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :å³
-STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}視窗自動é»è²¼ç¯„åœ: {ORANGE}{STRING} åƒç´ 
-STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}視窗自動é»è²¼ç¯„åœ: {ORANGE}關閉
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}視窗自動é»è²¼ç¯„åœï¼š{ORANGE}{STRING} åƒç´ 
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}視窗自動é»è²¼ç¯„åœï¼š{ORANGE}關閉
 STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}城市增長速度: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :ä¸æœƒå¢žé•·
 STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :æ…¢
@@ -1143,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :éžå¸¸å¿«
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}é›™å€é€Ÿå¢žé•·åŸŽå¸‚比例: {ORANGE}{STRING} 分之一
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}é›™å€é€Ÿå¢žé•·åŸŽå¸‚比例: {ORANGE}沒有
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}市鎮è¦æ¨¡åˆå§‹å€çŽ‡ï¼š{ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}介é¢
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}建築
@@ -1157,9 +1159,9 @@
 
 STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}改變設定值
 STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}以下é è¨­æª¢ä¿®æœŸèˆ‡æ€é¸é …ç›®ä¸ç›¸å®¹! åˆæ³•è¨­å®šç‚º 5-90% 或 30-800 æ—¥
-STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}船隻使用新的尋路系統(YAPF): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}車輛使用新的尋路系統: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}列車使用新的尋路系統: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}船隻使用新的尋路系統(YAPF):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}車輛使用新的尋路系統(YAPF):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}列車使用新的尋路系統:{ORANGE}{STRING}
 
 STR_TEMPERATE_LANDSCAPE                                         :溫帶
 STR_SUB_ARCTIC_LANDSCAPE                                        :亞北極帶
@@ -1169,21 +1171,21 @@
 STR_CHEATS                                                      :{WHITE}作弊
 STR_CHEATS_TIP                                                  :{BLACK}被勾é¸çš„項目表示你之å‰ç”¨éŽé€™å€‹ä½œå¼Š
 STR_CHEATS_WARNING                                              :{BLACK}注æ„! ä½ è¦èƒŒå›ä½ çš„å°æ‰‹å–”! ä½ è¦è¨˜ä½é€™ç¨®è¡Œç‚ºæœƒè¢«ä¸€è¼©å­è¨˜è‘—的。
-STR_CHEAT_MONEY                                                 :{LTBLUE}增加金錢: {CURRENCY64}
-STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}控制玩家: {ORANGE}{COMMA}
-STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}神奇剷泥車 (å¯ä»¥ç§»é™¤å·¥æ¥­ç­‰å¹³æ™‚拆ä¸æŽ‰çš„æ±è¥¿): {ORANGE}{STRING}
-STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}隧é“å¯ä»¥äº’相穿éŽ: {ORANGE}{STRING}
-STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}於暫åœæ¨¡å¼å»ºè¨­: {ORANGE}{STRING}
-STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}噴射客機ä¸æœƒæ–¼å°åž‹æ©Ÿå ´ç¶“常墜æ¯: {ORANGE} {STRING}
-STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}改變氣候: {ORANGE} {STRING}
-STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}改變日期: {ORANGE} {DATE_SHORT}
-STR_CHEAT_SETUP_PROD                                            :{LTBLUE}å¯æ”¹è®Šç”¢é‡: {ORANGE}{STRING}
+STR_CHEAT_MONEY                                                 :{LTBLUE}增加金錢:{CURRENCY64}
+STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}控制玩家:{ORANGE}{COMMA}
+STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}神奇剷泥車 (å¯ä»¥ç§»é™¤å·¥æ¥­ç­‰å¹³æ™‚拆ä¸æŽ‰çš„æ±è¥¿):{ORANGE}{STRING}
+STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}隧é“å¯ä»¥äº’相穿éŽï¼š{ORANGE}{STRING}
+STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}於暫åœæ¨¡å¼å»ºè¨­ï¼š{ORANGE}{STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}噴射客機ä¸æœƒç¶“常於å°åž‹æ©Ÿå ´å¢œæ¯ï¼š{ORANGE} {STRING}
+STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}改變氣候:{ORANGE} {STRING}
+STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}改變日期:{ORANGE} {DATE_SHORT}
+STR_CHEAT_SETUP_PROD                                            :{LTBLUE}å¯æ”¹è®Šç”¢é‡ï¼š{ORANGE}{STRING}
 
-STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}目的地: {WAYPOINT}
-STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}目的地: {WAYPOINT}, {VELOCITY}
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}目的地:{WAYPOINT}
+STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}目的地:{WAYPOINT},{VELOCITY}
 
 STR_GO_TO_WAYPOINT                                              :經 {WAYPOINT}
-STR_GO_NON_STOP_TO_WAYPOINT                                     :經 {WAYPOINT},ä¸åœç«™
+STR_GO_NON_STOP_TO_WAYPOINT                                     :經 {WAYPOINT},中途ä¸åœ
 
 STR_WAYPOINTNAME_CITY                                           :路標 {TOWN}
 STR_WAYPOINTNAME_CITY_SERIAL                                    :路標 {TOWN} #{COMMA}
@@ -1231,7 +1233,7 @@
 
 STR_BUOY_IS_IN_USE                                              :{WHITE}...浮標正被使用!
 
-STR_LANDINFO_COORDS                                             :{BLACK}座標: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS                                             :{BLACK}座標:{LTBLUE}{NUM}x{NUM} ({STRING})
 
 STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}ä¸èƒ½ç§»é™¤è»Šç«™éƒ¨ä»½...
 STR_CANT_CONVERT_RAIL                                           :{WHITE}無法轉æ›è»Œé“種類...
@@ -1282,20 +1284,20 @@
 STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}é¸æ“‡è¦é‹è¼¸çš„酬載種類
 STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}改造列車以é‹è¼¸é¸å®šçš„酬載
 STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}無法改造列車...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}維護間隔以百分比計算: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}維護間隔以百分比計算:{ORANGE}{STRING}
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}修改產é‡
 
 TEMP_AI_IN_PROGRESS                                             :{WHITE}歡迎使用正在開發的新 AI。如果有任何å•é¡Œï¼Œæ­¡è¿Žæ“·å–ç•«é¢æ”¾ä¸Šè¨Žè«–å€é€šçŸ¥é–‹ç™¼åœ˜éšŠã€‚
-TEMP_AI_ACTIVATED                                               :{WHITE}警告: 這個新 AI 還在早期測試Warning: this new AI is still alpha! Currently, only trucks and busses work!
-TEMP_AI_MULTIPLAYER                                             :{WHITE}警告: æ–° AI 實作ä»åœ¨æ¸¬è©¦éšŽæ®µã€‚如有任何å•é¡Œï¼Œè«‹é›»éƒµè‡³ truelight@openttd.org。
+TEMP_AI_ACTIVATED                                               :{WHITE}警告: 這個新 AI 還在開發階段,目å‰åƒ…於汽車上實作ï¼
+TEMP_AI_MULTIPLAYER                                             :{WHITE}警告: æ–° AI 實作ä»åœ¨é–‹ç™¼éšŽæ®µã€‚如有任何å•é¡Œï¼Œè«‹ E-Mail 至 truelight@openttd.org。
 
 ############ network gui strings
 
 STR_NETWORK_MULTIPLAYER                                         :{WHITE}連線éŠæˆ²
 
-STR_NETWORK_PLAYER_NAME                                         :{BLACK}玩家å稱:
+STR_NETWORK_PLAYER_NAME                                         :{BLACK}玩家å稱:
 STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}這是其他玩家辨èªæ‚¨çš„å稱
-STR_NETWORK_CONNECTION                                          :{BLACK}連線:
+STR_NETWORK_CONNECTION                                          :{BLACK}連線:
 STR_NETWORK_CONNECTION_TIP                                      :{BLACK}é¸æ“‡ Internet 或å€åŸŸç¶²è·¯ (LAN) éŠæˆ²
 
 STR_NETWORK_START_SERVER                                        :{BLACK}起動伺æœå™¨
@@ -1317,14 +1319,14 @@
 STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}線上客戶端 / 客戶端上é™{}ç·šä¸Šå…¬å¸ / å…¬å¸ä¸Šé™
 STR_NETWORK_GAME_INFO                                           :{SILVER}éŠæˆ²è³‡è¨Š
 STR_ORANGE                                                      :{ORANGE}{STRING}
-STR_NETWORK_CLIENTS                                             :{SILVER}客戶端:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
-STR_NETWORK_LANGUAGE                                            :{SILVER}語言:  {WHITE}{STRING}
-STR_NETWORK_TILESET                                             :{SILVER}圖片組:  {WHITE}{STRING}
-STR_NETWORK_MAP_SIZE                                            :{SILVER}地圖大å°:  {WHITE}{COMMA}x{COMMA}
-STR_NETWORK_SERVER_VERSION                                      :{SILVER}伺æœå™¨ç‰ˆæœ¬:  {WHITE}{STRING}
-STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}伺æœå™¨ä½å€:  {WHITE}{STRING} : {NUM}
-STR_NETWORK_START_DATE                                          :{SILVER}開始日期:  {WHITE}{DATE_SHORT}
-STR_NETWORK_CURRENT_DATE                                        :{SILVER}ç›®å‰æ—¥æœŸ:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CLIENTS                                             :{SILVER}客戶端:{WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_LANGUAGE                                            :{SILVER}語言:{WHITE}{STRING}
+STR_NETWORK_TILESET                                             :{SILVER}網格組:{WHITE}{STRING}
+STR_NETWORK_MAP_SIZE                                            :{SILVER}地圖大å°ï¼š{WHITE}{COMMA}x{COMMA}
+STR_NETWORK_SERVER_VERSION                                      :{SILVER}伺æœå™¨ç‰ˆæœ¬ï¼š{WHITE}{STRING}
+STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}伺æœå™¨ä½å€ï¼š{WHITE}{STRING} : {NUM}
+STR_NETWORK_START_DATE                                          :{SILVER}開始日期:{WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}ç›®å‰æ—¥æœŸï¼š{WHITE}{DATE_SHORT}
 STR_NETWORK_PASSWORD                                            :{SILVER}å—密碼ä¿è­·ï¼
 STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}伺æœå™¨é›¢ç·š
 STR_NETWORK_SERVER_FULL                                         :{SILVER}伺æœå™¨å·²æ»¿
@@ -1336,13 +1338,13 @@
 
 STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}開始新的多人éŠæˆ²
 
-STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}éŠæˆ²å稱:
+STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}éŠæˆ²å稱:
 STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}éŠæˆ²å稱會顯示在其他玩家é¸æ“‡éŠæˆ²çš„é¸å–®å†…
 STR_NETWORK_SET_PASSWORD                                        :{BLACK}設定密碼
 STR_NETWORK_PASSWORD_TIP                                        :{BLACK}如果您ä¸æƒ³è®“大眾連線的話,å¯ä»¥ç”¨å¯†ç¢¼ä¿è­·éŠæˆ²
-STR_NETWORK_SELECT_MAP                                          :{BLACK}é¸æ“‡åœ°åœ–:
+STR_NETWORK_SELECT_MAP                                          :{BLACK}é¸æ“‡åœ°åœ–:
 STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}您想玩哪個地圖?
-STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}客戶端上é™:
+STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}客戶端上é™ï¼š
 STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}é¸æ“‡é€£ç·šäººæ•¸ä¸Šé™ã€‚未必æ¯å€‹åé¡éƒ½éœ€é€£ç·š
 STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_LAN                                                 :局域網絡(LAN)
@@ -1361,13 +1363,13 @@
 STR_NETWORK_8_PLAYERS                                           :8 ä½çŽ©å®¶
 STR_NETWORK_9_PLAYERS                                           :9 ä½çŽ©å®¶
 STR_NETWORK_10_PLAYERS                                          :10 ä½çŽ©å®¶
-STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}å…¬å¸ä¸Šé™:
+STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}å…¬å¸ä¸Šé™ï¼š
 STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}é™åˆ¶ä¼ºæœå™¨å¯ä»¥å»ºç«‹çš„å…¬å¸æ•¸
 STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}觀看者上é™:
+STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}觀看者上é™ï¼š
 STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}é™åˆ¶å¯åŠ å…¥çš„觀察者數é‡
 STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}所用的語言:
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}所用的語言:
 STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}讓其他人知é“這個伺æœå™¨ä½¿ç”¨çš„交談語言
 STR_NETWORK_COMBO5                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_START_GAME                                          :{BLACK}開始éŠæˆ²
@@ -1384,7 +1386,7 @@
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}連線éŠæˆ²å¤§å»³
 
-STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}準備加入:   {ORANGE}{STRING}
+STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}準備加入:{ORANGE}{STRING}
 STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}列出éŠæˆ²å†…所有公å¸ã€‚您å¯ä»¥åŠ å…¥ç¾æœ‰å…¬å¸ï¼Œè‹¥é‚„有公å¸ç©ºä½çš„話,也å¯å‰µç«‹æ–°å…¬å¸ã€‚
 STR_NETWORK_NEW_COMPANY                                         :{BLACK}æ–°å…¬å¸
 STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}建立新公å¸
@@ -1397,16 +1399,16 @@
 
 STR_NETWORK_COMPANY_INFO                                        :{SILVER}å…¬å¸è³‡è¨Š
 
-STR_NETWORK_COMPANY_NAME                                        :{SILVER}å…¬å¸å稱:  {WHITE}{STRING}
-STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}æˆç«‹æ–¼:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}å…¬å¸åƒ¹å€¼:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}ç›®å‰é¤˜é¡:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}去年收入:  {WHITE}{CURRENCY64}
-STR_NETWORK_PERFORMANCE                                         :{SILVER}效率:  {WHITE}{NUM}
+STR_NETWORK_COMPANY_NAME                                        :{SILVER}å…¬å¸å稱:{WHITE}{STRING}
+STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}æˆç«‹æ–¼ï¼š{WHITE}{NUM}
+STR_NETWORK_VALUE                                               :{SILVER}å…¬å¸å¸‚值:{WHITE}{CURRENCY64}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}ç›®å‰é¤˜é¡ï¼š{WHITE}{CURRENCY64}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}去年收入:{WHITE}{CURRENCY64}
+STR_NETWORK_PERFORMANCE                                         :{SILVER}效率:{WHITE}{NUM}
 
-STR_NETWORK_VEHICLES                                            :{SILVER}é‹å…·:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
-STR_NETWORK_STATIONS                                            :{SILVER}車站:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
-STR_NETWORK_PLAYERS                                             :{SILVER}玩家:  {WHITE}{STRING}
+STR_NETWORK_VEHICLES                                            :{SILVER}é‹å…·ï¼š{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
+STR_NETWORK_STATIONS                                            :{SILVER}站點:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
+STR_NETWORK_PLAYERS                                             :{SILVER}玩家:{WHITE}{STRING}
 
 STR_NETWORK_CONNECTING                                          :{WHITE}正在連線...
 
@@ -1470,14 +1472,14 @@
 STR_NETWORK_CLIENT_JOINED                                       :加入éŠæˆ²
 STR_NETWORK_GIVE_MONEY                                          :給了您的公å¸ä¸€äº›éŒ¢ ({CURRENCY})
 STR_NETWORK_GAVE_MONEY_AWAY                                     :您給了 {STRING} 一些錢 ({CURRENCY})
-STR_NETWORK_CHAT_COMPANY_CAPTION                                :[團隊] :
-STR_NETWORK_CHAT_COMPANY                                        :[團隊] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_COMPANY                                     :[團隊] 給 {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[ç§äºº] :
-STR_NETWORK_CHAT_CLIENT                                         :[ç§äºº] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_CLIENT                                      :[ç§äºº] 給 {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_ALL_CAPTION                                    :[全員] :
-STR_NETWORK_CHAT_ALL                                            :[全員] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_COMPANY_CAPTION                                :[團隊]:
+STR_NETWORK_CHAT_COMPANY                                        :[團隊] {STRING}:{GRAY}{STRING}
+STR_NETWORK_CHAT_TO_COMPANY                                     :[團隊] 給 {STRING}:{GRAY}{STRING}
+STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[ç§äºº]:
+STR_NETWORK_CHAT_CLIENT                                         :[ç§äºº] {STRING}:{GRAY}{STRING}
+STR_NETWORK_CHAT_TO_CLIENT                                      :[ç§äºº] 給 {STRING}:{GRAY}{STRING}
+STR_NETWORK_CHAT_ALL_CAPTION                                    :[全員] :
+STR_NETWORK_CHAT_ALL                                            :[全員] {STRING}:{GRAY}{STRING}
 STR_NETWORK_NAME_CHANGE                                         :將自己的å稱改為
 STR_NETWORK_SERVER_SHUTDOWN                                     :{WHITE} 伺æœå™¨é—œé–‰é€£ç·š
 STR_NETWORK_SERVER_REBOOT                                       :{WHITE} 伺æœå™¨æ­£åœ¨é‡æ–°å•Ÿå‹•...{}è«‹ç¨å€™...
@@ -1499,8 +1501,8 @@
 ############ end network gui strings
 
 
-STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}地圖 X 軸大å°: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}地圖 Y 軸大å°: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}地圖 X 軸大å°ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}地圖 Y 軸大å°ï¼š{ORANGE}{STRING}
 
 
 ##### PNG-MAP-Loader
@@ -1514,14 +1516,14 @@
 STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...無法轉æ›å½±åƒæ ¼å¼
 
 ##id 0x0800
-STR_0800_COST                                                   :{TINYFONT}{RED}花費: {CURRENCY}
-STR_0801_COST                                                   :{RED}花費: {CURRENCY}
-STR_0802_INCOME                                                 :{TINYFONT}{GREEN}收入: {CURRENCY}
-STR_0803_INCOME                                                 :{GREEN}收入: {CURRENCY}
-STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}轉é‹: {CURRENCY}
-STR_FEEDER                                                      :{YELLOW}轉é‹: {CURRENCY}
+STR_0800_COST                                                   :{TINYFONT}{RED}花費:{CURRENCY}
+STR_0801_COST                                                   :{RED}花費:{CURRENCY}
+STR_0802_INCOME                                                 :{TINYFONT}{GREEN}收入:{CURRENCY}
+STR_0803_INCOME                                                 :{GREEN}收入:{CURRENCY}
+STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}轉é‹ï¼š{CURRENCY}
+STR_FEEDER                                                      :{YELLOW}轉é‹ï¼š{CURRENCY}
 STR_0805_ESTIMATED_COST                                         :{WHITE}é ä¼°èŠ±è²» {CURRENCY}
-STR_0807_ESTIMATED_INCOME                                       :{WHITE}é ä¼°æ”¶å…¥: {CURRENCY}
+STR_0807_ESTIMATED_INCOME                                       :{WHITE}é ä¼°æ”¶å…¥ï¼š{CURRENCY}
 STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}無法æ昇土地...
 STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}無法é™ä½ŽåœŸåœ°...
 STR_080A_ROCKS                                                  :石頭
@@ -1613,15 +1615,15 @@
 STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}必須先摧毀建築
 STR_2005                                                        :{WHITE}{TOWN}
-STR_2006_POPULATION                                             :{BLACK}人å£: {ORANGE}{COMMA}{BLACK}  房屋: {ORANGE}{COMMA}
+STR_2006_POPULATION                                             :{BLACK}人å£ï¼š{ORANGE}{COMMA}{BLACK}  房屋:{ORANGE}{COMMA}
 STR_2007_RENAME_TOWN                                            :修改城鎮å稱
 STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}無法修改城鎮å稱...
 STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} 城鎮當局ä¸åŒæ„
 STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}城鎮å稱 - 點é¸å稱å¯å°‡åŸŽéŽ®ç½®æ–¼ç•«é¢ä¸­å¤®
 STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}將主視野移到城鎮ä½ç½®
 STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}修改城鎮å稱
-STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}上月乘客: {ORANGE}{COMMA}{BLACK}  最多: {ORANGE}{COMMA}
-STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}上月郵件: {ORANGE}{COMMA}{BLACK}  最多: {ORANGE}{COMMA}
+STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}上月乘客:{ORANGE}{COMMA}{BLACK}  最多:{ORANGE}{COMMA}
+STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}上月郵件:{ORANGE}{COMMA}{BLACK}  最多:{ORANGE}{COMMA}
 STR_200F_TALL_OFFICE_BLOCK                                      :摩天辦公大樓
 STR_2010_OFFICE_BLOCK                                           :辦公大樓
 STR_2011_SMALL_BLOCK_OF_FLATS                                   :平房
@@ -1642,19 +1644,19 @@
 STR_2020_LOCAL_AUTHORITY                                        :{BLACK}地方政府
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}顯示地方政府資訊
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} 地方政府
-STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}é‹è¼¸å…¬å¸è©•æ¯”:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}é‹è¼¸å…¬å¸è©•æ¯”:
+STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}:{ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}補助
-STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}æ供補助的é‹è¼¸æœå‹™:
+STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}æ供補助的é‹è¼¸æœå‹™ï¼š
 STR_2027_FROM_TO                                                :{ORANGE}å°‡ {STRING} 從 {STRING} é‹åˆ° {STRING}
 STR_2028_BY                                                     :{YELLOW} (在 {DATE_SHORT} 之å‰)
 STR_202A_NONE                                                   :{ORANGE}ç„¡
-STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}å·²ç²è£œåŠ©çš„æœå‹™:
+STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}å·²ç²è£œåŠ©çš„æœå‹™ï¼š
 STR_202C_FROM_TO                                                :{ORANGE}å°‡ {STRING} 從 {STATION} é‹åˆ° {STATION}{YELLOW} ({COMPANY}
 STR_202D_UNTIL                                                  :{YELLOW}, 補助到 {DATE_SHORT})
-STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}補助éŽæœŸ:{}{}å°‡ {STRING} 從 {STRING} é‹åˆ° {STRING} 從此ä¸å†æ供補助。
-STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}補助çµæŸ:{}{}å°‡ {STRING} 從 {STATION} é‹åˆ° {STATION} ä¸å†æ供補助。
-STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}æ供補助:{}{}首先將 {STRING} 從 {STRING} é‹åˆ° {STRING} çš„å…¬å¸å°‡å¾—到å€åŸŸç•¶å±€è£œåŠ©ä¸€å¹´ï¼
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}補助éŽæœŸï¼š{}{}å°‡ {STRING} 從 {STRING} é‹åˆ° {STRING} 從此ä¸å†æ供補助。
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}補助çµæŸï¼š{}{}å°‡ {STRING} 從 {STATION} é‹åˆ° {STATION} å°‡ä¸å†æ供補助。
+STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}æ供補助:{}{}首先將 {STRING} 從 {STRING} é‹åˆ° {STRING} çš„å…¬å¸å°‡å¾—到å€åŸŸç•¶å±€è£œåŠ©ä¸€å¹´ï¼
 STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}{COMPANY} ç²å¾—補助ï¼{}{}å°‡ {STRING} 從 {STATION} é‹åˆ° {STATION} çš„æœå‹™å¯åœ¨å¾€å¾Œä¸€å¹´å¾—到é¡å¤– 50% çš„é‹è²»è£œåŠ©ï¼
 STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}{COMPANY} ç²å¾—補助ï¼{}{}å°‡ {STRING} 從 {STATION} é‹åˆ° {STATION} çš„æœå‹™å¯åœ¨å¾€å¾Œä¸€å¹´æ”¶åˆ°é›™å€é‹è²»ï¼
 STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}{COMPANY} ç²å¾—補助ï¼{}{}å°‡ {STRING} 從 {STATION} é‹åˆ° {STATION} çš„æœå‹™å¯åœ¨å¾€å¾Œä¸€å¹´æ”¶åˆ°ä¸‰å€é‹è²»ï¼
@@ -1666,7 +1668,7 @@
 STR_2039_TALL_OFFICE_BLOCK                                      :摩天辦公大樓
 STR_203A_SHOPS_AND_OFFICES                                      :店舖與辦公室
 STR_203B_SHOPS_AND_OFFICES                                      :店舖與辦公室
-STR_203C_THEATER                                                :劇場
+STR_203C_THEATER                                                :劇院
 STR_203D_STADIUM                                                :體育館
 STR_203E_OFFICES                                                :辦公室
 STR_203F_HOUSES                                                 :房èˆ
@@ -1675,7 +1677,7 @@
 STR_2042_DO_IT                                                  :{BLACK}辦ç†
 STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}在這個城鎮辦ç†å·¥ä½œ - é¸æ“‡å„工作å¯çœ‹åˆ°èªªæ˜Ž
 STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}辦ç†é¸å®šçš„工作
-STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}å¯è¾¦ç†çš„工作:
+STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}å¯è¾¦ç†çš„工作:
 STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :å°åž‹å»£å‘Šæ´»å‹•
 STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :中型廣告活動
 STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :大型廣告活動
@@ -1684,14 +1686,14 @@
 STR_204B_FUND_NEW_BUILDINGS                                     :出資新建築物
 STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :購買專屬é‹è¼¸æ¬Š
 STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :å‘地方當局行賄
-STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} 開始進行å°åž‹å€åŸŸå»£å‘Šæ´»å‹•ï¼Œç‚ºæ‚¨çš„é‹è¼¸æœå‹™å¸å¼•æ›´å¤šä¹˜å®¢èˆ‡è²¨ç‰©ã€‚{}  花費: {CURRENCY}
-STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} 開始進行中型å€åŸŸå»£å‘Šæ´»å‹•ï¼Œç‚ºæ‚¨çš„é‹è¼¸æœå‹™å¸å¼•æ›´å¤šä¹˜å®¢èˆ‡è²¨ç‰©ã€‚{}  花費: {CURRENCY}
-STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} 開始進行大型å€åŸŸå»£å‘Šæ´»å‹•ï¼Œç‚ºæ‚¨çš„é‹è¼¸æœå‹™å¸å¼•æ›´å¤šä¹˜å®¢èˆ‡è²¨ç‰©ã€‚{}  花費: {CURRENCY}
-STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} 出資é‡å»ºåŸŽå…§é“路網。將å°å¾€å¾Œå…­å€‹æœˆçš„é“è·¯é‹è¼¸é€ æˆå¯è§€çš„è¡æ“Šã€‚{}  花費: {CURRENCY}
-STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} 建造雕åƒç´€å¿µæ‚¨çš„å…¬å¸ã€‚{}  花費: {CURRENCY}
-STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} 出資在城內建造新的商業建築。{}  費用: {CURRENCY}
-STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} 在城內購買一年的專屬é‹è¼¸æ¬Šã€‚å€åŸŸç•¶å±€å°‡åªè®“乘客與貨物使用您的é‹è¼¸æœå‹™ã€‚{}  費用: {CURRENCY}
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} 冒著被抓到å—嚴懲的風險,å‘地方當局行賄以æ高評價{}  費用: {CURRENCY}
+STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} 開始進行å°åž‹å€åŸŸå»£å‘Šæ´»å‹•ï¼Œç‚ºæ‚¨çš„é‹è¼¸æœå‹™å¸å¼•æ›´å¤šä¹˜å®¢èˆ‡è²¨ç‰©ã€‚{}  花費:{CURRENCY}
+STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} 開始進行中型å€åŸŸå»£å‘Šæ´»å‹•ï¼Œç‚ºæ‚¨çš„é‹è¼¸æœå‹™å¸å¼•æ›´å¤šä¹˜å®¢èˆ‡è²¨ç‰©ã€‚{}  花費:{CURRENCY}
+STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} 開始進行大型å€åŸŸå»£å‘Šæ´»å‹•ï¼Œç‚ºæ‚¨çš„é‹è¼¸æœå‹™å¸å¼•æ›´å¤šä¹˜å®¢èˆ‡è²¨ç‰©ã€‚{}  花費:{CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} 出資é‡å»ºåŸŽå…§é“路網。將å°å¾€å¾Œå…­å€‹æœˆçš„é“è·¯é‹è¼¸é€ æˆå¯è§€çš„è¡æ“Šã€‚{}  花費:{CURRENCY}
+STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} 建造雕åƒç´€å¿µæ‚¨çš„å…¬å¸ã€‚{}  花費:{CURRENCY}
+STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} 出資在城內建造新的商業建築。{}  費用:{CURRENCY}
+STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} 在城內購買一年的專屬é‹è¼¸æ¬Šã€‚å€åŸŸç•¶å±€å°‡åªè®“乘客與貨物使用您的é‹è¼¸æœå‹™ã€‚{}  費用:{CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} 冒著被抓到å—嚴懲的風險,å‘地方當局行賄以æ高評價{}  費用:{CURRENCY}
 STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}{TOWN} 交通大亂ï¼{}{}{COMPANY} 出資的é“è·¯é‡å»ºè¨ˆåŠƒç‚ºä¹˜è»Šè€…帶來六個月的惡夢ï¼
 STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
 STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
@@ -1747,7 +1749,7 @@
 STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}ä¸èƒ½ä¿®æ”¹è»Šç«™å稱...
 STR_3032_RATINGS                                                :{BLACK}評價
 STR_3033_ACCEPTS                                                :{BLACK}接å—貨物
-STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}本地å°é‹è¼¸æœå‹™çš„評價:
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}本地å°é‹è¼¸æœå‹™çš„評價:
 
 ############ range for rating starts
 STR_3035_APPALLING                                              :駭人è½èž
@@ -1760,7 +1762,7 @@
 STR_303C_OUTSTANDING                                            :傑出
 ############ range for rating ends
 
-STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
+STR_303D                                                        :{WHITE}{STRING}:{YELLOW}{STRING} ({COMMA}%)
 STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} ä¸å†æŽ¥å— {STRING}
 STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} ä¸å†æŽ¥å— {STRING} 或 {STRING}
 STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} ç¾åœ¨æŽ¥å— {STRING}
@@ -1880,17 +1882,17 @@
 STR_4826_SUGAR_MINE                                             :糖礦
 
 ############ range for requires starts
-STR_4827_REQUIRES                                               :{BLACK}需è¦: {YELLOW}{STRING}
-STR_4828_REQUIRES                                               :{BLACK}需è¦: {YELLOW}{STRING}, {STRING}
-STR_4829_REQUIRES                                               :{BLACK}需è¦: {YELLOW}{STRING}, {STRING}, {STRING}
+STR_4827_REQUIRES                                               :{BLACK}需è¦ï¼š{YELLOW}{STRING}
+STR_4828_REQUIRES                                               :{BLACK}需è¦ï¼š{YELLOW}{STRING}, {STRING}
+STR_4829_REQUIRES                                               :{BLACK}需è¦ï¼š{YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
-STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}上月產é‡:
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}上月產é‡ï¼š
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} (é‹é€äº† {COMMA}%)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}將主視野帶到工業上方
 STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}æ–°çš„ {STRING} 正在 {TOWN} 附近建造中ï¼
 STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}æ–°çš„ {STRING} 正在 {TOWN} 附近種æ¤ä¸­ï¼
-STR_482F_COST                                                   :{BLACK}費用: {YELLOW}{CURRENCY}
+STR_482F_COST                                                   :{BLACK}費用:{YELLOW}{CURRENCY}
 STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}無法在此新建這種工業...
 STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...森林åªèƒ½ç¨®åœ¨é›ªç·šä»¥ä¸Š
 STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} 宣佈立å³é—œé–‰ï¼
@@ -2014,24 +2016,24 @@
 ############ range for difficulty levels ends
 
 ############ range for difficulty settings starts
-STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}競爭å°æ‰‹æ•¸ç›®ä¸Šé™: {ORANGE}{COMMA}
-STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}競爭å°æ‰‹é–‹å§‹æ™‚é–“: {ORANGE}{STRING}
-STR_6807_NO_OF_TOWNS                                            :{LTBLUE}城鎮數: {ORANGE}{STRING}
-STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}工業數: {ORANGE}{STRING}
-STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}最åˆè²¸æ¬¾ä¸Šé™: {ORANGE}{CURRENCY}
-STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}最åˆåˆ©çŽ‡: {ORANGE}{COMMA}%
-STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}é‹å…·ç‡Ÿé‹æ”¯å‡º: {ORANGE}{STRING}
-STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}競爭å°æ‰‹ç™¼å±•é€Ÿåº¦: {ORANGE}{STRING}
-STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}競爭å°æ‰‹æ™ºå•†: {ORANGE}{STRING}
-STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}é‹å…·æ•…障率: {ORANGE}{STRING}
-STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}補助å€çŽ‡: {ORANGE}{STRING}
-STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}建築費用: {ORANGE}{STRING}
-STR_6811_TERRAIN_TYPE                                           :{LTBLUE}地形種類: {ORANGE}{STRING}
-STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}海/湖比率: {ORANGE}{STRING}
-STR_6813_ECONOMY                                                :{LTBLUE}經濟: {ORANGE}{STRING}
-STR_6814_TRAIN_REVERSING                                        :{LTBLUE}列車倒轉: {ORANGE}{STRING}
-STR_6815_DISASTERS                                              :{LTBLUE}ç½é›£: {ORANGE}{STRING}
-STR_16816_CITY_APPROVAL                                         :{LTBLUE}市議會å°å€åŸŸé‡å»ºçš„態度: {ORANGE}{STRING}
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}競爭å°æ‰‹æ•¸ç›®ä¸Šé™ï¼š{ORANGE}{COMMA}
+STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}競爭å°æ‰‹é–‹å§‹æ™‚間:{ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}城鎮數:{ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}工業數:{ORANGE}{STRING}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}最åˆè²¸æ¬¾ä¸Šé™ï¼š{ORANGE}{CURRENCY}
+STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}起始利率:{ORANGE}{COMMA}%
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}é‹å…·ç‡Ÿé‹æ”¯å‡ºï¼š{ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}競爭å°æ‰‹ç™¼å±•é€Ÿåº¦ï¼š{ORANGE}{STRING}
+STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}競爭å°æ‰‹æ™ºå•†ï¼š{ORANGE}{STRING}
+STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}é‹å…·æ•…障率:{ORANGE}{STRING}
+STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}補助å€çŽ‡ï¼š{ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}興建費用:{ORANGE}{STRING}
+STR_6811_TERRAIN_TYPE                                           :{LTBLUE}地形種類:{ORANGE}{STRING}
+STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}海/湖比率:{ORANGE}{STRING}
+STR_6813_ECONOMY                                                :{LTBLUE}經濟:{ORANGE}{STRING}
+STR_6814_TRAIN_REVERSING                                        :{LTBLUE}列車倒轉:{ORANGE}{STRING}
+STR_6815_DISASTERS                                              :{LTBLUE}ç½é›£ï¼š{ORANGE}{STRING}
+STR_16816_CITY_APPROVAL                                         :{LTBLUE}市議會å°å€åŸŸé‡å»ºçš„態度:{ORANGE}{STRING}
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :ç„¡
@@ -2081,7 +2083,7 @@
 STR_7002_PLAYER                                                 :(玩家 {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}新臉孔
 STR_7005_COLOR_SCHEME                                           :{BLACK}é…色
-STR_7006_COLOR_SCHEME                                           :{GOLD}é…色:
+STR_7006_COLOR_SCHEME                                           :{GOLD}é…色:
 STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}æ–°é…色
 STR_7008_COMPANY_NAME                                           :{BLACK}å…¬å¸å稱
 STR_7009_PRESIDENT_NAME                                         :{BLACK}經ç†å§“å
@@ -2107,7 +2109,7 @@
 STR_701D_OTHER                                                  :{GOLD}其它
 STR_701E                                                        :{BLACK}-{CURRENCY64}
 STR_701F                                                        :{BLACK}+{CURRENCY64}
-STR_7020_TOTAL                                                  :{WHITE}總計:
+STR_7020_TOTAL                                                  :{WHITE}總計:
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
 STR_7022_INCOME_GRAPH                                           :{WHITE}收入圖
 STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
@@ -2115,7 +2117,7 @@
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}營é‹æ益圖
 STR_7026_BANK_BALANCE                                           :{WHITE}餘é¡
 STR_7027_LOAN                                                   :{WHITE}貸款
-STR_MAX_LOAN                                                    :{WHITE}貸款上é™:  {BLACK}{CURRENCY64}
+STR_MAX_LOAN                                                    :{WHITE}貸款上é™::{BLACK}{CURRENCY64}
 STR_7028                                                        :{BLACK}{CURRENCY64}
 STR_7029_BORROW                                                 :{BLACK}貸款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}å„Ÿé‚„ {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
@@ -2133,8 +2135,8 @@
 STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}增加貸款
 STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}償還貸款
 STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(經ç†)
-STR_7038_INAUGURATED                                            :{GOLD}æˆç«‹æ–¼: {WHITE}{NUM}
-STR_7039_VEHICLES                                               :{GOLD}é‹å…·:
+STR_7038_INAUGURATED                                            :{GOLD}æˆç«‹æ–¼ï¼š{WHITE}{NUM}
+STR_7039_VEHICLES                                               :{GOLD}é‹å…·ï¼š
 STR_TRAINS                                                      :{WHITE}列車 {COMMA} 列
 STR_ROAD_VEHICLES                                               :{WHITE}汽車 {COMMA} 輛
 STR_AIRCRAFT                                                    :{WHITE}{COMMA} 飛機
@@ -2196,7 +2198,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}世界ä¸æ™¯æ°£ï¼{}{}財務專家å°ç¶“æ¿Ÿè•­æ¢åšå‡ºæœ€å£žæ‰“ç®—ï¼
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}景氣回å‡ï¼{}{}湧ç¾çš„訂單讓工業å°ç¶“濟熱絡充滿信心ï¼
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}切æ›å¤§/å°è¦–窗
-STR_7076_COMPANY_VALUE                                          :{GOLD}å…¬å¸åƒ¹å€¼: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}å…¬å¸åƒ¹å€¼ï¼š{WHITE}{CURRENCY64}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}購買 25% å…¬å¸è‚¡ä»½
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}出售 25% å…¬å¸è‚¡ä»½
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}購買這間公å¸çš„ 25% 股份
@@ -2508,20 +2510,20 @@
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}å¸‚æ°‘æ…¶ç¥ . . .{}é¦–è¼›åˆ—è»ŠæŠµé” {STATION}ï¼
 STR_8802_DETAILS                                                :{WHITE}{STRING} (詳細資料)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}å‰æ–¹æœ‰åˆ—車
-STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
-STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_8804                                                        :{SETX 10}{COMMA}:{STRING} {STRING}
+STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}:{STRING} {STRING}
 STR_8806_GO_TO                                                  :å‰å¾€ {STATION}
 STR_8807_GO_TO_TRANSFER                                         :å‰å¾€ {STATION} (轉é‹ï¼Œåƒ…載ä¸å¸)
 STR_8808_GO_TO_UNLOAD                                           :å‰å¾€ {STATION} (å¸å®¢è²¨)
 STR_8809_GO_TO_TRANSFER_UNLOAD                                  :å‰å¾€ {STATION} (轉é‹ï¼Œå¸å®¢è²¨æ¸…空離站)
-STR_880A_GO_TO_LOAD                                             :å‰å¾€ {STATION} (載貨)
+STR_880A_GO_TO_LOAD                                             :å‰å¾€ {STATION} (滿載)
 STR_880B_GO_TO_TRANSFER_LOAD                                    :å‰å¾€ {STATION} (轉é‹ï¼Œç­‰å¾…滿載)
 STR_880C_GO_NON_STOP_TO                                         :å‰å¾€ {STATION} ä¸åœé /中途ä¸åœ
-STR_880D_GO_TO_NON_STOP_TRANSFER                                :å‰å¾€ {STATION} (轉é‹ï¼Œåƒ…載ä¸å¸) 中途ä¸åœ
-STR_880E_GO_NON_STOP_TO_UNLOAD                                  :å‰å¾€ {STATION} (å¸å®¢è²¨) 中途ä¸åœ
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :å‰å¾€ {STATION} (轉é‹ï¼Œå¸å®¢è²¨æ¸…空離站) 中途ä¸åœ
-STR_8810_GO_NON_STOP_TO_LOAD                                    :å‰å¾€ {STATION} (載貨) 中途ä¸åœ
-STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :å‰å¾€ {STATION} (轉é‹ï¼Œç­‰å¾…滿載) 中途ä¸åœ
+STR_880D_GO_TO_NON_STOP_TRANSFER                                :å‰å¾€ {STATION} (è½‰é‹ [僅載ä¸å¸]) 中途ä¸åœ
+STR_880E_GO_NON_STOP_TO_UNLOAD                                  :å‰å¾€ {STATION} (å¸è¼‰) 中途ä¸åœ
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :å‰å¾€ {STATION} (è½‰é‹ [å¸è¼‰æ¸…空離站]) 中途ä¸åœ
+STR_8810_GO_NON_STOP_TO_LOAD                                    :å‰å¾€ {STATION} (滿載) 中途ä¸åœ
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :å‰å¾€ {STATION} (è½‰é‹ [等待滿載]) 中途ä¸åœ
 STR_GO_TO_TRAIN_DEPOT                                           :å‰å¾€ {TOWN} æ©Ÿå» 
 STR_SERVICE_AT_TRAIN_DEPOT                                      :在 {TOWN} 機廠維護
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :å‰å¾€ {TOWN} æ©Ÿå»  中途ä¸åœ
@@ -2561,7 +2563,7 @@
 STR_8820_RENAME                                                 :{BLACK}æ›´å
 STR_8823_SKIP                                                   :{BLACK}è·³éŽ
 STR_8824_DELETE                                                 :{BLACK}刪除
-STR_8825_NON_STOP                                               :{BLACK}(中途)ä¸åœ
+STR_8825_NON_STOP                                               :{BLACK}中途ä¸åœ
 STR_8826_GO_TO                                                  :{BLACK}å‰å¾€
 STR_8827_FULL_LOAD                                              :{BLACK}滿載
 STR_8828_UNLOAD                                                 :{BLACK}å¸è¼‰
@@ -2573,8 +2575,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}維護
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}無法購買éµé“車輛...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購於: {LTBLUE}{NUM}{BLACK} 價值: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   價值: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   價值:{LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}正在è£å¸å®¢è²¨
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}列車必須åœåœ¨æ©Ÿå» å†…
@@ -2590,8 +2592,8 @@
 STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}無法出售éµé“車輛...
 STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}無法找到å‰å¾€é™„近機廠的路徑
 STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}無法åœæ­¢/啟動列車...
-STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}維護間隔: {LTBLUE}{COMMA} 天{BLACK}   上次維護: {LTBLUE}{DATE_LONG}
-STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}維護間隔: {LTBLUE}{COMMA}%{BLACK}   上次維護: {LTBLUE}{DATE_LONG}
+STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}維護間隔:{LTBLUE}{COMMA} 天{BLACK}   上次維護:{LTBLUE}{DATE_LONG}
+STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}維護間隔:{LTBLUE}{COMMA}%{BLACK}   上次維護:{LTBLUE}{DATE_LONG}
 STR_883D_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}列車 - 點é¸åˆ—車檢視資訊
 STR_883E_BUILD_NEW_TRAINS_REQUIRES                              :{BLACK}購買新列車 (需è¦éµé“æ©Ÿå» )
 STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}列車 - 點é¸åˆ—車檢視資訊,拖放車廂å¯åŠ æŽ›/解è¯
@@ -2617,18 +2619,18 @@
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}指令清單 - 點é¸æŒ‡ä»¤å¯é¸æ“‡ã€‚æŒ‰ä½ CTRL 點é¸å¯è·³åˆ°è»Šç«™ä½ç½®
 STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}è·³éŽç›®å‰æŒ‡ä»¤ï¼Œç¹¼çºŒä¸‹å€‹æŒ‡ä»¤
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}刪除é¸å®šæŒ‡ä»¤
-STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}使é¸å®šçš„指令(中途)ä¸åœ
+STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}使é¸å®šçš„指令中途ä¸åœ
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}在é¸å®šçš„指令å‰æ’入新指令,或在最後新增指令
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}讓列車在é¸å®šçš„指令等待載滿
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}讓列車在é¸å®šçš„指令強制å¸è¼‰
 STR_SERVICE_HINT                                                :{BLACK}è·³éŽé€™å€‹æŒ‡ä»¤ï¼Œé™¤éžéœ€è¦ç¶­è­·
-STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}價格: {CURRENCY} é‡é‡: {WEIGHT_S}{}速度: {VELOCITY}  功率: {POWER}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
+STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}價格:{CURRENCY} é‡é‡ï¼š{WEIGHT_S}{}速度:{VELOCITY}  功率:{POWER}{}æ“作æˆæœ¬ï¼š{CURRENCY} / å¹´{}Capacity:{CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}故障
-STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數: {LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡º: {LTBLUE}{CURRENCY}/å¹´
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}é‡é‡: {LTBLUE}{WEIGHT_S}  {BLACK}功率: {LTBLUE}{POWER}{BLACK} 極速: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}é‡é‡: {LTBLUE}{WEIGHT_S} {BLACK}功率: {LTBLUE}{POWER}{BLACK} 極速: {LTBLUE}{VELOCITY} {BLACK}最大牽引力: {LTBLUE}{FORCE}
-STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益: {LTBLUE}{CURRENCY}  (去年: {CURRENCY})
-STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦: {LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數: {LTBLUE}{COMMA}
+STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數:{LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡ºï¼š{LTBLUE}{CURRENCY}/å¹´
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}é‡é‡ï¼š{LTBLUE}{WEIGHT_S}  {BLACK}功率:{LTBLUE}{POWER}{BLACK} 極速:{LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}é‡é‡ï¼š{LTBLUE}{WEIGHT_S} {BLACK}功率:{LTBLUE}{POWER}{BLACK} 極速:{LTBLUE}{VELOCITY} {BLACK}最大牽引力:{LTBLUE}{FORCE}
+STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
+STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦ï¼š{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
 STR_8861_STOPPED                                                :{RED}åœæ­¢
 STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}無法讓列車通éŽéšªé˜»è™ŸèªŒ...
 STR_8863_CRASHED                                                :{RED}撞毀ï¼
@@ -2663,12 +2665,12 @@
 STR_9007_BUILD_VEHICLE                                          :{BLACK}購買車輛
 STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}無法購買汽車
 STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (詳細資料)
-STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數: {LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡º: {LTBLUE}{CURRENCY}/å¹´
-STR_900E_MAX_SPEED                                              :{BLACK}極速: {LTBLUE}{VELOCITY}
-STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益: {LTBLUE}{CURRENCY}  (去年: {CURRENCY})
-STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦: {LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於: {LTBLUE}{NUM}{BLACK} 價值: {LTBLUE}{CURRENCY}
-STR_9012_CAPACITY                                               :{BLACK}容é‡: {LTBLUE}{CARGO}
+STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數:{LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡ºï¼š{LTBLUE}{CURRENCY}/å¹´
+STR_900E_MAX_SPEED                                              :{BLACK}極速:{LTBLUE}{VELOCITY}
+STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
+STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦ï¼š{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_9012_CAPACITY                                               :{BLACK}容é‡ï¼š{LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...å¿…é ˆåœåœ¨æ±½è»Šåº«å†…
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}無法出售汽車...
 STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}無法åœæ­¢/起動汽車...
@@ -2693,7 +2695,7 @@
 STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}將主視野移到車庫ä½ç½®
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}汽車清單 - 點é¸æ±½è»Šå¯çœ‹åˆ°è©³ç´°è³‡è¨Š
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}購買é¸å®šçš„汽車
-STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}價格: {CURRENCY}{}速度: {VELOCITY}{}營é‹è²»ç”¨: {CURRENCY}/å¹´{}容é‡: {CARGO}
+STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}價格:{CURRENCY}{}速度:{VELOCITY}{}營é‹è²»ç”¨ï¼š{CURRENCY}/å¹´{}容é‡ï¼š{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}命å汽車
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}無法命å汽車...
@@ -2735,12 +2737,12 @@
 STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}å‰æ–¹æœ‰èˆ¹èˆ¶
 STR_980F                                                        :{WHITE}{VEHICLE}
 STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (詳細資料)
-STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數: {LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡º: {LTBLUE}{CURRENCY}/å¹´
-STR_9813_MAX_SPEED                                              :{BLACK}極速: {LTBLUE}{VELOCITY}
-STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益: {LTBLUE}{CURRENCY}  (去年: {CURRENCY})
-STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦: {LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於: {LTBLUE}{NUM}{BLACK} 價值: {LTBLUE}{CURRENCY}
-STR_9817_CAPACITY                                               :{BLACK}容é‡: {LTBLUE}{CARGO}
+STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數:{LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡ºï¼š{LTBLUE}{CURRENCY}/å¹´
+STR_9813_MAX_SPEED                                              :{BLACK}極速:{LTBLUE}{VELOCITY}
+STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
+STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦ï¼š{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_9817_CAPACITY                                               :{BLACK}容é‡ï¼š{LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}無法åœæ­¢/起動船舶...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}無法將船舶é€åˆ°èˆ¹å¡¢...
 STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}找ä¸åˆ°é™„近的船塢
@@ -2764,7 +2766,7 @@
 STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}將主視窗移到船舶ä½ç½®
 STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}將船舶é€å¾€èˆ¹å¡¢ã€‚æŒ‰ä½ CTRL 點é¸å‰‡åªåšç¶­è­·
 STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}顯示船舶詳細資料
-STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}價格: {CURRENCY} 極速: {VELOCITY}{}容é‡: {CARGO}{}營é‹æ”¯å‡º: {CURRENCY}/å¹´
+STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}價格:{CURRENCY} 極速:{VELOCITY}{}容é‡ï¼š{CARGO}{}營é‹æ”¯å‡ºï¼š{CURRENCY}/å¹´
 STR_982F_NAME_SHIP                                              :{BLACK}命å船舶
 
 STR_9831_NAME_SHIP                                              :{WHITE}命å船舶
@@ -2781,8 +2783,8 @@
 STR_983C_REFIT_SHIP                                             :{BLACK}改è£èˆ¹èˆ¶
 STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}é¸æ“‡è¦è®“船舶é‹è¼¸çš„酬載種類
 STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}改è£èˆ¹èˆ¶ä»¥é‹è¼¸é¸å®šçš„酬載
-STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}é¸æ“‡è¦é‹è¼¸çš„酬載種類:
-STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}新容é‡: {GOLD}{CARGO}{}{BLACK}改è£è²»ç”¨: {GOLD}{CURRENCY}
+STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}é¸æ“‡è¦é‹è¼¸çš„酬載種類:
+STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}新容é‡ï¼š{GOLD}{CARGO}{}{BLACK}改è£è²»ç”¨ï¼š{GOLD}{CURRENCY}
 STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}無法改è£èˆ¹èˆ¶...
 STR_9842_REFITTABLE                                             :(å¯æ”¹è£)
 STR_GO_TO_SHIP_DEPOT                                            :å‰å¾€ {TOWN} 船塢
@@ -2803,11 +2805,11 @@
 STR_A00A                                                        :{WHITE}{VEHICLE}
 STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (指令)
 STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (詳細資料)
-STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數: {LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡º: {LTBLUE}{CURRENCY}/å¹´
-STR_A00E_MAX_SPEED                                              :{BLACK}極速: {LTBLUE}{VELOCITY}
-STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益: {LTBLUE}{CURRENCY}  (去年: {CURRENCY})
-STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦: {LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於: {LTBLUE}{NUM}{BLACK} 價值: {LTBLUE}{CURRENCY}
+STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數:{LTBLUE}{STRING}{BLACK}   營é‹æ”¯å‡ºï¼š{LTBLUE}{CURRENCY}/å¹´
+STR_A00E_MAX_SPEED                                              :{BLACK}極速:{LTBLUE}{VELOCITY}
+STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年æ益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
+STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}å¯é åº¦ï¼š{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}無法將飛機é€å›žæ©Ÿæ£š...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}æ­£å‰å¾€ {STATION} 機棚
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}æ­£å‰å¾€ {STATION} 機棚, {VELOCITY}
@@ -2817,8 +2819,8 @@
 STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}å‰æ–¹æœ‰é£›æ©Ÿ
 STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}無法åœæ­¢/起動飛機...
 STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}飛機正在飛行中
-STR_A019_CAPACITY                                               :{BLACK}容é‡: {LTBLUE}{CARGO}, {CARGO}
-STR_A01A_CAPACITY                                               :{BLACK}容é‡: {LTBLUE}{CARGO}
+STR_A019_CAPACITY                                               :{BLACK}容é‡ï¼š{LTBLUE}{CARGO}, {CARGO}
+STR_A01A_CAPACITY                                               :{BLACK}容é‡ï¼š{LTBLUE}{CARGO}
 STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}飛機必須åœåœ¨æ©Ÿæ£šå†…
 STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}無法出售飛機...
 STR_A01D_AIRPORT_CONSTRUCTION                                   :建造機場
@@ -2836,7 +2838,7 @@
 STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}將主視野帶到飛機ä½ç½®
 STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}將飛機é€åˆ°æ©Ÿæ£šã€‚æŒ‰ä½ CTRL 點é¸å‰‡åªåšç¶­è­·
 STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}顯示飛機詳細資料
-STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}價格: {CURRENCY} 極速: {VELOCITY}{}容é‡: 乘客 {COMMA} å,郵件 {COMMA} 袋{}營é‹æ”¯å‡º: {CURRENCY}/å¹´
+STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}價格:{CURRENCY} 極速:{VELOCITY}{}容é‡ï¼šä¹˜å®¢ {COMMA} å,郵件 {COMMA} 袋{}營é‹æ”¯å‡ºï¼š{CURRENCY}/å¹´
 
 STR_A030_NAME_AIRCRAFT                                          :{WHITE}命å飛機
 STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}無法命å飛機
@@ -2854,11 +2856,11 @@
 STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}改è£é£›æ©Ÿ
 STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}é¸æ“‡è¦è®“飛機é‹é€çš„酬載
 STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}改è£é£›æ©Ÿä»¥é‹é€é¸å®šçš„酬載
-STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}é¸æ“‡è¦é‹é€çš„酬載種類:
-STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}新容é‡: {GOLD}{STRING}{}{BLACK}改è£è²»ç”¨: {GOLD}{CURRENCY}
+STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}é¸æ“‡è¦é‹é€çš„酬載種類:
+STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}新容é‡ï¼š{GOLD}{STRING}{}{BLACK}改è£è²»ç”¨ï¼š{GOLD}{CURRENCY}
 STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}無法改è£é£›æ©Ÿ...
 STR_GO_TO_AIRPORT_HANGAR                                        :å‰å¾€ {STATION} 機棚
-SERVICE_AT_AIRPORT_HANGAR                                       :在{STATION}飛機庫進行維修
+SERVICE_AT_AIRPORT_HANGAR                                       :在{STATION}機棚進行檢修
 
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}{STATION} 發生飛船ç½é›£ï¼
@@ -2871,7 +2873,7 @@
 
 STR_BRIBE_FAILED                                                :{WHITE}您嘗試行賄的舉動
 STR_BRIBE_FAILED_2                                              :{WHITE}已經被調查員發ç¾
-STR_BUILD_DATE                                                  :{BLACK}建於: {LTBLUE}{DATE_LONG}
+STR_BUILD_DATE                                                  :{BLACK}建於:{LTBLUE}{DATE_LONG}
 
 STR_PERFORMANCE_DETAIL                                          :{WHITE}詳細效率評比
 STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}詳細資料
@@ -2880,16 +2882,16 @@
 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}é‹å…·:
-STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}車站:
-STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}最低æ益:
-STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}最低收入:
-STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}最高收入:
-STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}é‹é€äº†:
-STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}酬載:
-STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}錢:
-STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}貸款:
-STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}總計:
+STR_PERFORMANCE_DETAIL_VEHICLES                                 :{BLACK}é‹å…·ï¼š
+STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}站點:
+STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}最低æ益:
+STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}最低收入:
+STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}最高收入:
+STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}å·²é‹é€ï¼š
+STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}酬載:
+STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}資金:
+STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}貸款:
+STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}總計:
 ############ End of order list
 STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}é‹å…·æ•¸é‡ï¼›é€™åŒ…å«æ±½è»Šã€éµé“ã€èˆ¹èˆ¶èˆ‡é£›æ©Ÿ
 STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}車站部分的數é‡ã€‚æ¯éƒ¨ä»½è»Šç«™ (ç«è»Šç«™ï¼Œå…¬è»Šç«™ï¼Œæ©Ÿå ´) 都算在内,就算連在一起亦然
@@ -2908,19 +2910,19 @@
 STR_NEWGRF_SET_PARAMETERS                                       :{BLACK}設定åƒæ•¸
 STR_NEWGRF_TIP                                                  :{BLACK}列出所有您安è£çš„ NewGRF 組。點é¸ä»¥ä¿®æ”¹è¨­å®š
 STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}ç›®å‰æ²’æœ‰å®‰è£ NewGRF 檔ï¼è«‹åƒè€ƒèªªæ˜Žæ–‡ä»¶é—œæ–¼å®‰è£æ–°åœ–片的部份
-STR_NEWGRF_FILENAME                                             :{BLACK}檔å: {SILVER}{STRING}
-STR_NEWGRF_GRF_ID                                               :{BLACK}GRF 編號: {SILVER}{STRING}
-STR_NEWGRF_MD5SUM                                               :{BLACK}MD5 雜湊值: {SILVER}{STRING}
+STR_NEWGRF_FILENAME                                             :{BLACK}檔å:{SILVER}{STRING}
+STR_NEWGRF_GRF_ID                                               :{BLACK}GRF 編號:{SILVER}{STRING}
+STR_NEWGRF_MD5SUM                                               :{BLACK}MD5 雜湊值:{SILVER}{STRING}
 STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}您正準備修改進行中的éŠæˆ²ï¼›é€™å¯èƒ½ä½¿ OpenTTD 當掉。{}您絕å°ç¢ºå®šè¦é€™éº¼åšå—Žï¼Ÿ
 
 STR_NEWGRF_ERROR_MSG_INFO                                       :{SILVER}{STRING}
-STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}警告: {SILVER}{STRING}
-STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}錯誤: {SILVER}{STRING}
-STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}åš´é‡éŒ¯èª¤: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}警告:{SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}錯誤:{SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}åš´é‡éŒ¯èª¤ï¼š{SILVER}{STRING}
 STR_NEWGRF_ERROR_VERSION_NUMBER                                 :已知 {STRING} è·Ÿ TTDPatch 版本ä¸åˆã€‚
 STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{STRING} åªé©åˆç”¨æ–¼ TTD 版本 {STRING}
 STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} 必須跟 {STRING} 一起使用
-STR_NEWGRF_ERROR_INVALID_PARAMETER                              : {STRING} çš„åƒæ•¸ç„¡æ•ˆ: {STRING} ({NUM})
+STR_NEWGRF_ERROR_INVALID_PARAMETER                              : {STRING} çš„åƒæ•¸ç„¡æ•ˆï¼š{STRING} ({NUM})
 STR_NEWGRF_ERROR_LOAD_BEFORE                                    :è¼‰å…¥å‰ {1:STRING} 必須先載入 {0:STRING}。
 STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} 必須在 {STRING} 之後載入。
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :GRF 檔案翻譯後出ç¾éŒ¯èª¤
@@ -2934,7 +2936,7 @@
 STR_NEWGRF_MOVEDOWN                                             :{BLACK}下移
 STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}å°‡é¸å®šçš„ NewGRF 檔案往清單下方移動
 STR_NEWGRF_FILE_TIP                                             :{BLACK}列出已安è£çš„ NewGRF 檔案。點é¸æª”案以修改設定。
-STR_NEWGRF_PARAMETER                                            :{BLACK}åƒæ•¸: {SILVER}{STRING}
+STR_NEWGRF_PARAMETER                                            :{BLACK}åƒæ•¸ï¼š{SILVER}{STRING}
 STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}輸入 NewGRF åƒæ•¸
 STR_NEWGRF_NO_INFO                                              :{BLACK}沒有相關資訊
 
@@ -2943,7 +2945,7 @@
 STR_NEWGRF_ADD_FILE_TIP                                         :{BLACK}å°‡é¸å®šçš„ NewGRF 加入目å‰é…ç½®
 STR_NEWGRF_RESCAN_FILES                                         :{BLACK}é‡æ–°æŽƒæ檔案
 STR_NEWGRF_RESCAN_FILES_TIP                                     :{BLACK}æ›´æ–°å¯ç”¨çš„ NewGRF 檔案清單
-STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}無法新增檔案: GRF ID é‡è¤‡
+STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}無法新增檔案:GRF ID é‡è¤‡
 
 STR_NEWGRF_NOT_FOUND                                            :{RED}找ä¸åˆ°ç¬¦åˆçš„檔案
 STR_NEWGRF_DISABLED                                             :{RED}關閉
@@ -2954,13 +2956,13 @@
 STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}找ä¸åˆ°è¼‰å…¥éŠæˆ²æ‰€éœ€çš„ GRF 檔案
 
 STR_CURRENCY_WINDOW                                             :{WHITE}自訂幣值
-STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}匯率: {ORANGE}{CURRENCY} = £ {COMMA}
-STR_CURRENCY_SEPARATOR                                          :{LTBLUE}分隔符號:
-STR_CURRENCY_PREFIX                                             :{LTBLUE}å‰ç½®:
-STR_CURRENCY_SUFFIX                                             :{LTBLUE}後置:
-STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}改用æ­å…ƒ: {ORANGE}{NUM}
-STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}改用æ­å…ƒ: {ORANGE}æ°¸ä¸æ”¹ç”¨
-STR_CURRENCY_PREVIEW                                            :{LTBLUE}é è¦½: {ORANGE}{CURRENCY}
+STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}匯率:{ORANGE}{CURRENCY} = £ {COMMA}
+STR_CURRENCY_SEPARATOR                                          :{LTBLUE}分隔符號:
+STR_CURRENCY_PREFIX                                             :{LTBLUE}å‰ç½®ï¼š
+STR_CURRENCY_SUFFIX                                             :{LTBLUE}後置:
+STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}改用æ­å…ƒï¼š{ORANGE}{NUM}
+STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}改用æ­å…ƒï¼š{ORANGE}æ°¸ä¸æ”¹ç”¨
+STR_CURRENCY_PREVIEW                                            :{LTBLUE}é è¦½ï¼š{ORANGE}{CURRENCY}
 STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}變更自訂幣值åƒæ•¸
 
 STR_TRAIN                                                       :{BLACK}{TRAIN}
@@ -3017,9 +3019,9 @@
 STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}é¸æ“‡æ‚¨è¦å–代車頭的軌é“é¡žåž‹
 STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}顯示左方的車頭è¦æ›¿æ›æˆå“ªç¨®è»Šé ­
 STR_REPLACE_HELP                                                :{BLACK}這讓您å¯åœ¨åˆ—車進入機廠的時候,用一種車頭å–代å¦ä¸€ç¨®è»Šé ­
-STR_REPLACE_REMOVE_WAGON                                        :{BLACK}移除車廂: {ORANGE}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON                                        :{BLACK}移除載具:{ORANGE}{SKIP}{STRING}
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}如果替æ›å¾Œçš„車廂較長的話,讓自動替æ›åŠŸèƒ½ç§»é™¤è»Šå»‚ (從頭開始) 以便維æŒåˆ—車長度。
-STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}å–代: {ORANGE}{SKIP}{SKIP}{STRING}
+STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}å–代:{ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} 實驗功能 {}在車頭與車廂å–代畫é¢ä¹‹é–“切æ›ã€‚{}車廂å–代åªæœ‰åœ¨æ–°è»Šå»‚能改è£é‹é€èˆŠè»Šå»‚酬載的時候æ‰æœƒåŸ·è¡Œã€‚æ¯å€‹è»Šå»‚都會進行一次檢查。
 STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}載具已經åœç”¢
 STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}車輛已經åœç”¢
@@ -3058,22 +3060,22 @@
 
 STR_TINY_BLACK                                                  :{BLACK}{TINYFONT}{COMMA}
 
-STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}價格: {GOLD}{CURRENCY}{BLACK} é‡é‡: {GOLD}{WEIGHT_S}
-STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}速度: {GOLD}{VELOCITY}{BLACK}   功率: {GOLD}{POWER}
-STR_PURCHASE_INFO_SPEED                                         :{BLACK}速度: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}營é‹æ”¯å‡º: {GOLD}{CURRENCY}/å¹´
-STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}容é‡: {GOLD}{CARGO} {STRING}
-STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}設計年份: {GOLD}{NUM}{BLACK} 壽命: {GOLD}{COMMA} 年
-STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}最大å¯é åº¦: {GOLD}{COMMA}%
-STR_PURCHASE_INFO_COST                                          :{BLACK}價格: {GOLD}{CURRENCY}
-STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}é‡é‡: {GOLD}{WEIGHT_S}  ({WEIGHT_S})
-STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}價格: {GOLD}{CURRENCY}{BLACK} 速度: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}容é‡: {GOLD}乘客 {COMMA} 人, 郵件 {COMMA} 袋
-STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}動力車廂: {GOLD}+{POWER}{BLACK} é‡é‡: {GOLD}+{WEIGHT_S}
-STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}å¯æ”¹é€ æˆ: {GOLD}
+STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}價格:{GOLD}{CURRENCY}{BLACK} é‡é‡ï¼š{GOLD}{WEIGHT_S}
+STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}速度:{GOLD}{VELOCITY}{BLACK}   功率:{GOLD}{POWER}
+STR_PURCHASE_INFO_SPEED                                         :{BLACK}速度:{GOLD}{VELOCITY}
+STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}營é‹æ”¯å‡ºï¼š{GOLD}{CURRENCY} / å¹´
+STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}容é‡ï¼š{GOLD}{CARGO} {STRING}
+STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}設計年份:{GOLD}{NUM}{BLACK} 使用年é™ï¼š{GOLD}{COMMA} å¹´
+STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}最大å¯é åº¦ï¼š{GOLD}{COMMA}%
+STR_PURCHASE_INFO_COST                                          :{BLACK}價格:{GOLD}{CURRENCY}
+STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}é‡é‡ï¼š{GOLD}{WEIGHT_S}  ({WEIGHT_S})
+STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}價格:{GOLD}{CURRENCY}{BLACK} 速度:{GOLD}{VELOCITY}
+STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}容é‡ï¼š{GOLD}乘客 {COMMA} 人,郵件 {COMMA} 袋
+STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}動力車廂:{GOLD}+{POWER}{BLACK} é‡é‡ï¼š{GOLD}+{WEIGHT_S}
+STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}å¯æ”¹è£æˆï¼š{GOLD}
 STR_PURCHASE_INFO_ALL_TYPES                                     :所有酬載類型
 STR_PURCHASE_INFO_ALL_BUT                                       :{GOLD} 以外皆å¯
-STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}最大牽引力: {GOLD}{FORCE}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}最大牽引力:{GOLD}{FORCE}
 
 ########### String for New Landscape Generator
 
@@ -3081,18 +3083,18 @@
 STR_RANDOM                                                      :{BLACK}亂數化
 STR_RANDOM_HELP                                                 :{BLACK}改變產生地形的亂數種å­
 STR_WORLD_GENERATION_CAPTION                                    :{WHITE}產生世界
-STR_RANDOM_SEED                                                 :{BLACK}亂數種å­:
+STR_RANDOM_SEED                                                 :{BLACK}亂數種å­ï¼š
 STR_RANDOM_SEED_HELP                                            :{BLACK}點é¸å¯è¼¸å…¥äº‚數種å­
 STR_LAND_GENERATOR                                              :{BLACK}地形產生器
-STR_TREE_PLACER                                                 :{BLACK}æ¤æ¨¹æ¼”算法:
-STR_HEIGHTMAP_ROTATION                                          :{BLACK}高度圖旋轉:
-STR_TERRAIN_TYPE                                                :{BLACK}地形種類:
-STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}æµ·å¹³é¢:
-STR_SMOOTHNESS                                                  :{BLACK}平滑度:
-STR_SNOW_LINE_HEIGHT                                            :{BLACK}雪線高度:
-STR_DATE                                                        :{BLACK}日期:
-STR_NUMBER_OF_TOWNS                                             :{BLACK}城鎮數é‡:
-STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}工業數é‡:
+STR_TREE_PLACER                                                 :{BLACK}æ¤æ¨¹æ¼”算法:
+STR_HEIGHTMAP_ROTATION                                          :{BLACK}高度圖旋轉:
+STR_TERRAIN_TYPE                                                :{BLACK}地形種類:
+STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}æµ·å¹³é¢ï¼š
+STR_SMOOTHNESS                                                  :{BLACK}平滑度:
+STR_SNOW_LINE_HEIGHT                                            :{BLACK}雪線高度:
+STR_DATE                                                        :{BLACK}日期:
+STR_NUMBER_OF_TOWNS                                             :{BLACK}城鎮數é‡ï¼š
+STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}工業數é‡ï¼š
 STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
 STR_SNOW_LINE_UP                                                :{BLACK}將雪線高度上移一格
 STR_SNOW_LINE_DOWN                                              :{BLACK}將雪線高度下移一格
@@ -3101,8 +3103,8 @@
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}縮放警告
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}ä¸å»ºè­°éŽåº¦ç¸®æ”¾åœ°åœ–。繼續產生?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
-STR_HEIGHTMAP_NAME                                              :{BLACK}高度圖å稱:
-STR_HEIGHTMAP_SIZE                                              :{BLACK}大å°: {ORANGE}{NUM} x {NUM}
+STR_HEIGHTMAP_NAME                                              :{BLACK}高度圖å稱:
+STR_HEIGHTMAP_SIZE                                              :{BLACK}大å°ï¼š{ORANGE}{NUM} x {NUM}
 STR_GENERATION_WORLD                                            :{WHITE}正在產生世界...
 STR_GENERATION_ABORT                                            :{BLACK}放棄
 STR_GENERATION_ABORT_CAPTION                                    :{WHITE}放棄產生地形
@@ -3125,7 +3127,7 @@
 STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}將平地高度下移一層
 STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}將平地高度上移一格
 STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}修改平地高度
-STR_FLAT_WORLD_HEIGHT                                           :{BLACK}平地高度:
+STR_FLAT_WORLD_HEIGHT                                           :{BLACK}平地高度:
 STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
 
 STR_SMALLMAP_CENTER                                             :{BLACK}å°‡å°åœ°åœ–移到目å‰åœ°é»žä½ç½®
@@ -3148,10 +3150,10 @@
 
 ############ Tooltip measurment
 
-STR_MEASURE_LENGTH                                              :{BLACK}長度: {NUM}
-STR_MEASURE_AREA                                                :{BLACK}å€åŸŸ: {NUM} x {NUM}
-STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}長度: {NUM}{}高度差: {NUM} m
-STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}å€åŸŸ: {NUM} x {NUM}{}高度差: {NUM} m
+STR_MEASURE_LENGTH                                              :{BLACK}長度:{NUM}
+STR_MEASURE_AREA                                                :{BLACK}å€åŸŸï¼š{NUM} x {NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}長度:{NUM}{}高度差:{NUM} m
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}å€åŸŸï¼š{NUM} x {NUM}{}高度差:{NUM} m
 
 ############ Date formatting
 STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
@@ -3160,7 +3162,7 @@
 
 ########
 
-STR_FEEDER_CARGO_VALUE                                          :{BLACK}轉é‹é€²å¸³: {LTBLUE}{CURRENCY}
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}轉é‹é€²å¸³ï¼š{LTBLUE}{CURRENCY}
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...此路段為市鎮所有
 STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...此路é¢å‘錯誤的方å‘
 
--- a/src/lang/turkish.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/turkish.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Küçük
 STR_02A2_MEDIUM                                                 :{BLACK}Orta
 STR_02A3_LARGE                                                  :{BLACK}Büyük
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Åžehir
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Şehir büyüklüğü seç
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Şehir büyüklüğü:
 
@@ -1135,6 +1136,11 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :SaÄŸ
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Pencere yapışma yarıçapı: {ORANGE}{STRING} piksel
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Pencere yapışma yarıçapı: {ORANGE}kapalı
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Hiçbiri
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :YavaÅŸ
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Hızlı
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Çok Hızlı
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Arayüz
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Ä°nÅŸaat
@@ -3012,6 +3018,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Otomatik yenilemede tren boyutunun artması gerekiyorsa vagonları kaldır(en önden başlayarak yeterli sayıda vagon silinir).
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}DeÄŸiÅŸtiriyor: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} DENEYSEL ÖZELLiK {}Lokomotif ve vagon değişimi pencereleri arasında geçiş yap.{}Vagon değişimi sadece yeni vagon eskisinin taşıdığı türde yükü taşıyabiliyorsa yapılir. Değiştirme işlemi sırasında tüm vagonlar için bu durum kontrol edilir.
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Tren kullanılamaz
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Araba kullanılamaz
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Gemi kullanılamaz
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Uçak kullanılamaz
 
 STR_ENGINES                                                     :Lokomotifler
 STR_WAGONS                                                      :Vagon
@@ -3149,6 +3159,7 @@
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Aktarma Maliyeti: {LTBLUE}{CURRENCY}
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...bu yol belediyeye ait
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...yol yanlış yönde
 
 STR_TRANSPARENCY_TOOLB                                          :{WHITE}Şeffaflık Seçenekleri
 STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Durak tabelaları için şeffaflık
--- a/src/lang/ukrainian.txt	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/lang/ukrainian.txt	Sat Apr 21 08:23:57 2007 +0000
@@ -877,6 +877,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Мале
 STR_02A2_MEDIUM                                                 :{BLACK}Середнє
 STR_02A3_LARGE                                                  :{BLACK}Велике
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}МіÑто
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Вибір розміру міÑта
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Розмір міÑта:
 
@@ -1262,13 +1263,14 @@
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Ð Ð°Ð´Ñ–ÑƒÑ Ð¿Ñ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÐ¾Ð½: {ORANGE}{STRING} пікÑ.
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÐ¾Ð½ {ORANGE}вимкнено
 STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}ШвидкіÑÑ‚ÑŒ роÑту міÑта: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :не роÑте
-STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :повільна
-STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :нормальна
-STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :швидка
-STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :дуже швидка
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Ðемає
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Повільна
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :СереднÑ
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Швидка
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Дуже швидка
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}КількіÑÑ‚ÑŒ міÑÑ‚, Ñкі будуть роÑти вдвічі швидше: {ORANGE}1 з {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}КількіÑÑ‚ÑŒ міÑÑ‚, Ñкі будуть роÑти вдвічі швидше: {ORANGE}нема
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Початковий коєффіцієнт розміру міÑÑ‚: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}ВиглÑд
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Споруди
--- a/src/macros.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/macros.h	Sat Apr 21 08:23:57 2007 +0000
@@ -82,9 +82,9 @@
 
 
 /* checking more bits. Maybe unneccessary, but easy to use */
-#define HASBITS(x,y) ((x) & (y))
-#define SETBITS(x,y) ((x) |= (y))
-#define CLRBITS(x,y) ((x) &= ~(y))
+#define HASBITS(x, y) ((x) & (y))
+#define SETBITS(x, y) ((x) |= (y))
+#define CLRBITS(x, y) ((x) &= ~(y))
 
 #define GENERAL_SPRITE_COLOR(color) ((color) + PALETTE_RECOLOR_START)
 #define PLAYER_SPRITE_COLOR(owner) (GENERAL_SPRITE_COLOR(_player_colors[owner]))
@@ -98,7 +98,7 @@
 /* Returns x with the first bit that is not zero, counted from the left, set
  * to zero. So, 10110100 returns 10110000, 00000001 returns 00000000, etc.
  */
-#define KILL_FIRST_BIT(x) _ffb_64[(x)+64]
+#define KILL_FIRST_BIT(x) _ffb_64[(x) + 64]
 
 static inline int FindFirstBit2x64(int value)
 {
@@ -133,13 +133,13 @@
 #define HAS_SINGLE_BIT(a) ( ((a) & ((a) - 1)) == 0)
 
 /* [min,max), strictly less than */
-#define IS_BYTE_INSIDE(a,min,max) ((byte)((a)-(min)) < (byte)((max)-(min)))
-#define IS_INT_INSIDE(a,min,max) ((uint)((a)-(min)) < (uint)((max)-(min)))
+#define IS_BYTE_INSIDE(a, min, max) ((byte)((a) - (min)) < (byte)((max) - (min)))
+#define IS_INT_INSIDE(a, min, max) ((uint)((a) - (min)) < (uint)((max) - (min)))
 
 
-#define CHANCE16(a,b) ((uint16)Random() <= (uint16)((65536 * (a)) / (b)))
-#define CHANCE16R(a,b,r) ((uint16)(r=Random()) <= (uint16)((65536 * (a)) / (b)))
-#define CHANCE16I(a,b,v) ((uint16)(v) <= (uint16)((65536 * (a)) / (b)))
+#define CHANCE16(a, b) ((uint16)Random() <= (uint16)((65536 * (a)) / (b)))
+#define CHANCE16R(a, b, r) ((uint16)(r = Random()) <= (uint16)((65536 * (a)) / (b)))
+#define CHANCE16I(a, b, v) ((uint16)(v) <= (uint16)((65536 * (a)) / (b)))
 
 
 #define for_each_bit(_i, _b)            \
--- a/src/main_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/main_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -51,7 +51,7 @@
 
 static byte _terraform_size = 1;
 RailType _last_built_railtype;
-static int _scengen_town_size = 2; // depress medium-sized towns per default
+static int _scengen_town_size = 1; // depress medium-sized towns per default
 
 extern void GenerateIndustries();
 extern bool GenerateTowns();
@@ -89,7 +89,7 @@
 		} else {
 			NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg, NETWORK_SERVER_INDEX);
 		}
-	}	break;
+	} break;
 #endif /* ENABLE_NETWORK */
 		default: NOT_REACHED();
 	}
@@ -147,6 +147,22 @@
 }
 
 
+/** Toggle all transparency options, except for signs */
+static void ToggleTransparency()
+{
+	static byte trans_opt = ~0;
+
+	if (GB(_transparent_opt, 1, 7) == 0) {
+		SB(_transparent_opt, 1, 7, GB(trans_opt, 1, 7));
+	} else {
+		trans_opt = _transparent_opt;
+		SB(_transparent_opt, 1, 7, 0);
+	}
+
+	MarkWholeScreenDirty();
+}
+
+
 static void MenuClickSettings(int index)
 {
 	switch (index) {
@@ -161,8 +177,8 @@
 		case  8: _display_opt ^= DO_WAYPOINTS;          break;
 		case  9: _display_opt ^= DO_FULL_ANIMATION;     break;
 		case 10: _display_opt ^= DO_FULL_DETAIL;        break;
-		case 11: TOGGLEBIT(_transparent_opt, TO_BUILDINGS); break;
-		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS);     break;
+		case 11: ToggleTransparency(); break;
+		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
 	}
 	MarkWholeScreenDirty();
 }
@@ -964,8 +980,8 @@
 	if (_display_opt & DO_WAYPOINTS)          SETBIT(x,  8);
 	if (_display_opt & DO_FULL_ANIMATION)     SETBIT(x,  9);
 	if (_display_opt & DO_FULL_DETAIL)        SETBIT(x, 10);
-	if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(x, 11);
-	if (HASBIT(_transparent_opt, TO_SIGNS))     SETBIT(x, 12);
+	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 11);
+	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 12);
 	WP(w,menu_d).checked_items = x;
 }
 
@@ -1247,7 +1263,8 @@
 
 
 /** Callback function for the scenario editor 'reset landscape' confirmation window
- * @param yes_clicked boolean value, true when yes was clicked, false otherwise */
+ * @param w Window unused
+ * @param confirmed boolean value, true when yes was clicked, false otherwise */
 static void ResetLandscapeConfirmationCallback(BaseWindow *w, bool confirmed)
 {
 	if (confirmed) {
@@ -1405,7 +1422,9 @@
 
 static void PlaceProc_Town(TileIndex tile)
 {
-	DoCommandP(tile, _scengen_town_size, 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
+	uint32 size = min(_scengen_town_size, (int)TSM_CITY);
+	uint32 mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
+	DoCommandP(tile, size, mode, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
 }
 
 
@@ -1413,13 +1432,14 @@
 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_0233_TOWN_GENERATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                      STR_STICKY_BUTTON},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   159,    14,    81, 0x0,                      STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   159,    14,    94, 0x0,                      STR_NULL},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    16,    27, STR_0234_NEW_TOWN,        STR_0235_CONSTRUCT_NEW_TOWN},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    29,    40, STR_023D_RANDOM_TOWN,     STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    42,    53, STR_MANY_RANDOM_TOWNS,    STR_RANDOM_TOWNS_TIP},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,    53,    68,    79, STR_02A1_SMALL,           STR_02A4_SELECT_TOWN_SIZE},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    54,   105,    68,    79, STR_02A2_MEDIUM,          STR_02A4_SELECT_TOWN_SIZE},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   106,   157,    68,    79, STR_02A3_LARGE,           STR_02A4_SELECT_TOWN_SIZE},
+{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    81,    92, STR_SCENARIO_EDITOR_CITY, STR_02A4_SELECT_TOWN_SIZE},
 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   147,    54,    67, STR_02A5_TOWN_SIZE,       STR_NULL},
 {   WIDGETS_END},
 };
@@ -1432,7 +1452,7 @@
 		break;
 
 	case WE_CREATE:
-		w->LowerWidget((_scengen_town_size - 1)+ 7);
+		w->LowerWidget(_scengen_town_size + 7);
 		break;
 
 	case WE_CLICK:
@@ -1442,10 +1462,12 @@
 			break;
 		case 5: {// random town
 			Town *t;
+			uint size = min(_scengen_town_size, (int)TSM_CITY);
+			TownSizeMode mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
 
 			w->HandleButtonClick(5);
 			_generating_world = true;
-			t = CreateRandomTown(20, _scengen_town_size);
+			t = CreateRandomTown(20, mode, size);
 			_generating_world = false;
 
 			if (t == NULL) {
@@ -1465,10 +1487,10 @@
 			break;
 		}
 
-		case 7: case 8: case 9:
-			w->RaiseWidget((_scengen_town_size - 1) + 7);
-			_scengen_town_size = (e->we.click.widget - 7) + 1;
-			w->LowerWidget((_scengen_town_size - 1) + 7);
+		case 7: case 8: case 9: case 10:
+			w->RaiseWidget(_scengen_town_size + 7);
+			_scengen_town_size = e->we.click.widget - 7;
+			w->LowerWidget(_scengen_town_size + 7);
 			w->SetDirty();
 			break;
 		}
@@ -1484,14 +1506,14 @@
 		break;
 	case WE_ABORT_PLACE_OBJ:
 		w->RaiseButtons();
-		w->LowerWidget((_scengen_town_size - 1) + 7);
+		w->LowerWidget(_scengen_town_size + 7);
 		w->SetDirty();
 		break;
 	}
 }
 
 static const WindowDesc _scen_edit_town_gen_desc = {
-	WDP_AUTO, WDP_AUTO, 160, 82,
+	WDP_AUTO, WDP_AUTO, 160, 95,
 	WC_SCEN_TOWN_GEN, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_scen_edit_town_gen_widgets,
@@ -2349,18 +2371,9 @@
 				ShowTransparencyToolbar();
 				break;
 
-			case 'X': {
-				/* Toggle all transparency options except for signs */
-				static byte trans_opt = ~0;
-				if (GB(_transparent_opt, 1, 7) == 0) {
-					SB(_transparent_opt, 1, 7, GB(trans_opt, 1, 7));
-				} else {
-					trans_opt = _transparent_opt;
-					SB(_transparent_opt, 1, 7, 0);
-				}
-				MarkWholeScreenDirty();
+			case 'X':
+				ToggleTransparency();
 				break;
-			}
 
 #ifdef ENABLE_NETWORK
 			case WKC_RETURN: case 'T': // smart chat; send to team if any, otherwise to all
--- a/src/map.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/map.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -48,12 +48,12 @@
 	free(_me);
 
 	_m = CallocT<Tile>(_map_size);
- 	_me = CallocT<TileExtended>(_map_size);
+	_me = CallocT<TileExtended>(_map_size);
 
- 	/* XXX @todo handle memory shortage more gracefully
- 	 * Maybe some attemps could be made to try with smaller maps down to 64x64
- 	 * Maybe check for available memory before doing the calls, after all, we know how big
- 	 * the map is */
+	/* XXX @todo handle memory shortage more gracefully
+	 * Maybe some attemps could be made to try with smaller maps down to 64x64
+	 * Maybe check for available memory before doing the calls, after all, we know how big
+	 * the map is */
 	if ((_m == NULL) || (_me == NULL)) error("Failed to allocate memory for the map");
 }
 
@@ -86,9 +86,9 @@
 #endif
 	}
 
-	assert(TileXY(x,y) == TILE_MASK(tile + add));
+	assert(TileXY(x, y) == TILE_MASK(tile + add));
 
-	return TileXY(x,y);
+	return TileXY(x, y);
 }
 #endif
 
@@ -98,7 +98,7 @@
 	/* First shift by 12 to prevent integer overflow for large values of n.
 	 * >>12 is safe since the min mapsize is 64x64
 	 * Add (1<<4)-1 to round upwards. */
-	return (n * (MapSize() >> 12) + (1<<4) - 1) >> 4;
+	return (n * (MapSize() >> 12) + (1 << 4) - 1) >> 4;
 }
 
 
@@ -109,7 +109,7 @@
 	 * Note, not actually taking the full circumference into account,
 	 * just half of it.
 	 * (1<<9) - 1 is there to scale upwards. */
-	return (n * (MapSizeX() + MapSizeY()) + (1<<9) - 1) >> 9;
+	return (n * (MapSizeX() + MapSizeY()) + (1 << 9) - 1) >> 9;
 }
 
 
--- a/src/map.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/map.h	Sat Apr 21 08:23:57 2007 +0000
@@ -147,7 +147,7 @@
 uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map
 
 
-#define BEGIN_TILE_LOOP(var,w,h,tile)                      \
+#define BEGIN_TILE_LOOP(var, w, h, tile)                      \
 	{                                                        \
 		int h_cur = h;                                         \
 		uint var = tile;                                       \
@@ -155,7 +155,7 @@
 			int w_cur = w;                                       \
 			do {
 
-#define END_TILE_LOOP(var,w,h,tile)                        \
+#define END_TILE_LOOP(var, w, h, tile)                        \
 			} while (++var, --w_cur != 0);                       \
 		} while (var += TileDiffXY(0, 1) - (w), --h_cur != 0); \
 	}
--- a/src/misc.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -286,7 +286,7 @@
 	int index;
 
 	while ((index = SlIterateArray()) != -1) {
-		SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8);
+		SlArray(_name_array[index], SlGetFieldLength(), SLE_UINT8);
 	}
 }
 
--- a/src/misc/array.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/array.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file array.hpp */
+
 #ifndef  ARRAY_HPP
 #define  ARRAY_HPP
 
--- a/src/misc/autocopyptr.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/autocopyptr.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file autocopyptr.hpp */
+
 #ifndef  AUTOCOPYPTR_HPP
 #define  AUTOCOPYPTR_HPP
 
--- a/src/misc/autoptr.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/autoptr.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file autoptr.hpp */
+
 #ifndef AUTOPTR_HPP
 #define AUTOPTR_HPP
 
--- a/src/misc/binaryheap.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/binaryheap.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file binaryheap.hpp */
+
 #ifndef  BINARYHEAP_HPP
 #define  BINARYHEAP_HPP
 
--- a/src/misc/blob.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/blob.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file blob.hpp */
+
 #ifndef  BLOB_HPP
 #define  BLOB_HPP
 
--- a/src/misc/countedptr.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/countedptr.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file countedptr.hpp */
+
 #ifndef COUNTEDPTR_HPP
 #define COUNTEDPTR_HPP
 
--- a/src/misc/crc32.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/crc32.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file crc32.hpp */
+
 #ifndef  CRC32_HPP
 #define  CRC32_HPP
 
--- a/src/misc/fixedsizearray.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/fixedsizearray.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file fixedsizearray.hpp */
+
 #ifndef  FIXEDSIZEARRAY_HPP
 #define  FIXEDSIZEARRAY_HPP
 
--- a/src/misc/hashtable.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc/hashtable.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file hashtable.hpp */
+
 #ifndef  HASHTABLE_HPP
 #define  HASHTABLE_HPP
 
@@ -97,7 +99,7 @@
 	}
 };
 
-/** @class CHashTableT<Titem, Thash_bits> - simple hash table
+/** class CHashTableT<Titem, Thash_bits> - simple hash table
  *  of pointers allocated elsewhere.
  *
  *  Supports: Add/Find/Remove of Titems.
--- a/src/misc_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -20,6 +20,7 @@
 
 /** Change the player's face.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 face bitmasked
  */
@@ -38,6 +39,7 @@
 
 /** Change the player's company-colour
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 bitstuffed:
  * p1 bits 0-7 scheme to set
  * p1 bits 8-9 set in use state or first/second colour
@@ -117,6 +119,7 @@
 
 /** Increase the loan of your company.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 when set, loans the maximum amount in one go (press CTRL)
  */
@@ -146,6 +149,7 @@
 
 /** Decrease the loan of your company.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 when set, pays back the maximum loan permitting money (press CTRL)
  */
@@ -186,6 +190,7 @@
 
 /** Change the name of the company.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 unused
  */
@@ -213,6 +218,7 @@
 
 /** Change the name of the president.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 unused
  */
@@ -251,6 +257,7 @@
  * the game is unpaused. A counter is used instead of a boolean value
  * to have more control over the game when saving/loading, etc.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 0 = decrease pause counter; 1 = increase pause counter
  * @param p2 unused
  */
@@ -269,6 +276,7 @@
  * This is normally only enabled in offline mode, but if there is a debug
  * build, you can cheat (to test).
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 the amount of money to receive (if negative), or spend (if positive)
  * @param p2 unused
  */
@@ -286,6 +294,7 @@
  * players if you have paid off your loan (either explicitely, or implicitely
  * given the fact that you have more money than loan).
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 the amount of money to transfer; max 20.000.000
  * @param p2 the player to transfer the money to
  */
@@ -317,6 +326,7 @@
  * in file 'settings_gui.c' _game_setting_info[]; we'll just trust the server it knows
  * what to do and does this correctly
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 the difficulty setting being changed. If it is -1, the difficulty level
  *           itself is changed. The new value is inside p2
  * @param p2 new value for a difficulty setting or difficulty level
--- a/src/misc_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/misc_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -277,7 +277,7 @@
 
 		DoDrawStringCentered(210, w->Height() - 25, "Website: http://www.openttd.org", 16);
 		DrawStringCentered(210, w->Height() - 15, STR_00BA_COPYRIGHT_OPENTTD, 0);
-	}	break;
+	} break;
 	case WE_MOUSELOOP: // Timer to scroll the text and adjust the new top
 		if (WP(w, scroller_d).counter++ % 3 == 0) {
 			WP(w, scroller_d).height--;
@@ -677,9 +677,10 @@
 }
 
 /** Shows a tooltip
-* @param str String to be displayed
-* @param params (optional) up to 5 pieces of additional information that may be
-* added to a tooltip; currently only supports parameters of {NUM} (integer) */
+ * @param str String to be displayed
+ * @param paramcount number of params to deal with
+ * @param params (optional) up to 5 pieces of additional information that may be
+ * added to a tooltip; currently only supports parameters of {NUM} (integer) */
 void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint32 params[])
 {
 	char buffer[512];
@@ -824,8 +825,8 @@
 /**
  * Delete a character from a textbuffer, either with 'Delete' or 'Backspace'
  * The character is delete from the position the caret is at
- * @param tb @Textbuf type to be changed
- * @param delmode Type of deletion, either @WKC_BACKSPACE or @WKC_DELETE
+ * @param tb Textbuf type to be changed
+ * @param delmode Type of deletion, either WKC_BACKSPACE or WKC_DELETE
  * @return Return true on successfull change of Textbuf, or false otherwise
  */
 bool DeleteTextBufferChar(Textbuf *tb, int delmode)
@@ -843,7 +844,7 @@
 
 /**
  * Delete every character in the textbuffer
- * @param tb @Textbuf buffer to be emptied
+ * @param tb Textbuf buffer to be emptied
  */
 void DeleteTextBufferAll(Textbuf *tb)
 {
@@ -856,7 +857,7 @@
  * Insert a character to a textbuffer. If maxwidth of the Textbuf is zero,
  * we don't care about the visual-length but only about the physical
  * length of the string
- * @param tb @Textbuf type to be changed
+ * @param tb Textbuf type to be changed
  * @param key Character to be inserted
  * @return Return true on successfull change of Textbuf, or false otherwise
  */
@@ -880,8 +881,8 @@
 /**
  * Handle text navigation with arrow keys left/right.
  * This defines where the caret will blink and the next characer interaction will occur
- * @param tb @Textbuf type where navigation occurs
- * @param navmode Direction in which navigation occurs @WKC_LEFT, @WKC_RIGHT, @WKC_END, @WKC_HOME
+ * @param tb Textbuf type where navigation occurs
+ * @param navmode Direction in which navigation occurs WKC_LEFT, WKC_RIGHT, WKC_END, WKC_HOME
  * @return Return true on successfull change of Textbuf, or false otherwise
  */
 bool MoveTextBufferPos(Textbuf *tb, int navmode)
@@ -924,7 +925,7 @@
 /**
  * Initialize the textbuffer by supplying it the buffer to write into
  * and the maximum length of this buffer
- * @param tb @Textbuf type which is getting initialized
+ * @param tb Textbuf type which is getting initialized
  * @param buf the buffer that will be holding the data for input
  * @param maxlength maximum length in characters of this buffer
  * @param maxwidth maximum length in pixels of this buffer. If reached, buffer
@@ -940,10 +941,10 @@
 }
 
 /**
- * Update @Textbuf type with its actual physical character and screenlength
+ * Update Textbuf type with its actual physical character and screenlength
  * Get the count of characters in the string as well as the width in pixels.
  * Useful when copying in a larger amount of text at once
- * @param tb @Textbuf type which length is calculated
+ * @param tb Textbuf type which length is calculated
  */
 void UpdateTextBufferSize(Textbuf *tb)
 {
@@ -1271,8 +1272,7 @@
  * @param message string that will be shown for the window
  * @param parent pointer to parent window, if this pointer is NULL the parent becomes
  * the main window WC_MAIN_WINDOW
- * @param x,y coordinates to show the window at
- * @param yes_no_callback callback function called when window is closed through any button */
+ * @param callback callback function pointer to set in the window descriptor*/
 void ShowQuery(StringID caption, StringID message, BaseWindow *parent, void (*callback)(BaseWindow*, bool))
 {
 	BaseWindow *w = BaseWindow::Allocate(&_query_desc);
@@ -1458,7 +1458,7 @@
 		}
 
 		if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
-			DrawEditBox(w, &WP(w,querystr_d), 10);
+			DrawEditBox(w, &WP(w, querystr_d), 10);
 		}
 		break;
 	}
@@ -1551,7 +1551,7 @@
 		if (!(_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO)) break;
 
 		if (w->IsWidgetLowered(11)) { // Delete button clicked
-			if (!FiosDelete(WP(w,querystr_d).text.buf)) {
+			if (!FiosDelete(WP(w, querystr_d).text.buf)) {
 				ShowErrorMessage(INVALID_STRING_ID, STR_4008_UNABLE_TO_DELETE_FILE, 0, 0);
 			} else {
 				BuildFileList();
@@ -1563,7 +1563,7 @@
 			w->SetDirty();
 		} else if (w->IsWidgetLowered(12)) { // Save button clicked
 			_switch_mode = SM_SAVE;
-			FiosMakeSavegameName(_file_to_saveload.name, WP(w,querystr_d).text.buf, sizeof(_file_to_saveload.name));
+			FiosMakeSavegameName(_file_to_saveload.name, WP(w, querystr_d).text.buf, sizeof(_file_to_saveload.name));
 
 			/* In the editor set up the vehicle engines correctly (date might have changed) */
 			if (_game_mode == GM_EDITOR) StartupEngines();
@@ -1723,6 +1723,7 @@
 
 /**
  * @param p1 -1 or +1 (down/up)
+ * @param p2 unused
  */
 static int32 ClickChangeClimateCheat(int32 p1, int32 p2)
 {
@@ -1736,6 +1737,7 @@
 extern void EnginesMonthlyLoop();
 
 /**
+ * @param p1 unused
  * @param p2 1 (increase) or -1 (decrease)
  */
 static int32 ClickChangeDateCheat(int32 p1, int32 p2)
--- a/src/music/bemidi.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/music/bemidi.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file bemidi.cpp */
+
 #include "../stdafx.h"
 #include "../openttd.h"
 #include "bemidi.h"
--- a/src/music/dmusic.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/music/dmusic.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file dmusic.cpp */
+
 #ifdef WIN32_ENABLE_DIRECTMUSIC_SUPPORT
 
 #include "../stdafx.h"
@@ -14,13 +16,13 @@
 #include <dmusicf.h>
 
 
-// the performance object controls manipulation of the segments
+/** the performance object controls manipulation of the segments */
 static IDirectMusicPerformance* performance = NULL;
 
-// the loader object can load many types of DMusic related files
+/** the loader object can load many types of DMusic related files */
 static IDirectMusicLoader* loader = NULL;
 
-// the segment object is where the MIDI data is stored for playback
+/** the segment object is where the MIDI data is stored for playback */
 static IDirectMusicSegment* segment = NULL;
 
 static bool seeking = false;
@@ -54,12 +56,12 @@
 			return "ole32.dll load failed";
 	}
 
-	// Initialize COM
+	/* Initialize COM */
 	if (FAILED(proc.CoInitialize(NULL))) {
 		return "COM initialization failed";
 	}
 
-	// create the performance object
+	/* create the performance object */
 	if (FAILED(proc.CoCreateInstance(
 				CLSID_DirectMusicPerformance,
 				NULL,
@@ -71,7 +73,7 @@
 		return "Failed to create the performance object";
 	}
 
-	// initialize it
+	/* initialize it */
 	if (FAILED(performance->Init(NULL, NULL, NULL))) {
 		performance->Release();
 		performance = NULL;
@@ -79,7 +81,7 @@
 		return "Failed to initialize performance object";
 	}
 
-	// choose default Windows synth
+	/* choose default Windows synth */
 	if (FAILED(performance->AddPort(NULL))) {
 		performance->CloseDown();
 		performance->Release();
@@ -88,7 +90,7 @@
 		return "AddPort failed";
 	}
 
-	// create the loader object; this will be used to load the MIDI file
+	/* create the loader object; this will be used to load the MIDI file */
 	if (FAILED(proc.CoCreateInstance(
 				CLSID_DirectMusicLoader,
 				NULL,
@@ -136,7 +138,7 @@
 
 static void DMusicMidiPlaySong(const char* filename)
 {
-	// set up the loader object info
+	/* set up the loader object info */
 	DMUS_OBJECTDESC obj_desc;
 	ZeroMemory(&obj_desc, sizeof(obj_desc));
 	obj_desc.dwSize = sizeof(obj_desc);
@@ -148,13 +150,13 @@
 		obj_desc.wszFileName, lengthof(obj_desc.wszFileName)
 	);
 
-	// release the existing segment if we have any
+	/* release the existing segment if we have any */
 	if (segment != NULL) {
 		segment->Release();
 		segment = NULL;
 	}
 
-	// make a new segment
+	/* make a new segment */
 	if (FAILED(loader->GetObject(
 				&obj_desc, IID_IDirectMusicSegment, (LPVOID*)&segment
 			))) {
@@ -162,7 +164,7 @@
 		return;
 	}
 
-	// tell the segment what kind of data it contains
+	/* tell the segment what kind of data it contains */
 	if (FAILED(segment->SetParam(
 				GUID_StandardMIDIFile, 0xFFFFFFFF, 0, 0, performance
 			))) {
@@ -170,13 +172,13 @@
 		return;
 	}
 
-	// tell the segment to 'download' the instruments
+	/* tell the segment to 'download' the instruments */
 	if (FAILED(segment->SetParam(GUID_Download, 0xFFFFFFFF, 0, 0, performance))) {
 		DEBUG(driver, 0, "DirectMusic: failed to download instruments");
 		return;
 	}
 
-	// start playing the MIDI file
+	/* start playing the MIDI file */
 	if (FAILED(performance->PlaySegment(segment, 0, 0, NULL))) {
 		DEBUG(driver, 0, "DirectMusic: PlaySegment failed");
 		return;
@@ -210,8 +212,7 @@
 
 static void DMusicMidiSetVolume(byte vol)
 {
-	// 0 - 127 -> -2000 - 0
-	long db = vol * 2000 / 127 - 2000;
+	long db = vol * 2000 / 127 - 2000; ///< 0 - 127 -> -2000 - 0
 	performance->SetGlobalParam(GUID_PerfMasterVolume, &db, sizeof(db));
 }
 
--- a/src/music_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/music_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -207,8 +207,8 @@
 		w->LowerWidget(4);
 		w->DrawWidgets();
 
-		GfxFillRect(3, 23, 3+177,23+191,0);
-		GfxFillRect(251, 23, 251+177,23+191,0);
+		GfxFillRect(3, 23, 3 + 177, 23 + 191, 0);
+		GfxFillRect(251, 23, 251 + 177, 23 + 191, 0);
 
 		DrawStringCentered(92, 15, STR_01EE_TRACK_INDEX, 0);
 
@@ -219,14 +219,14 @@
 			SetDParam(0, i);
 			SetDParam(2, i);
 			SetDParam(1, SPECSTR_SONGNAME);
-			DrawString(4, 23+(i-1)*6, (i < 10) ? STR_01EC_0 : STR_01ED, 0);
+			DrawString(4, 23 + (i - 1) * 6, (i < 10) ? STR_01EC_0 : STR_01ED, 0);
 		}
 
 		for (i = 0; i != 6; i++) {
 			DrawStringCentered(216, 45 + i * 8, STR_01D5_ALL + i, (i == msf.playlist) ? 0xC : 0x10);
 		}
 
-		DrawStringCentered(216, 45+8*6+16, STR_01F0_CLEAR, 0);
+		DrawStringCentered(216, 45 + 8 * 6 + 16, STR_01F0_CLEAR, 0);
 #if 0
 		DrawStringCentered(216, 45 + 8 * 6 + 16 * 2, STR_01F1_SAVE, 0);
 #endif
--- a/src/namegen.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/namegen.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -90,7 +90,7 @@
 	/* optional first segment */
 	i = SeedChanceBias(0, lengthof(name_additional_english_prefix), seed, 50);
 	if (i >= 0)
-		strecat(buf,name_additional_english_prefix[i], last);
+		strecat(buf, name_additional_english_prefix[i], last);
 
 	if (SeedChance(3, 20, seed) >= 14) {
 		strecat(buf, name_additional_english_1a[SeedChance(6, lengthof(name_additional_english_1a), seed)], last);
@@ -176,13 +176,13 @@
 	/* optional prefix */
 	if (seed_derivative == 12 || seed_derivative == 19) {
 		i = SeedChance(2, lengthof(name_german_pre), seed);
-		strecat(buf,name_german_pre[i], last);
+		strecat(buf, name_german_pre[i], last);
 	}
 
 	/* mandatory middle segments including option of hardcoded name */
 	i = SeedChance(3, lengthof(name_german_real) + lengthof(name_german_1), seed);
 	if (i < lengthof(name_german_real)) {
-		strecat(buf,name_german_real[i], last);
+		strecat(buf, name_german_real[i], last);
 	} else {
 		strecat(buf, name_german_1[i - lengthof(name_german_real)], last);
 
@@ -283,7 +283,7 @@
 	if (SeedChance(0, 15, seed) >= 10) {
 		strecat(buf, name_finnish_real[SeedChance(2, lengthof(name_finnish_real), seed)], last);
 	} else if (SeedChance(0, 15, seed) >= 5) {
-		/* A two-part name by combining one of name_finnish_1 + "la"/"lä"
+		/* A two-part name by combining one of name_finnish_1 + "la"/"lä"
 		 * The reason for not having the contents of name_finnish_{1,2} in the same table is
 		 * that the ones in name_finnish_2 are not good for this purpose. */
 		uint sel = SeedChance( 0, lengthof(name_finnish_1), seed);
@@ -297,7 +297,7 @@
 		{
 			strecat(buf, "la", last);
 		} else {
-			strecat(buf, "lä", last);
+			strecat(buf, "lä", last);
 		}
 	} else {
 		/* A two-part name by combining one of name_finnish_{1,2} + name_finnish_3.
@@ -679,7 +679,7 @@
 
 		if (SeedModChance(3, 3, seed) == 0) {
 			strecat(buf, name_italian_2[SeedModChance(11, lengthof(name_italian_2), seed)], last);
-			strecat(buf,mascul_femin_italian[i], last);
+			strecat(buf, mascul_femin_italian[i], last);
 		} else {
 			strecat(buf, name_italian_2i[SeedModChance(16, lengthof(name_italian_2i), seed)], last);
 		}
--- a/src/network/core/os_abstraction.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/network/core/os_abstraction.h	Sat Apr 21 08:23:57 2007 +0000
@@ -161,7 +161,7 @@
 /* Make the names compatible */
 #	define closesocket(s) CloseSocket(s)
 #	define GET_LAST_ERROR() Errno()
-#	define ioctlsocket(s,request,status) IoctlSocket((LONG)s,(ULONG)request,(char*)status)
+#	define ioctlsocket(s, request, status) IoctlSocket((LONG)s, (ULONG)request, (char*)status)
 #	define ioctl ioctlsocket
 
 	typedef unsigned int in_addr_t;
--- a/src/network/network_client.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/network/network_client.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -524,7 +524,7 @@
 		if (_network_join_kbytes_total == 0) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
 
 		_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
- 		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
+		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
 
 		// The first packet does not contain any more data
 		return NETWORK_RECV_STATUS_OKAY;
--- a/src/network/network_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/network/network_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -385,7 +385,7 @@
 
 			y += 10;
 		}
-	}	break;
+	} break;
 
 	case WE_CLICK:
 		nd->field = e->we.click.widget;
@@ -452,7 +452,7 @@
 			if (nd->server != NULL) ShowNewGRFSettings(false, false, false, &nd->server->info.grfconfig);
 			break;
 
-	}	break;
+	} break;
 
 	case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
 		switch (e->we.dropdown.button) {
@@ -644,7 +644,7 @@
 
 			if (y >= w->vscroll.cap * NSSWND_ROWSIZE + NSSWND_START) break;
 		}
-	}	break;
+	} break;
 
 	case WE_CLICK:
 		nd->field = e->we.click.widget;
@@ -789,7 +789,7 @@
 	_saveload_mode = SLD_NEW_GAME;
 	BuildFileList();
 	w->vscroll.cap = 12;
-	w->vscroll.count = _fios_num+1;
+	w->vscroll.count = _fios_num + 1;
 
 	WP(w, network_ql_d).q.afilter = CS_ALPHANUMERAL;
 	InitializeTextBuffer(&WP(w, network_ql_d).q.text, _edit_str_buf, lengthof(_edit_str_buf), 160);
@@ -914,7 +914,7 @@
 			SetDParamStr(0, _network_player_info[nd->company].players);
 			DrawStringTruncated(x, y, STR_NETWORK_PLAYERS, 2, trunc_width); // players
 		}
-	}	break;
+	} break;
 
 	case WE_CLICK:
 		switch (e->we.click.widget) {
@@ -929,7 +929,7 @@
 			id_v += w->vscroll.pos;
 			nd->company = (id_v >= nd->server->info.companies_on) ? INVALID_PLAYER : NetworkLobbyFindCompanyIndex(id_v);
 			w->SetDirty();
-		}	break;
+		} break;
 		case 7: /* Join company */
 			if (nd->company != (byte)-1) {
 				_network_playas = nd->company;
@@ -948,7 +948,7 @@
 			NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info
 			NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data
 			break;
-		}	break;
+		} break;
 
 	case WE_MESSAGE:
 		w->SetDirty();
@@ -1265,7 +1265,7 @@
 
 			DoDrawString(_clientlist_action[i], 4, y, colour);
 		}
-	}	break;
+	} break;
 
 	case WE_POPUPMENU_SELECT: {
 		// We selected an action
@@ -1275,7 +1275,7 @@
 			HandleClientListPopupClick(index, WP(w,menu_d).main_button);
 
 		DeleteWindowById(WC_TOOLBAR_MENU, 0);
-	}	break;
+	} break;
 
 	case WE_POPUPMENU_OVER: {
 		// Our mouse hoovers over an action? Select it!
@@ -1327,7 +1327,7 @@
 
 			y += CLNWND_ROWSIZE;
 		}
-	}	break;
+	} break;
 
 	case WE_CLICK:
 		// Show the popup with option
@@ -1420,7 +1420,7 @@
 
 		/* Draw nice progress bar :) */
 		DrawFrameRect(20, 18, (int)((w->Width() - 20) * progress / 100), 28, 10, FR_NONE);
-	}	break;
+	} break;
 
 	case WE_CLICK:
 		switch (e->we.click.widget) {
--- a/src/network/network_udp.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/network/network_udp.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -240,7 +240,7 @@
 		/* The name could be an empty string, if so take the filename */
 		ttd_strlcpy(name, (in_reply[i]->name != NULL && !StrEmpty(in_reply[i]->name)) ?
 				in_reply[i]->name : in_reply[i]->filename, sizeof(name));
-	 	this->Send_GRFIdentifier(&packet, in_reply[i]);
+		this->Send_GRFIdentifier(&packet, in_reply[i]);
 		packet.Send_string(name);
 	}
 
--- a/src/newgrf.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -136,7 +136,7 @@
  * loading/parsing grf files, not for runtime debug messages as there
  * is no file information available during that time.
  * @param severity debugging severity level, see debug.h
- * @param debugging message in printf() format */
+ * @param str message in printf() format */
 void CDECL grfmsg(int severity, const char *str, ...)
 {
 	char buf[1024];
@@ -234,6 +234,7 @@
 
 /** Used when setting an object's property to map to the GRF's strings
  * while taking in consideration the "drift" between TTDPatch string system and OpenTTD's one
+ * @param grfid Id of the grf file
  * @param str StringID that we want to have the equivalent in OoenTTD
  * @return the properly adjusted StringID
  */
@@ -1371,7 +1372,7 @@
 		case 0x17: // Four random colours to use
 			FOR_EACH_OBJECT {
 				uint j;
-				for (j = 0; j < 4; j++)	housespec[i]->random_colour[j] = grf_load_byte(&buf);
+				for (j = 0; j < 4; j++) housespec[i]->random_colour[j] = grf_load_byte(&buf);
 			}
 			break;
 
@@ -1522,7 +1523,7 @@
 				uint32 tempfix = grf_load_dword(&buf);
 
 				if (curidx < NUM_CURRENCY) {
-					memcpy(&_currency_specs[curidx].suffix,&tempfix,4);
+					memcpy(&_currency_specs[curidx].suffix, &tempfix, 4);
 					_currency_specs[curidx].suffix[4] = 0;
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Currency symbol %d out of range, ignoring", curidx);
@@ -1971,7 +1972,7 @@
 		uint8 prop = grf_load_byte(&buf);
 
 		if (CargoChangeInfo(index, numinfo, prop, &buf, bufend - buf)) {
-			grfmsg(2, "FeatureChangeInfo: Ignoring property 0x%02X (not implemented)", prop);
+			grfmsg(2, "ReserveChangeInfo: Ignoring property 0x%02X (not implemented)", prop);
 		}
 	}
 }
@@ -2004,8 +2005,8 @@
 
 /**
  * Creates a spritegroup representing a sprite number result.
- * @param value The sprite number.
- * @param sprites The number of sprites per set.
+ * @param sprite The sprite number.
+ * @param num_sprites The number of sprites per set.
  * @return A spritegroup representing the sprite number result.
  */
 static const SpriteGroup* NewResultSpriteGroup(SpriteID sprite, byte num_sprites)
@@ -2060,7 +2061,7 @@
 	if (HASBIT(groupid, 15)) return NewCallBackResultSpriteGroup(groupid);
 
 	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-		grfmsg(1, "NewSpriteGroup(0x%02X:0x%02X): Groupid 0x%04X does not exist, leaving empty", setid, type, groupid);
+		grfmsg(1, "GetGroupFromGroupID(0x%02X:0x%02X): Groupid 0x%04X does not exist, leaving empty", setid, type, groupid);
 		return NULL;
 	}
 
@@ -2073,7 +2074,7 @@
 	if (HASBIT(spriteid, 15)) return NewCallBackResultSpriteGroup(spriteid);
 
 	if (spriteid >= _cur_grffile->spriteset_numsets) {
-		grfmsg(1, "NewSpriteGroup(0x%02X:0x%02X): Sprite set %u invalid, max %u", setid, type, spriteid, _cur_grffile->spriteset_numsets);
+		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set %u invalid, max %u", setid, type, spriteid, _cur_grffile->spriteset_numsets);
 		return NULL;
 	}
 
@@ -2081,7 +2082,7 @@
 	 * is skipped, as TTDPatch mandates that Action 0x02s must be processed.
 	 * We don't have that rule, but must live by the Patch... */
 	if (_cur_grffile->spriteset_start + spriteid * num_sprites + num_sprites > _cur_spriteid) {
-		grfmsg(1, "NewSpriteGroup(0x%02X:0x%02X): Real Sprite IDs 0x%04X - 0x%04X do not (all) exist (max 0x%04X), leaving empty",
+		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Real Sprite IDs 0x%04X - 0x%04X do not (all) exist (max 0x%04X), leaving empty",
 				setid, type,
 				_cur_grffile->spriteset_start + spriteid * num_sprites,
 				_cur_grffile->spriteset_start + spriteid * num_sprites + num_sprites - 1, _cur_spriteid - 1);
@@ -2089,7 +2090,7 @@
 	}
 
 	if (feature != _cur_grffile->spriteset_feature) {
-		grfmsg(1, "NewSpriteGroup(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping",
+		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping",
 				_cur_grffile->spriteset_feature, feature);
 		return NULL;
 	}
@@ -2385,7 +2386,7 @@
 	if (_cur_grffile->cargo_max == 0) {
 		/* No cargo table, so use bitnum values */
 		if (ctype >= 32) {
-			grfmsg(1, "FeatureMapSpriteGroup: Cargo bitnum %d out of range (max 31), skipping.", ctype);
+			grfmsg(1, "TranslateCargo: Cargo bitnum %d out of range (max 31), skipping.", ctype);
 			return CT_INVALID;
 		}
 
@@ -2394,35 +2395,35 @@
 			if (!cs->IsValid()) continue;
 
 			if (cs->bitnum == ctype) {
-				grfmsg(6, "FeatureMapSpriteGroup: Cargo bitnum %d mapped to cargo type %d.", ctype, c);
+				grfmsg(6, "TranslateCargo: Cargo bitnum %d mapped to cargo type %d.", ctype, c);
 				return c;
 			}
 		}
 
-		grfmsg(5, "FeatureMapSpriteGroup: Cargo bitnum %d not available in this climate, skipping.", ctype);
+		grfmsg(5, "TranslateCargo: Cargo bitnum %d not available in this climate, skipping.", ctype);
 		return CT_INVALID;
 	}
 
 	/* Check if the cargo type is out of bounds of the cargo translation table */
 	if (ctype >= _cur_grffile->cargo_max) {
-		grfmsg(1, "FeatureMapSpriteGroup: Cargo type %d out of range (max %d), skipping.", ctype, _cur_grffile->cargo_max - 1);
+		grfmsg(1, "TranslateCargo: Cargo type %d out of range (max %d), skipping.", ctype, _cur_grffile->cargo_max - 1);
 		return CT_INVALID;
 	}
 
 	/* Look up the cargo label from the translation table */
 	CargoLabel cl = _cur_grffile->cargo_list[ctype];
 	if (cl == 0) {
-		grfmsg(5, "FeatureMapSpriteGroup: Cargo type %d not available in this climate, skipping.", ctype);
+		grfmsg(5, "TranslateCargo: Cargo type %d not available in this climate, skipping.", ctype);
 		return CT_INVALID;
 	}
 
 	ctype = GetCargoIDByLabel(cl);
 	if (ctype == CT_INVALID) {
-		grfmsg(5, "FeatureMapSpriteGroup: Cargo '%c%c%c%c' unsupported, skipping.", GB(cl, 24, 8), GB(cl, 16, 8), GB(cl, 8, 8), GB(cl, 0, 8));
+		grfmsg(5, "TranslateCargo: Cargo '%c%c%c%c' unsupported, skipping.", GB(cl, 24, 8), GB(cl, 16, 8), GB(cl, 8, 8), GB(cl, 0, 8));
 		return CT_INVALID;
 	}
 
-	grfmsg(6, "FeatureMapSpriteGroup: Cargo '%c%c%c%c' mapped to cargo type %d.", GB(cl, 24, 8), GB(cl, 16, 8), GB(cl, 8, 8), GB(cl, 0, 8), ctype);
+	grfmsg(6, "TranslateCargo: Cargo '%c%c%c%c' mapped to cargo type %d.", GB(cl, 24, 8), GB(cl, 16, 8), GB(cl, 8, 8), GB(cl, 0, 8), ctype);
 	return ctype;
 }
 
@@ -2439,11 +2440,11 @@
 		}
 	} else {
 		if (last_engines_count == 0) {
-			grfmsg(0, "FeatureMapSpriteGroup: WagonOverride: No engine to do override with");
+			grfmsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with");
 			return;
 		}
 
-		grfmsg(6, "FeatureMapSpriteGroup: WagonOverride: %u engines, %u wagons",
+		grfmsg(6, "VehicleMapSpriteGroup: WagonOverride: %u engines, %u wagons",
 				last_engines_count, idcount);
 	}
 
@@ -2457,16 +2458,16 @@
 			return;
 		}
 
-		grfmsg(7, "FeatureMapSpriteGroup: [%d] Engine %d...", i, engine);
+		grfmsg(7, "VehicleMapSpriteGroup: [%d] Engine %d...", i, engine);
 
 		for (uint c = 0; c < cidcount; c++) {
 			uint8 ctype = grf_load_byte(&bp);
 			uint16 groupid = grf_load_word(&bp);
 
-			grfmsg(8, "FeatureMapSpriteGroup: * [%d] Cargo type 0x%X, group id 0x%02X", c, ctype, groupid);
+			grfmsg(8, "VehicleMapSpriteGroup: * [%d] Cargo type 0x%X, group id 0x%02X", c, ctype, groupid);
 
 			if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-				grfmsg(1, "FeatureMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping", groupid, _cur_grffile->spritegroups_count);
+				grfmsg(1, "VehicleMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping", groupid, _cur_grffile->spritegroups_count);
 				continue;
 			}
 
@@ -2529,7 +2530,7 @@
 			uint16 groupid = grf_load_word(&bp);
 
 			if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-				grfmsg(1, "FeatureMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
+				grfmsg(1, "StationMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
 				       groupid, _cur_grffile->spritegroups_count);
 				continue;
 			}
@@ -2546,7 +2547,7 @@
 		uint16 groupid = grf_load_word(&bp);
 
 		if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-			grfmsg(1, "FeatureMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
+			grfmsg(1, "StationMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
 			       groupid, _cur_grffile->spritegroups_count);
 			return;
 		}
@@ -2570,7 +2571,7 @@
 	uint16 groupid = grf_load_word(&bp);
 
 	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-		grfmsg(1, "FeatureMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
+		grfmsg(1, "TownHouseMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
 		       groupid, _cur_grffile->spritegroups_count);
 		return;
 	}
@@ -2580,7 +2581,7 @@
 		HouseSpec *hs = _cur_grffile->housespec[hid];
 
 		if (hs == NULL) {
-			grfmsg(1, "FeatureMapSpriteGroup: Too many houses defined, skipping");
+			grfmsg(1, "TownHouseMapSpriteGroup: Too many houses defined, skipping");
 			return;
 		}
 
@@ -2595,7 +2596,7 @@
 	uint16 groupid = grf_load_word(&bp);
 
 	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-		grfmsg(1, "FeatureMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
+		grfmsg(1, "CargoMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
 		       groupid, _cur_grffile->spritegroups_count);
 		return;
 	}
@@ -2604,7 +2605,7 @@
 		CargoID cid = buf[3 + i];
 
 		if (cid >= NUM_CARGO) {
-			grfmsg(1, "FeatureMapSpriteGroup: Cargo ID %d out of range, skipping");
+			grfmsg(1, "CargoMapSpriteGroup: Cargo ID %d out of range, skipping");
 			continue;
 		}
 
@@ -2795,7 +2796,7 @@
 				case GSF_CANAL :
 				case GSF_BRIDGE :
 					AddGRFString(_cur_spriteid, id, lang, name);
-					switch (GB(id, 8,8)) {
+					switch (GB(id, 8, 8)) {
 						case 0xC9: // House name
 						default:
 							grfmsg(7, "FeatureNewName: Unsupported ID (0x%04X)", id);
@@ -2835,7 +2836,7 @@
 	switch (type) {
 		case 0x04: // Signal graphics
 			if (num != 112 && num != 240) {
-				grfmsg(1, "GraphicsNews: Signal graphics sprite count must be 112 or 240, skipping");
+				grfmsg(1, "GraphicsNew: Signal graphics sprite count must be 112 or 240, skipping");
 				return;
 			}
 			_signal_base = _cur_spriteid;
@@ -2843,7 +2844,7 @@
 
 		case 0x05: // Catenary graphics
 			if (num != 48) {
-				grfmsg(1, "GraphicsNews: Catenary graphics sprite count must be 48, skipping");
+				grfmsg(1, "GraphicsNew: Catenary graphics sprite count must be 48, skipping");
 				return;
 			}
 			replace = SPR_ELRAIL_BASE + 3;
@@ -2851,7 +2852,7 @@
 
 		case 0x06: // Foundations
 			if (num != 74) {
-				grfmsg(1, "GraphicsNews: Foundation graphics sprite count must be 74, skipping");
+				grfmsg(1, "GraphicsNew: Foundation graphics sprite count must be 74, skipping");
 				return;
 			}
 			replace = SPR_SLOPES_BASE;
@@ -2859,20 +2860,44 @@
 
 		case 0x08: // Canal graphics
 			if (num != 65) {
-				grfmsg(1, "GraphicsNews: Canal graphics sprite count must be 65, skipping");
+				grfmsg(1, "GraphicsNew: Canal graphics sprite count must be 65, skipping");
 				return;
 			}
 			replace = SPR_CANALS_BASE + 5;
 			break;
 
+		case 0x0A: // 2CC colour maps
+			if (num != 256) {
+				grfmsg(1, "GraphicsNew: 2CC colour maps sprite count must be 256, skipping");
+				return;
+			}
+			replace = SPR_2CCMAP_BASE;
+			break;
+
 		case 0x0D: // Coast graphics
 			if (num != 16) {
-				grfmsg(1, "GraphicsNews: Coast graphics sprite count must be 16, skipping");
+				grfmsg(1, "GraphicsNew: Coast graphics sprite count must be 16, skipping");
 				return;
 			}
 			_coast_base = _cur_spriteid;
 			break;
 
+		case 0x10: // New airport sprites
+			if (num != 15) {
+				grfmsg(1, "GraphicsNew: Airport graphics sprite count must be 15, skipping");
+				return;
+			}
+			replace = SPR_AIRPORTX_BASE;
+			break;
+
+		case 0x11: // Road stop sprites
+			if (num != 8) {
+				grfmsg(1, "GraphicsNew: Road stop graphics sprite count must be 8, skipping");
+				return;
+			}
+			replace = SPR_ROADSTOP_BASE;
+			break;
+
 		default:
 			grfmsg(2, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring)",
 					type, num);
@@ -3070,13 +3095,13 @@
 	}
 
 	if (param < 0x80 && _cur_grffile->param_end <= param) {
-		grfmsg(7, "Param %d undefined, skipping test", param);
+		grfmsg(7, "SkipIf: Param %d undefined, skipping test", param);
 		return;
 	}
 
 	uint32 param_val = GetParamVal(param, &cond_val);
 
-	grfmsg(7, "Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
+	grfmsg(7, "SkipIf: Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
 
 	if (param == 0x88) {
 		/* GRF ID checks */
@@ -3084,7 +3109,7 @@
 		const GRFConfig *c = GetGRFConfig(cond_val);
 
 		if (condtype != 10 && c == NULL) {
-			grfmsg(7, "GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val));
+			grfmsg(7, "SkipIf: GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val));
 			return;
 		}
 
@@ -3111,7 +3136,7 @@
 				result = c == NULL || c->flags == GCS_DISABLED || c->status == GCS_NOT_FOUND;
 				break;
 
-			default: grfmsg(1, "Unsupported GRF test %d. Ignoring", condtype); return;
+			default: grfmsg(1, "SkipIf: Unsupported GRF test %d. Ignoring", condtype); return;
 		}
 	} else {
 		/* Parameter or variable tests */
@@ -3129,12 +3154,12 @@
 			case 5: result = (param_val & mask) > cond_val;
 				break;
 
-			default: grfmsg(1, "Unsupported test %d. Ignoring", condtype); return;
+			default: grfmsg(1, "SkipIf: Unsupported test %d. Ignoring", condtype); return;
 		}
 	}
 
 	if (!result) {
-		grfmsg(2, "Not skipping sprites, test was false");
+		grfmsg(2, "SkipIf: Not skipping sprites, test was false");
 		return;
 	}
 
@@ -3158,13 +3183,13 @@
 	}
 
 	if (choice != NULL) {
-		grfmsg(2, "Jumping to label 0x%0X at line %d, test was true", choice->label, choice->nfo_line);
+		grfmsg(2, "SkipIf: Jumping to label 0x%0X at line %d, test was true", choice->label, choice->nfo_line);
 		FioSeekTo(choice->pos, SEEK_SET);
 		_nfo_line = choice->nfo_line;
 		return;
 	}
 
-	grfmsg(2, "Skipping %d sprites, test was true", numsprites);
+	grfmsg(2, "SkipIf: Skipping %d sprites, test was true", numsprites);
 	_skip_sprites = numsprites;
 	if (_skip_sprites == 0) {
 		/* Zero means there are no sprites to skip, so
@@ -3226,7 +3251,7 @@
 	_cur_grfconfig->status = _cur_stage < GLS_ACTIVATION ? GCS_INITIALISED : GCS_ACTIVATED;
 
 	/* Do swap the GRFID for displaying purposes since people expect that */
-	DEBUG(grf, 1, "Loaded GRFv%d set %08lX - %s", version, BSWAP32(grfid), name);
+	DEBUG(grf, 1, "GRFInfo: Loaded GRFv%d set %08lX - %s", version, BSWAP32(grfid), name);
 }
 
 /* Action 0x0A */
@@ -3315,7 +3340,7 @@
 	/* Skip the error until the activation stage unless bit 7 of the severity
 	 * is set. */
 	if (!HASBIT(severity, 7) && _cur_stage < GLS_ACTIVATION) {
-		grfmsg(7, "Skipping non-fatal GRFLoadError in stage 1");
+		grfmsg(7, "GRFLoadError: Skipping non-fatal GRFLoadError in stage 1");
 		return;
 	}
 	CLRBIT(severity, 7);
@@ -3409,6 +3434,28 @@
 	_skip_sprites = -1;
 }
 
+
+static uint32 GetPatchVariable(uint8 param)
+{
+	switch (param) {
+		/* start year - 1920 */
+		case 0x0B: return _cur_year - ORIGINAL_BASE_YEAR;
+		/* freight trains weight factor */
+		case 0x0E: return _patches.freight_trains;
+		/* empty wagon speed increase */
+		case 0x0F: return 0;
+		/* plane speed factor */
+		case 0x10: return 4;
+		/* 2CC colormap base sprite */
+		case 0x11: return SPR_2CCMAP_BASE;
+
+		default:
+			grfmsg(2, "ParamSet: Unknown Patch variable 0x%02X.", param);
+			return 0;
+	}
+}
+
+
 /* Action 0x0D */
 static void ParamSet(byte *buf, int len)
 {
@@ -3452,7 +3499,7 @@
 	 *   an earlier action D */
 	if (HASBIT(oper, 7)) {
 		if (target < 0x80 && target < _cur_grffile->param_end) {
-			grfmsg(7, "Param %u already defined, skipping", target);
+			grfmsg(7, "ParamSet: Param %u already defined, skipping", target);
 			return;
 		}
 
@@ -3463,8 +3510,7 @@
 		if (GB(data, 0, 8) == 0xFF) {
 			if (data == 0x0000FFFF) {
 				/* Patch variables */
-				grfmsg(2, "ParamSet: Reading Patch variables unsupported");
-				return;
+				src1 = GetPatchVariable(src1);
 			} else {
 				/* GRF Resource Management */
 				if (_cur_stage != GLS_ACTIVATION) {
@@ -3509,7 +3555,7 @@
 							if (size == count) {
 								/* Got the slot... */
 								if (op == 0 || op == 3) {
-									grfmsg(2, "GRM: Reserving %d vehicles at %d", count, start);
+									grfmsg(2, "ParamSet: GRM: Reserving %d vehicles at %d", count, start);
 									for (uint i = 0; i < count; i++) _grm_engines[shift + start + i] = _cur_grffile->grfid;
 								}
 								src1 = start;
@@ -3517,14 +3563,14 @@
 								/* Unable to allocate */
 								if (op != 4 && op != 5) {
 									/* Deactivate GRF */
-									grfmsg(0, "GRM: Unable to allocate %d vehicles, deactivating", count);
+									grfmsg(0, "ParamSet: GRM: Unable to allocate %d vehicles, deactivating", count);
 									_cur_grfconfig->status = GCS_DISABLED;
 
 									_skip_sprites = -1;
 									return;
 								}
 
-								grfmsg(1, "GRM: Unable to allocate %d vehicles", count);
+								grfmsg(1, "ParamSet: GRM: Unable to allocate %d vehicles", count);
 								src1 = UINT_MAX;
 							}
 							break;
@@ -3535,7 +3581,7 @@
 								case 0:
 									/* Check if the allocated sprites will fit below the original sprite limit */
 									if (_cur_spriteid + count >= 16384) {
-										grfmsg(0, "GRM: Unable to allocate %d sprites; try changing NewGRF order", count);
+										grfmsg(0, "ParamSet: GRM: Unable to allocate %d sprites; try changing NewGRF order", count);
 										_cur_grfconfig->status = GCS_DISABLED;
 
 										_skip_sprites = -1;
@@ -3552,12 +3598,12 @@
 									break;
 
 								default:
-									grfmsg(1, "GRM: Unsupported operation %d for general sprites", op);
+									grfmsg(1, "ParamSet: GRM: Unsupported operation %d for general sprites", op);
 									return;
 							}
 							break;
 
-						default: grfmsg(1, "GRM: Unsupported feature 0x%X", feature); return;
+						default: grfmsg(1, "ParamSet: GRM: Unsupported feature 0x%X", feature); return;
 					}
 				}
 			}
@@ -3960,7 +4006,7 @@
 	uint32 grfid = grf_load_dword(&buf);
 	const GRFConfig *c = GetGRFConfig(grfid);
 	if (c == NULL || (c->status != GCS_INITIALISED && c->status != GCS_ACTIVATED)) {
-		grfmsg(7, "GRFID 0x%08x unknown, skipping action 13", BSWAP32(grfid));
+		grfmsg(7, "TranslateGRFStrings: GRFID 0x%08x unknown, skipping action 13", BSWAP32(grfid));
 		return;
 	}
 
@@ -3984,7 +4030,7 @@
 	uint16 first_id  = grf_load_word(&buf);
 
 	if (!((first_id >= 0xD000 && first_id + num_strings <= 0xD3FF) || (first_id >= 0xDC00 && first_id + num_strings <= 0xDCFF))) {
-		grfmsg(7, "Attempting to set out-of-range string IDs in action 13 (first: 0x%4X, number: 0x%2X)", first_id, num_strings);
+		grfmsg(7, "TranslateGRFStrings: Attempting to set out-of-range string IDs in action 13 (first: 0x%4X, number: 0x%2X)", first_id, num_strings);
 		return;
 	}
 
@@ -4079,16 +4125,17 @@
 	                   |                                        (0 << 0x0B)  // enhancedgui
 	                   |                                        (0 << 0x0C)  // newagerating
 	                   |       ((_patches.build_on_slopes ? 1 : 0) << 0x0D)  // buildonslopes
+	                   |         ((_patches.full_load_any ? 1 : 0) << 0x0E)  // fullloadany
 	                   |                                        (0 << 0x0F)  // planespeed
 	                   |                                        (0 << 0x10)  // moreindustriesperclimate - obsolete
 	                   |                                        (0 << 0x11)  // moretoylandfeatures
 	                   |                                        (1 << 0x12)  // newstations
 	                   |                                        (0 << 0x13)  // tracktypecostdiff
-	                   |                                        (0 << 0x14)  // manualconvert
+	                   |                                        (1 << 0x14)  // manualconvert
 	                   |       ((_patches.build_on_slopes ? 1 : 0) << 0x15)  // buildoncoasts
 	                   |                                        (1 << 0x16)  // canals
 	                   |                                        (1 << 0x17)  // newstartyear
-	                   |                                        (0 << 0x18)  // freighttrains
+	                   |    ((_patches.freight_trains > 1 ? 1 : 0) << 0x18)  // freighttrains
 	                   |                                        (1 << 0x19)  // newhouses
 	                   |                                        (1 << 0x1A)  // newbridges
 	                   |                                        (0 << 0x1B)  // newtownnames
@@ -4108,7 +4155,7 @@
 	                   |                                        (0 << 0x08)  // fifoloading
 	                   |                                        (0 << 0x09)  // townroadbranchprob
 	                   |                                        (0 << 0x0A)  // tempsnowline
-	                   |                                        (0 << 0x0B)  // newcargo
+	                   |                                        (1 << 0x0B)  // newcargo
 	                   |                                        (1 << 0x0C)  // enhancemultiplayer
 	                   |                                        (1 << 0x0D)  // onewayroads
 	                   |   ((_patches.nonuniform_stations ? 1 : 0) << 0x0E)  // irregularstations
@@ -4120,7 +4167,8 @@
 	                   |                                        (0 << 0x14)  // trams
 	                   |                                        (0 << 0x15)  // enhancetunnels
 	                   |                                        (0 << 0x16)  // shortrvs
-	                   |                                        (0 << 0x17); // articulatedrvs
+	                   |                                        (0 << 0x17)  // articulatedrvs
+	                   |                                        (1 << 0x1E); // variablerunningcosts
 }
 
 static void ResetCustomStations()
@@ -4378,9 +4426,6 @@
 static void CalculateRefitMasks()
 {
 	for (EngineID engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
-		/* Skip engine if not available in this climate */
-		if (!HASBIT(_engine_info[engine].climates, _opt.landscape)) continue;
-
 		uint32 mask = 0;
 		uint32 not_mask = 0;
 		uint32 xor_mask = 0;
@@ -4581,17 +4626,17 @@
 	byte action = buf[0];
 
 	if (action == 0xFF) {
-		grfmsg(7, "Handling data block in stage %d", stage);
+		grfmsg(7, "DecodeSpecialSprite: Handling data block in stage %d", stage);
 		GRFDataBlock(buf, num);
 	} else if (action == 0xFE) {
-		grfmsg(7, "Handling import block in stage %d", stage);
+		grfmsg(7, "DecodeSpecialSprite: andling import block in stage %d", stage);
 		GRFImportBlock(buf, num);
 	} else if (action >= lengthof(handlers)) {
-		grfmsg(7, "Skipping unknown action 0x%02X", action);
+		grfmsg(7, "DecodeSpecialSprite: Skipping unknown action 0x%02X", action);
 	} else if (handlers[action][stage] == NULL) {
-		grfmsg(7, "Skipping action 0x%02X in stage %d", action, stage);
+		grfmsg(7, "DecodeSpecialSprite: Skipping action 0x%02X in stage %d", action, stage);
 	} else {
-		grfmsg(7, "Handling action 0x%02X in stage %d", action, stage);
+		grfmsg(7, "DecodeSpecialSprite: Handling action 0x%02X in stage %d", action, stage);
 		handlers[action][stage](buf, num);
 	}
 	free(buf);
@@ -4623,7 +4668,7 @@
 
 	_cur_grfconfig = config;
 
-	DEBUG(grf, 2, "Reading NewGRF-file '%s'", filename);
+	DEBUG(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '%s'", filename);
 
 	/* Skip the first sprite; we don't care about how many sprites this
 	 * does contain; newest TTDPatches and George's longvehicles don't
@@ -4631,7 +4676,7 @@
 	if (FioReadWord() == 4 && FioReadByte() == 0xFF) {
 		FioReadDword();
 	} else {
-		DEBUG(grf, 7, "Custom .grf has invalid format");
+		DEBUG(grf, 7, "LoadNewGRFFile: Custom .grf has invalid format");
 		return;
 	}
 
@@ -4654,7 +4699,7 @@
 				FioSkipBytes(num);
 			}
 		} else {
-			if (_skip_sprites == 0) grfmsg(7, "Skipping unexpected sprite");
+			if (_skip_sprites == 0) grfmsg(7, "LoadNewGRFFile: Skipping unexpected sprite");
 
 			FioSkipBytes(7);
 			num -= 8;
@@ -4723,7 +4768,7 @@
 			if (stage == GLS_ACTIVATION) {
 				ClearTemporaryNewGRFData();
 				BuildCargoTranslationMap();
-				DEBUG(sprite, 2, "Currently %i sprites are loaded", _cur_spriteid);
+				DEBUG(sprite, 2, "LoadNewGRF: Currently %i sprites are loaded", _cur_spriteid);
 			}
 		}
 	}
--- a/src/newgrf_callbacks.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_callbacks.h	Sat Apr 21 08:23:57 2007 +0000
@@ -133,6 +133,10 @@
 	/* Called monthly on production changes, so it can be adjusted more frequently */
 	CBID_INDUSTRY_MONTHLYPROD_CHANGE= 0x35, // not yet implemented
 
+	/* Called to modify various vehicle properties. Callback parameter 1
+	 * specifies the property index, as used in Action 0, to change. */
+	CBID_VEHICLE_MODIFY_PROPERTY    = 0x36,
+
 	/* Called to determine text to display after cargo name */
 	CBID_INDUSTRY_CARGO_SUFFIX      = 0x37, // not yet implemented
 
--- a/src/newgrf_config.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_config.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -187,7 +187,8 @@
 }
 
 /** Appends an element to a list of GRFs
- * @param dst the head of the list to add to */
+ * @param dst the head of the list to add to
+ * @param el the new tail to be */
 void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el)
 {
 	GRFConfig **tail = dst;
--- a/src/newgrf_engine.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_engine.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -468,6 +468,22 @@
 }
 
 
+static uint8 LiveryHelper(EngineID engine, const Vehicle *v)
+{
+	const Livery *l;
+
+	if (v == NULL) {
+		l = GetEngineLivery(engine, _current_player, INVALID_ENGINE, NULL);
+	} else if (v->type == VEH_TRAIN) {
+		l = GetEngineLivery((v->u.rail.first_engine != INVALID_ENGINE && (IsArticulatedPart(v) || UsesWagonOverride(v))) ? v->u.rail.first_engine : v->engine_type, v->owner, v->u.rail.first_engine, v);
+	} else {
+		l = GetEngineLivery(v->engine_type, v->owner, INVALID_ENGINE, v);
+	}
+
+	return l->colour1 + l->colour2 * 16;
+}
+
+
 static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
 {
 	const Vehicle *v = GRV(object);
@@ -475,7 +491,7 @@
 	if (v == NULL) {
 		/* Vehicle does not exist, so we're in a purchase list */
 		switch (variable) {
-			case 0x43: return _current_player; // Owner information
+			case 0x43: return _current_player | (LiveryHelper(object->u.vehicle.self_type, NULL) << 24); // Owner information
 			case 0x46: return 0;               // Motion counter
 			case 0x48: return GetEngine(object->u.vehicle.self_type)->flags; // Vehicle Type Info
 			case 0xC4: return clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR; // Build year
@@ -544,7 +560,7 @@
 		}
 
 		case 0x43: // Player information
-			return v->owner;
+			return v->owner | (GetPlayer(v->owner)->is_ai ? 0x10000 : 0) | (LiveryHelper(v->engine_type, v) << 24);
 
 		case 0x44: // Aircraft information
 			if (v->type != VEH_AIRCRAFT) return UINT_MAX;
@@ -886,7 +902,7 @@
  * @param param1   First parameter of the callback
  * @param param2   Second parameter of the callback
  * @param engine   Engine type of the vehicle to evaluate the callback for
- * @param vehicle  The vehicle to evaluate the callback for, or NULL if it doesnt exist yet
+ * @param v        The vehicle to evaluate the callback for, or NULL if it doesnt exist yet
  * @return The value the callback returned, or CALLBACK_FAILED if it failed
  */
 uint16 GetVehicleCallback(uint16 callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v)
@@ -935,6 +951,26 @@
 	return group->g.callback.result;
 }
 
+
+/* Callback 36 handlers */
+uint GetVehicleProperty(const Vehicle *v, uint8 property, uint orig_value)
+{
+	uint16 callback = GetVehicleCallback(CBID_VEHICLE_MODIFY_PROPERTY, property, 0, v->engine_type, v);
+	if (callback != CALLBACK_FAILED) return callback;
+
+	return orig_value;
+}
+
+
+uint GetEngineProperty(EngineID engine, uint8 property, uint orig_value)
+{
+	uint16 callback = GetVehicleCallback(CBID_VEHICLE_MODIFY_PROPERTY, property, 0, engine, NULL);
+	if (callback != CALLBACK_FAILED) return callback;
+
+	return orig_value;
+}
+
+
 static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first)
 {
 	const SpriteGroup *group;
--- a/src/newgrf_engine.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_engine.h	Sat Apr 21 08:23:57 2007 +0000
@@ -35,6 +35,11 @@
 #define GetCustomVehicleSprite(v, direction) GetCustomEngineSprite(v->engine_type, v, direction)
 #define GetCustomVehicleIcon(et, direction) GetCustomEngineSprite(et, NULL, direction)
 
+/* Handler to Evaluate callback 36. If the callback fails (i.e. most of the
+ * time) orig_value is returned */
+uint GetVehicleProperty(const Vehicle *v, uint8 property, uint orig_value);
+uint GetEngineProperty(EngineID engine, uint8 property, uint orig_value);
+
 enum VehicleTrigger {
 	VEHICLE_TRIGGER_NEW_CARGO     = 1,
 	/* Externally triggered only for the first vehicle in chain */
--- a/src/newgrf_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -296,7 +296,9 @@
 
 
 /** Callback function for the newgrf 'apply changes' confirmation window
- * @param yes_clicked boolean value, true when yes was clicked, false otherwise */
+ * @param w Window which is calling this callback
+ * @param confirmed boolean value, true when yes was clicked, false otherwise
+ */
 static void NewGRFConfirmationCallback(BaseWindow *w, bool confirmed)
 {
 	if (confirmed) {
--- a/src/newgrf_spritegroup.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_spritegroup.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -76,6 +76,8 @@
 	_spritegroup_count = 0;
 }
 
+static uint32 _temp_store[0x110];
+
 
 static inline uint32 GetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
 {
@@ -96,6 +98,8 @@
 		case 0x1C: return object->last_value;
 		case 0x20: return _opt.landscape == LT_ARCTIC ? GetSnowLine() : 0xFF;
 
+		case 0x7D: return _temp_store[parameter];
+
 		/* Not a common variable, so evalute the feature specific variables */
 		default: return object->GetVariable(object, variable, parameter, available);
 	}
@@ -133,6 +137,10 @@
 		case DSGA_OP_AND:  return last_value & value;
 		case DSGA_OP_OR:   return last_value | value;
 		case DSGA_OP_XOR:  return last_value ^ value;
+		case DSGA_OP_STO:
+			if (value < lengthof(_temp_store)) _temp_store[value] = last_value;
+			return last_value;
+		case DSGA_OP_RST:  return value;
 		default:           return value;
 	}
 }
--- a/src/newgrf_spritegroup.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_spritegroup.h	Sat Apr 21 08:23:57 2007 +0000
@@ -60,6 +60,8 @@
 	DSGA_OP_AND,  ///< a & b
 	DSGA_OP_OR,   ///< a | b
 	DSGA_OP_XOR,  ///< a ^ b
+	DSGA_OP_STO,  ///< store a into temporary storage, indexed by b. return a
+	DSGA_OP_RST,  ///< return b
 };
 
 
--- a/src/newgrf_station.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_station.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -61,7 +61,7 @@
 
 /**
  * Allocate a station class for the given class id.
- * @param classid A 32 bit value identifying the class.
+ * @param cls A 32 bit value identifying the class.
  * @return Index into station_classes of allocated class.
  */
 StationClassID AllocateStationClass(uint32 cls)
@@ -138,7 +138,7 @@
 
 /**
  * Tie a station spec to its station class.
- * @param spec The station spec.
+ * @param statspec The station spec.
  */
 void SetCustomStationSpec(StationSpec *statspec)
 {
@@ -614,7 +614,7 @@
 
 /**
  * Allocate a StationSpec to a Station. This is called once per build operation.
- * @param spec StationSpec to allocate.
+ * @param statspec StationSpec to allocate.
  * @param st Station to allocate it to.
  * @param exec Whether to actually allocate the spec.
  * @return Index within the Station's spec list, or -1 if the allocation failed.
@@ -695,10 +695,12 @@
 }
 
 /** Draw representation of a station tile for GUI purposes.
- * @param x, y Position of image.
- * @param dir Direction.
+ * @param x Position x of image.
+ * @param y Position y of image.
+ * @param axis Axis.
  * @param railtype Rail type.
  * @param sclass, station Type of station.
+ * @param station station ID
  * @return True if the tile was drawn (allows for fallback to default graphic)
  */
 bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station)
--- a/src/newgrf_text.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_text.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -418,8 +418,8 @@
  * The array iso_codes will be used to find that match.
  * If not found, it will have to be standard english
  * This function is called after the user changed language,
- * from strings.c:ReadLanguagePack
- * @param iso code of current selection
+ * from strings.cpp:ReadLanguagePack
+ * @param iso_name iso code of current selection
  */
 void SetCurrentGrfLangID(const char *iso_name)
 {
--- a/src/newgrf_town.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/newgrf_town.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -4,6 +4,7 @@
 
 #include "stdafx.h"
 #include "openttd.h"
+#include "variables.h"
 #include "debug.h"
 #include "functions.h"
 #include "town.h"
@@ -18,7 +19,10 @@
 {
 	switch (variable) {
 		/* Larger towns */
-		case 0x40: return 1;
+		case 0x40:
+			if (_patches.larger_towns == 0) return 2;
+			if (t->index % _patches.larger_towns == 0) return 1;
+			return 0;
 
 		/* Town index */
 		case 0x41: return t->index;
--- a/src/news.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/news.h	Sat Apr 21 08:23:57 2007 +0000
@@ -26,7 +26,7 @@
 typedef void DrawNewsCallbackProc(BaseWindow *w);
 typedef StringID GetNewsStringCallbackProc(const NewsItem *ni);
 
-#define NEWS_FLAGS(mode,flag,type,cb) ((cb)<<24 | (type)<<16 | (flag)<<8 | (mode))
+#define NEWS_FLAGS(mode, flag, type, cb) ((cb) << 24 | (type) << 16 | (flag) << 8 | (mode))
 void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b);
 void NewsLoop();
 void DrawNewsBorder(const BaseWindow *w);
--- a/src/news_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/news_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -239,17 +239,17 @@
  * @param flags various control bits that will show various news-types. See macro NEWS_FLAGS()
  * @param data_a news-specific value based on news type
  * @param data_b news-specific value based on news type
- * @note flags exists of 4 byte-sized extra parameters.<br/>
- * 1.  0 -  7 display_mode, any of the NewsMode enums (NM_)<br/>
- * 2.  8 - 15 news flags, any of the NewsFlags enums (NF_) NF_INCOLOR are set automatically if needed<br/>
- * 3. 16 - 23 news category, any of the NewsType enums (NT_)<br/>
- * 4. 24 - 31 news callback function, any of the NewsCallback enums (DNC_)<br/>
+ * @note flags exists of 4 byte-sized extra parameters.
+ * 1.  0 -  7 display_mode, any of the NewsMode enums (NM_)
+ * 2.  8 - 15 news flags, any of the NewsFlags enums (NF_) NF_INCOLOR are set automatically if needed
+ * 3. 16 - 23 news category, any of the NewsType enums (NT_)
+ * 4. 24 - 31 news callback function, any of the NewsCallback enums (DNC_)
  * If the display mode is NM_CALLBACK special news is shown and parameter
- * stringid has a special meaning.<br/>
+ * stringid has a special meaning.
  * DNC_TRAINAVAIL, DNC_ROADAVAIL, DNC_SHIPAVAIL, DNC_AIRCRAFTAVAIL: StringID is
- * the index of the engine that is shown<br/>
+ * the index of the engine that is shown
  * DNC_BANKRUPCY: bytes 0-3 of StringID contains the player that is in trouble,
- * and 4-7 contains what kind of bankrupcy message is shown, NewsBankrupcy enum (NB_)<br/>
+ * and 4-7 contains what kind of bankrupcy message is shown, NewsBankrupcy enum (NB_)
  * @see NewsMode
  * @see NewsFlags
  * @see NewsType
--- a/src/oldloader.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/oldloader.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -149,7 +149,7 @@
 	/* Old savegames have a nice compression algorithm (RLE)
 	which means that we have a chunk, which starts with a length
 	byte. If that byte is negative, we have to repeat the next byte
-	that many times (+1). Else, we need to read that amount of bytes.
+	that many times ( + 1). Else, we need to read that amount of bytes.
 	Works pretty good if you have many zero's behind eachother */
 
 	if (ls->chunk_size == 0) {
@@ -433,7 +433,7 @@
 	OCL_SVAR( OC_UINT16, Town, ratings[7] ),
 
 	/* XXX - This is pretty odd.. we read 32bit, but only write 8bit.. sure there is
-	nothing changed?? */
+	nothing changed ? ? */
 	OCL_SVAR( OC_FILE_U32 | OC_VAR_U8, Town, have_ratings ),
 	OCL_SVAR( OC_FILE_U32 | OC_VAR_U8, Town, statues ),
 	OCL_SVAR( OC_UINT16, Town, num_houses ),
@@ -1219,8 +1219,8 @@
 
 static const OldChunks sign_chunk[] = {
 	OCL_SVAR( OC_UINT16, Sign, str ),
-	OCL_SVAR( OC_FILE_U16 | OC_VAR_I32,Sign, x ),
-	OCL_SVAR( OC_FILE_U16 | OC_VAR_I32,Sign, y ),
+	OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, Sign, x ),
+	OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, Sign, y ),
 	OCL_SVAR( OC_FILE_U16 | OC_VAR_I8, Sign, z ),
 
 	OCL_NULL( 6 ),         ///< Width of sign, no longer in use
--- a/src/openttd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/openttd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -348,7 +348,7 @@
 	int i;
 	const char *optformat;
 	char musicdriver[32], sounddriver[32], videodriver[32];
-	int resolution[2] = {0,0};
+	int resolution[2] = {0, 0};
 	Year startyear = INVALID_YEAR;
 	uint generation_seed = GENERATE_NEW_SEED;
 	bool save_config = true;
@@ -379,7 +379,7 @@
 #endif
 	;
 
-	MyGetOptData mgo(argc-1, argv+1, optformat);
+	MyGetOptData mgo(argc - 1, argv + 1, optformat);
 
 	while ((i = MyGetOpt(&mgo)) != -1) {
 		switch (i) {
@@ -1913,6 +1913,31 @@
 		}
 	}
 
+	/* A patch option containing the proportion of towns that grow twice as
+	 * fast was added in version 54. From version 56 this is now saved in the
+	 * town as cities can be built specifically in the scenario editor. */
+	if (CheckSavegameVersion(56)) {
+		Town *t;
+
+		FOR_ALL_TOWNS(t) {
+			if (_patches.larger_towns != 0 && (t->index % _patches.larger_towns) == 0) {
+				t->larger_town = true;
+			}
+		}
+	}
+
+	if (CheckSavegameVersion(57)) {
+		Vehicle *v;
+		/* Added a FIFO queue of vehicles loading at stations */
+		FOR_ALL_VEHICLES(v) {
+			if ((v->type != VEH_TRAIN || IsFrontEngine(v)) &&  // for all locs
+					!(v->vehstatus & (VS_STOPPED | VS_CRASHED)) && // not stopped or crashed
+					v->current_order.type == OT_LOADING) {         // loading
+				GetStation(v->last_station_visited)->loading_vehicles.push_back(v);
+			}
+		}
+	}
+
 	return true;
 }
 
--- a/src/openttd.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/openttd.h	Sat Apr 21 08:23:57 2007 +0000
@@ -289,13 +289,13 @@
 	CT_IRON_ORE     =  8,
 	CT_STEEL        =  9,
 	CT_VALUABLES    = 10,
-	CT_FOOD         = 11,
 
 	// Arctic
 	CT_WHEAT        =  6,
 	CT_HILLY_UNUSED =  8,
 	CT_PAPER        =  9,
 	CT_GOLD         = 10,
+	CT_FOOD         = 11,
 
 	// Tropic
 	CT_RUBBER       =  1,
@@ -317,7 +317,7 @@
 	CT_PLASTIC      = 10,
 	CT_FIZZY_DRINKS = 11,
 
-	NUM_CARGO       = 12,
+	NUM_CARGO       = 32,
 
 	CT_NO_REFIT     = 0xFE,
 	CT_INVALID      = 0xFF
--- a/src/order_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/order_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -182,6 +182,7 @@
 
 /** Add an order to the orderlist of a vehicle.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 various bitstuffed elements
  * - p1 = (bit  0 - 15) - ID of the vehicle
  * - p1 = (bit 16 - 31) - the selected order (if any). If the last order is given,
@@ -478,6 +479,7 @@
 
 /** Delete an order from the orderlist of a vehicle.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 the ID of the vehicle
  * @param p2 the order to delete (max 255)
  */
@@ -557,6 +559,7 @@
 
 /** Goto next order of order-list.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 The ID of the vehicle which order is skipped
  * @param p2 unused
  */
@@ -600,6 +603,7 @@
 
 /** Modify an order in the orderlist of a vehicle.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 various bitstuffed elements
  * - p1 = (bit  0 - 15) - ID of the vehicle
  * - p1 = (bit 16 - 31) - the selected order (if any). If the last order is given,
@@ -680,6 +684,8 @@
 }
 
 /** Clone/share/copy an order-list of an other vehicle.
+ * @param tile unused
+ * @param flags operation to perform
  * @param p1 various bitstuffed elements
  * - p1 = (bit  0-15) - destination vehicle to clone orders to (p1 & 0xFFFF)
  * - p1 = (bit 16-31) - source vehicle to clone orders from, if any (none for CO_UNSHARE)
@@ -812,6 +818,7 @@
 
 /** Add/remove refit orders from an order
  * @param tile Not used
+ * @param flags operation to perform
  * @param p1 VehicleIndex of the vehicle having the order
  * @param p2 bitmask
  *   - bit 0-7 CargoID
@@ -937,6 +944,7 @@
 
 /** Restore the current order-index of a vehicle and sets service-interval.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 the ID of the vehicle
  * @param p2 various bistuffed elements
  * - p2 = (bit  0-15) - current order-index (p2 & 0xFFFF)
--- a/src/order_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/order_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -478,7 +478,7 @@
 			if (sel == WP(w,order_d).sel) sel = -1;
 			WP(w,order_d).sel = sel;
 			w->SetDirty();
-		}	break;
+		} break;
 
 		case ORDER_WIDGET_SKIP:
 			OrderClick_Skip(w, v);
--- a/src/os2.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/os2.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -169,7 +169,7 @@
  * Insert a chunk of text from the clipboard onto the textbuffer. Get TEXT clipboard
  * and append this up to the maximum length (either absolute or screenlength). If maxlength
  * is zero, we don't care about the screenlength but only about the physical length of the string
- * @param tb @Textbuf type to be changed
+ * @param tb Textbuf type to be changed
  * @return Return true on successfull change of Textbuf, or false otherwise
  */
 bool InsertTextBufferClipboard(Textbuf *tb)
@@ -222,7 +222,7 @@
 void CSleep(int milliseconds)
 {
 #ifndef __INNOTEK_LIBC__
- 	delay(milliseconds);
+	delay(milliseconds);
 #else
 	usleep(milliseconds * 1000);
 #endif
--- a/src/pathfind.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/pathfind.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -821,7 +821,7 @@
 			}
 
 			/* If we reach here, the tile has exactly one track, and this
-			 track is reachable => Rail segment continues */
+			 track is reachable = > Rail segment continues */
 
 			track = _new_trackdir[FIND_FIRST_BIT(bits)][direction];
 			assert(track != INVALID_TRACKDIR);
--- a/src/player_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/player_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -29,7 +29,7 @@
 
 static void DrawPlayerEconomyStats(const Player *p, byte mode)
 {
-	int x,y,i,j,year;
+	int x, y, i, j, year;
 	const int64 (*tbl)[13];
 	int64 sum, cost;
 	StringID str;
@@ -38,8 +38,8 @@
 		/* draw categories */
 		DrawStringCenterUnderline(61, 15, STR_700F_EXPENDITURE_INCOME, 0);
 		for (i = 0; i != 13; i++)
-			DrawString(2, 27 + i*10, STR_7011_CONSTRUCTION + i, 0);
-		DrawStringRightAligned(111, 27 + 10*13 + 2, STR_7020_TOTAL, 0);
+			DrawString(2, 27 + i * 10, STR_7011_CONSTRUCTION + i, 0);
+		DrawStringRightAligned(111, 27 + 10 * 13 + 2, STR_7020_TOTAL, 0);
 
 		/* draw the price columns */
 		year = _cur_year - 2;
@@ -60,16 +60,16 @@
 						str = STR_701E;
 						if (cost < 0) { cost = -cost; str++; }
 						SetDParam64(0, cost);
-						DrawStringRightAligned(x, 27+i*10, str, 0);
+						DrawStringRightAligned(x, 27 + i * 10, str, 0);
 					}
 				}
 
 				str = STR_701E;
 				if (sum < 0) { sum = -sum; str++; }
 				SetDParam64(0, sum);
-				DrawStringRightAligned(x, 27 + 13*10 + 2, str, 0);
+				DrawStringRightAligned(x, 27 + 13 * 10 + 2, str, 0);
 
-				GfxFillRect(x - 75, 27 + 10*13, x, 27 + 10*13, 215);
+				GfxFillRect(x - 75, 27 + 10 * 13, x, 27 + 10 * 13, 215);
 				x += 95;
 			}
 			year++;
@@ -80,7 +80,7 @@
 
 		/* draw max loan aligned to loan below (y += 10) */
 		SetDParam64(0, (uint64)_economy.max_loan);
-		DrawString(202, y+10, STR_MAX_LOAN, 0);
+		DrawString(202, y + 10, STR_MAX_LOAN, 0);
 	} else {
 		y = 15;
 	}
@@ -97,7 +97,7 @@
 
 	y += 12;
 
-	GfxFillRect(182 - 75, y-2, 182, y-2, 215);
+	GfxFillRect(182 - 75, y - 2, 182, y - 2, 215);
 
 	SetDParam64(0, p->money64 - p->current_loan);
 	DrawStringRightAligned(182, y, STR_7028, 0);
@@ -166,13 +166,13 @@
 		SetDParam(4, 10000);
 		w->DrawWidgets();
 
-		DrawPlayerEconomyStats(p, (byte)WP(w,def_d).data_1);
+		DrawPlayerEconomyStats(p, (byte)WP(w, def_d).data_1);
 	} break;
 
 	case WE_CLICK:
 		switch (e->we.click.widget) {
 		case 2: {/* toggle size */
-			byte mode = (byte)WP(w,def_d).data_1;
+			byte mode = (byte)WP(w, def_d).data_1;
 			bool stickied = !!(w->flags4 & WF_STICKY);
 			PlayerID player = (PlayerID)w->window_number;
 			w->Close();
@@ -239,7 +239,7 @@
 	w = BaseWindow::AllocateFront(desc_table[mode], player);
 	if (w != NULL) {
 		w->caption_color = w->window_number;
-		WP(w,def_d).data_1 = mode;
+		WP(w, def_d).data_1 = mode;
 		if (show_stickied) w->flags4 |= WF_STICKY;
 	}
 }
@@ -554,14 +554,14 @@
 		w->LowerWidget(WP(w, facesel_d).gender + 5);
 		w->DrawWidgets();
 		p = GetPlayer((PlayerID)w->window_number);
-		DrawPlayerFace(WP(w,facesel_d).face, p->player_color, 2, 16);
+		DrawPlayerFace(WP(w, facesel_d).face, p->player_color, 2, 16);
 	} break;
 
 	case WE_CLICK:
 		switch (e->we.click.widget) {
 		case 3: w->Close(); break;
 		case 4: /* ok click */
-			DoCommandP(0, 0, WP(w,facesel_d).face, NULL, CMD_SET_PLAYER_FACE);
+			DoCommandP(0, 0, WP(w, facesel_d).face, NULL, CMD_SET_PLAYER_FACE);
 			w->Close();
 			break;
 		case 5: /* male click */
@@ -572,7 +572,7 @@
 			w->SetDirty();
 			break;
 		case 7:
-			WP(w,facesel_d).face = ConvertFromOldPlayerFace((WP(w, facesel_d).gender << 31) + GB(InteractiveRandom(), 0, 31));
+			WP(w, facesel_d).face = ConvertFromOldPlayerFace((WP(w, facesel_d).gender << 31) + GB(InteractiveRandom(), 0, 31));
 			w->SetDirty();
 			break;
 		}
@@ -656,8 +656,8 @@
 		}
 	}
 
-	if (train+road+air+ship == 0) {
-		DrawString(x+70, y, STR_7042_NONE, 0);
+	if (train + road + air + ship == 0) {
+		DrawString(x + 70, y, STR_7042_NONE, 0);
 	} else {
 		if (train != 0) {
 			SetDParam(0, train);
@@ -762,7 +762,7 @@
 
 			DrawPlayerVehiclesAmount((PlayerID)w->window_number);
 
-			DrawString(110,48, STR_7006_COLOR_SCHEME, 0);
+			DrawString(110, 48, STR_7006_COLOR_SCHEME, 0);
 			/* Draw company-colour bus */
 			DrawSprite(SPR_VEH_BUS_SW_VIEW, PLAYER_SPRITE_COLOR(p->index), 215, 49);
 
@@ -786,8 +786,8 @@
 					BaseWindow *wf = BaseWindow::AllocateFront(&_select_player_face_desc, w->window_number);
 					if (wf != NULL) {
 						wf->caption_color = w->window_number;
-						WP(wf,facesel_d).face = GetPlayer((PlayerID)wf->window_number)->face;
-						WP(wf,facesel_d).gender = 0;
+						WP(wf, facesel_d).face = GetPlayer((PlayerID)wf->window_number)->face;
+						WP(wf, facesel_d).gender = 0;
 					}
 					break;
 				}
@@ -796,8 +796,8 @@
 					BaseWindow *wf = BaseWindow::AllocateFront(_have_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;
-						WP(wf,livery_d).sel = 1;
+						WP(wf, livery_d).livery_class = LC_OTHER;
+						WP(wf, livery_d).sel = 1;
 						wf->LowerWidget(2);
 					}
 					break;
@@ -813,7 +813,7 @@
 
 				case PCW_WIDGET_COMPANY_NAME: {
 					Player *p = GetPlayer((PlayerID)w->window_number);
-					WP(w,def_d).byte_1 = 1;
+					WP(w, def_d).byte_1 = 1;
 					SetDParam(0, p->name_2);
 					ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
 					break;
@@ -852,7 +852,7 @@
 				#ifdef ENABLE_NETWORK
 				case PCW_WIDGET_COMPANY_PASSWORD:
 					if (w->window_number == _local_player) {
-						WP(w,def_d).byte_1 = 2;
+						WP(w, def_d).byte_1 = 2;
 						ShowQueryString(BindCString(_network_player_info[_local_player].password),
 							STR_SET_COMPANY_PASSWORD, sizeof(_network_player_info[_local_player].password), 250, w, CS_ALPHANUMERAL);
 					}
@@ -885,10 +885,10 @@
 			char *b = e->we.edittext.str;
 
 			/* empty string is allowed for password */
-			if (*b == '\0' && WP(w,def_d).byte_1 != 2) return;
+			if (*b == '\0' && WP(w, def_d).byte_1 != 2) return;
 
 			_cmd_text = b;
-			switch (WP(w,def_d).byte_1) {
+			switch (WP(w, def_d).byte_1) {
 				case 0: /* Change president name */
 					DoCommandP(0, 0, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT));
 					break;
--- a/src/players.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/players.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -622,6 +622,7 @@
 
 /** Change engine renewal parameters
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 bits 0-3 command
  * - p1 = 0 - change auto renew bool
  * - p1 = 1 - change auto renew months
@@ -755,6 +756,7 @@
 
 /** Control the players: add, delete, etc.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 various functionality
  * - p1 = 0 - create a new player, Which player (network) it will be is in p2
  * - p1 = 1 - create a new AI player
--- a/src/rail.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/rail.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -68,8 +68,8 @@
 /* Maps a trackdir to the (4-way) direction the tile is exited when following
  * that trackdir */
 extern const DiagDirection _trackdir_to_exitdir[] = {
-	DIAGDIR_NE,DIAGDIR_SE,DIAGDIR_NE,DIAGDIR_SE,DIAGDIR_SW,DIAGDIR_SE, DIAGDIR_NE,DIAGDIR_NE,
-	DIAGDIR_SW,DIAGDIR_NW,DIAGDIR_NW,DIAGDIR_SW,DIAGDIR_NW,DIAGDIR_NE,
+	DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_NE,
+	DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE,
 };
 
 extern const Trackdir _track_exitdir_to_trackdir[][DIAGDIR_END] = {
--- a/src/rail_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/rail_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -230,6 +230,7 @@
 
 /** Build a single piece of rail
  * @param tile tile  to build on
+ * @param flags operation to perform
  * @param p1 railtype of being built piece (normal, mono, maglev)
  * @param p2 rail track to build
  */
@@ -332,6 +333,7 @@
 
 /** Remove a single piece of track
  * @param tile tile to remove track from
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 rail orientation
  */
@@ -477,6 +479,7 @@
 
 /** Build a stretch of railroad tracks.
  * @param tile start tile of drag
+ * @param flags operation to perform
  * @param p1 end tile of drag
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
@@ -526,6 +529,13 @@
 
 /** Build rail on a stretch of track.
  * Stub for the unified rail builder/remover
+ * @param tile start tile of drag
+ * @param flags operation to perform
+ * @param p1 end tile of drag
+ * @param p2 various bitstuffed elements
+ * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
+ * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
+ * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  * @see CmdRailTrackHelper
  */
 int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
@@ -535,6 +545,13 @@
 
 /** Build rail on a stretch of track.
  * Stub for the unified rail builder/remover
+ * @param tile start tile of drag
+ * @param flags operation to perform
+ * @param p1 end tile of drag
+ * @param p2 various bitstuffed elements
+ * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
+ * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
+ * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  * @see CmdRailTrackHelper
  */
 int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
@@ -544,6 +561,7 @@
 
 /** Build a train depot
  * @param tile position of the train depot
+ * @param flags operation to perform
  * @param p1 rail type
  * @param p2 bit 0..1 entrance direction (DiagDirection)
  *
@@ -609,6 +627,7 @@
  * pre/exit/combo-signals, and what-else not. If the rail piece does not
  * have any signals, bit 4 (cycle signal-type) is ignored
  * @param tile tile where to build the signals
+ * @param flags operation to perform
  * @param p1 various bitstuffed elements
  * - p1 = (bit 0-2) - track-orientation, valid values: 0-5 (Track enum)
  * - p1 = (bit 3)   - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
@@ -703,6 +722,7 @@
 
 /** Build many signals by dragging; AutoSignals
  * @param tile start tile of drag
+ * @param flags operation to perform
  * @param p1  end tile of drag
  * @param p2 various bitstuffed elements
  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
@@ -790,6 +810,15 @@
 
 /** Build signals on a stretch of track.
  * Stub for the unified signal builder/remover
+ * @param tile start tile of drag
+ * @param flags operation to perform
+ * @param p1  end tile of drag
+ * @param p2 various bitstuffed elements
+ * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
+ * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
+ * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
+ * - p2 = (bit  5)    - 0 = build, 1 = remove signals
+ * - p2 = (bit 24-31) - user defined signals_density
  * @see CmdSignalTrackHelper
  */
 int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
@@ -799,10 +828,12 @@
 
 /** Remove signals
  * @param tile coordinates where signal is being deleted from
- * @param various bitstuffed elements, only track information is used
- * - p1 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
- * - p1 = (bit  3)    - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
- * - p1 = (bit  4)    - 0 = signals, 1 = semaphores
+ * @param flags operation to perform
+ * @param p1 various bitstuffed elements, only track information is used
+ *           - (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
+ *           - (bit  3)    - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
+ *           - (bit  4)    - 0 = signals, 1 = semaphores
+ * @param p2 unused
  */
 int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -842,6 +873,15 @@
 
 /** Remove signals on a stretch of track.
  * Stub for the unified signal builder/remover
+ * @param tile start tile of drag
+ * @param flags operation to perform
+ * @param p1  end tile of drag
+ * @param p2 various bitstuffed elements
+ * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
+ * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
+ * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
+ * - p2 = (bit  5)    - 0 = build, 1 = remove signals
+ * - p2 = (bit 24-31) - user defined signals_density
  * @see CmdSignalTrackHelper
  */
 int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
@@ -908,6 +948,7 @@
 /** Convert one rail type to the other. You can convert normal rail to
  * monorail/maglev easily or vice-versa.
  * @param tile end tile of rail conversion drag
+ * @param flags operation to perform
  * @param p1 start tile of drag
  * @param p2 new railtype to convert to
  */
@@ -1177,9 +1218,6 @@
  * Draw ground sprite and track bits
  * @param ti TileInfo
  * @param track TrackBits to draw
- * @param earth Draw as earth
- * @param snow Draw as snow
- * @param flat Always draw foundation
  */
 static void DrawTrackBits(TileInfo* ti, TrackBits track)
 {
--- a/src/road_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/road_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -60,10 +60,10 @@
 	/* Get a bitmask of which neighbouring roads has a tile */
 	n = ROAD_NONE;
 	present = GetAnyRoadBits(tile);
-	if (present & ROAD_NE && GetAnyRoadBits(TILE_ADDXY(tile,-1, 0)) & ROAD_SW) n |= ROAD_NE;
+	if (present & ROAD_NE && GetAnyRoadBits(TILE_ADDXY(tile, -1, 0)) & ROAD_SW) n |= ROAD_NE;
 	if (present & ROAD_SE && GetAnyRoadBits(TILE_ADDXY(tile, 0, 1)) & ROAD_NW) n |= ROAD_SE;
 	if (present & ROAD_SW && GetAnyRoadBits(TILE_ADDXY(tile, 1, 0)) & ROAD_NE) n |= ROAD_SW;
-	if (present & ROAD_NW && GetAnyRoadBits(TILE_ADDXY(tile, 0,-1)) & ROAD_SE) n |= ROAD_NW;
+	if (present & ROAD_NW && GetAnyRoadBits(TILE_ADDXY(tile, 0, -1)) & ROAD_SE) n |= ROAD_NW;
 
 	/* If 0 or 1 bits are set in n, or if no bits that match the bits to remove,
 	 * then allow it */
@@ -90,6 +90,7 @@
 
 /** Delete a piece of road.
  * @param tile tile where to remove road from
+ * @param flags operation to perform
  * @param p1 bit 0..3 road pieces to remove (RoadBits)
  * @param p2 unused
  */
@@ -251,6 +252,7 @@
 
 /** Build a piece of road.
  * @param tile tile where to build road
+ * @param flags operation to perform
  * @param p1 bit 0..3 road pieces to build (RoadBits)
  * @param p2 the town that is building the road (0 if not applicable)
  */
@@ -402,6 +404,7 @@
 
 /** Build a long piece of road.
  * @param end_tile end tile of drag
+ * @param flags operation to perform
  * @param p1 start tile of drag
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0) - start tile starts in the 2nd half of tile (p2 & 1)
@@ -428,7 +431,7 @@
 		TileIndex t = start_tile;
 		start_tile = end_tile;
 		end_tile = t;
-		p2 ^= IS_INT_INSIDE(p2&3, 1, 3) ? 3 : 0;
+		p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0;
 	}
 
 	cost = 0;
@@ -458,6 +461,7 @@
 
 /** Remove a long piece of road.
  * @param end_tile end tile of drag
+ * @param flags operation to perform
  * @param p1 start tile of drag
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0) - start tile starts in the 2nd half of tile (p2 & 1)
@@ -512,6 +516,7 @@
 
 /** Build a road depot.
  * @param tile tile where to build the depot
+ * @param flags operation to perform
  * @param p1 bit 0..1 entrance direction (DiagDirection)
  * @param p2 unused
  *
@@ -659,7 +664,6 @@
 /**
  * Draw ground sprite and road pieces
  * @param ti TileInfo
- * @param road RoadBits to draw
  */
 static void DrawRoadBits(TileInfo* ti)
 {
--- a/src/road_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/road_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -227,7 +227,7 @@
 
 	case WE_CLICK: {
 		if (e->we.click.widget >= 3) _build_road_button_proc[e->we.click.widget - 3](w);
-	}	break;
+	} break;
 
 	case WE_KEYPRESS:
 		switch (e->we.keypress.keycode) {
@@ -257,11 +257,11 @@
 		w->InvalidateWidget(RTW_REMOVE);
 
 		w = BaseWindow::FindById(WC_BUS_STATION, 0);
-		if (w != NULL) WP(w,def_d).close = true;
+		if (w != NULL) WP(w, def_d).close = true;
 		w = BaseWindow::FindById(WC_TRUCK_STATION, 0);
-		if (w != NULL) WP(w,def_d).close = true;
+		if (w != NULL) WP(w, def_d).close = true;
 		w = BaseWindow::FindById(WC_BUILD_DEPOT, 0);
-		if (w != NULL) WP(w,def_d).close = true;
+		if (w != NULL) WP(w, def_d).close = true;
 		break;
 
 	case WE_PLACE_DRAG: {
@@ -411,14 +411,14 @@
 			w->SetDirty();
 			break;
 		}
-	}	break;
+	} break;
 
 	case WE_MOUSELOOP:
-		if (WP(w,def_d).close) w->Close();
+		if (WP(w, def_d).close) w->Close();
 		break;
 
 	case WE_DESTROY:
-		if (!WP(w,def_d).close) ResetObjectToPlace();
+		if (!WP(w, def_d).close) ResetObjectToPlace();
 		break;
 	}
 }
@@ -458,7 +458,7 @@
 	case WE_PAINT: {
 		int image;
 
-		if (WP(w,def_d).close) return;
+		if (WP(w, def_d).close) return;
 
 		w->DrawWidgets();
 
@@ -472,9 +472,9 @@
 		image = (w->window_class == WC_BUS_STATION) ? GFX_BUS_BASE : GFX_TRUCK_BASE;
 
 		StationPickerDrawSprite(103, 35, RAILTYPE_BEGIN, image);
-		StationPickerDrawSprite(103, 85, RAILTYPE_BEGIN, image+1);
-		StationPickerDrawSprite(35, 85, RAILTYPE_BEGIN, image+2);
-		StationPickerDrawSprite(35, 35, RAILTYPE_BEGIN, image+3);
+		StationPickerDrawSprite(103, 85, RAILTYPE_BEGIN, image + 1);
+		StationPickerDrawSprite(35, 85, RAILTYPE_BEGIN, image + 2);
+		StationPickerDrawSprite(35, 35, RAILTYPE_BEGIN, image + 3);
 
 		image = (w->window_class == WC_BUS_STATION) ? GFX_BUS_BASE_EXT : GFX_TRUCK_BASE_EXT;
 
@@ -482,7 +482,7 @@
 		StationPickerDrawSprite(171, 85, RAILTYPE_BEGIN, image + 1);
 
 		DrawStationCoverageAreaText(2, 146,
-			((w->window_class == WC_BUS_STATION) ? (1<<CT_PASSENGERS) : ~(1<<CT_PASSENGERS)),
+			((w->window_class == WC_BUS_STATION) ? (1 << CT_PASSENGERS) : ~(1 << CT_PASSENGERS)),
 			3);
 
 	} break;
@@ -507,7 +507,7 @@
 	} break;
 
 	case WE_MOUSELOOP: {
-		if (WP(w,def_d).close) {
+		if (WP(w, def_d).close) {
 			w->Close();
 			return;
 		}
@@ -516,7 +516,7 @@
 	} break;
 
 	case WE_DESTROY:
-		if (!WP(w,def_d).close) ResetObjectToPlace();
+		if (!WP(w, def_d).close) ResetObjectToPlace();
 		break;
 	}
 }
--- a/src/roadveh_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/roadveh_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -122,6 +122,7 @@
 
 /** Build a road vehicle.
  * @param tile tile of depot where road vehicle is built
+ * @param flags operation to perform
  * @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
  */
@@ -167,11 +168,11 @@
 		y = TileY(tile) * TILE_SIZE + TILE_SIZE / 2;
 		v->x_pos = x;
 		v->y_pos = y;
-		v->z_pos = GetSlopeZ(x,y);
+		v->z_pos = GetSlopeZ(x, y);
 		v->z_height = 6;
 
 		v->u.road.state = RVSB_IN_DEPOT;
-		v->vehstatus = VS_HIDDEN|VS_STOPPED|VS_DEFPAL;
+		v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
 
 		v->spritenum = rvi->image_index;
 		v->cargo_type = rvi->cargo_type;
@@ -227,6 +228,7 @@
 
 /** Start/Stop a road vehicle.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 road vehicle ID to start/stop
  * @param p2 unused
  */
@@ -278,6 +280,7 @@
 
 /** Sell a road vehicle.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 vehicle ID to be sold
  * @param p2 unused
  */
@@ -375,6 +378,7 @@
 
 /** Send a road vehicle to the depot.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 vehicle ID to send to the depot
  * @param p2 various bitmasked elements
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
@@ -432,6 +436,8 @@
 	if (dep == NULL) return_cmd_error(STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT);
 
 	if (flags & DC_EXEC) {
+		if (v->current_order.type == OT_LOADING) v->LeaveStation();
+
 		ClearSlot(v);
 		v->current_order.type = OT_GOTO_DEPOT;
 		v->current_order.flags = OF_NON_STOP;
@@ -447,6 +453,7 @@
 
 /** Turn a roadvehicle around.
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 vehicle ID to turn
  * @param p2 unused
  */
@@ -1066,10 +1073,10 @@
 /**
  * Returns direction to for a road vehicle to take or
  * INVALID_TRACKDIR if the direction is currently blocked
- * @param v        the vehicle to do the pathfinding for
+ * @param v        the Vehicle to do the pathfinding for
  * @param tile     the where to start the pathfinding
  * @param enterdir the direction the vehicle enters the tile from
- * @return the trackdir to take
+ * @return the Trackdir to take
  */
 static Trackdir RoadFindPathToDest(Vehicle* v, TileIndex tile, DiagDirection enterdir)
 {
@@ -1841,6 +1848,7 @@
 
 /** Refit a road vehicle to the specified cargo type
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 Vehicle ID of the vehicle to refit
  * @param p2 Bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to
--- a/src/saveload.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/saveload.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -27,8 +27,9 @@
 #include "network/network.h"
 #include "variables.h"
 #include <setjmp.h>
+#include <list>
 
-extern const uint16 SAVEGAME_VERSION = 54;
+extern const uint16 SAVEGAME_VERSION = 57;
 uint16 _sl_version;       ///< the major savegame version identifier
 byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 
@@ -251,14 +252,14 @@
 		if (i >= (1 << 14)) {
 			if (i >= (1 << 21)) {
 				assert(i < (1 << 28));
-				SlWriteByte((byte)0xE0 | (i>>24));
-				SlWriteByte((byte)(i>>16));
+				SlWriteByte((byte)0xE0 | (i >> 24));
+				SlWriteByte((byte)(i >> 16));
 			} else {
-				SlWriteByte((byte)0xC0 | (i>>16));
+				SlWriteByte((byte)0xC0 | (i >> 16));
 			}
-			SlWriteByte((byte)(i>>8));
+			SlWriteByte((byte)(i >> 8));
 		} else {
-			SlWriteByte((byte)(0x80 | (i>>8)));
+			SlWriteByte((byte)(0x80 | (i >> 8)));
 		}
 	}
 	SlWriteByte(i);
@@ -627,6 +628,61 @@
 	}
 }
 
+
+static uint ReferenceToInt(const void* obj, SLRefType rt);
+static void* IntToReference(uint index, SLRefType rt);
+
+
+/**
+ * Return the size in bytes of a list
+ * @param list The std::list to find the size of
+ */
+static inline size_t SlCalcListLen(const void *list)
+{
+	std::list<void *> *l = (std::list<void *> *) list;
+
+	/* Each entry is saved as 2 bytes, plus 2 bytes are used for the length
+	 * of the list */
+	return l->size() * 2 + 2;
+}
+
+
+/**
+ * Save/Load a list.
+ * @param list The list being manipulated
+ * @param conv SLRefType type of the list (Vehicle *, Station *, etc)
+ */
+void SlList(void *list, SLRefType conv)
+{
+	/* Automatically calculate the length? */
+	if (_sl.need_length != NL_NONE) {
+		SlSetLength(SlCalcListLen(list));
+		/* Determine length only? */
+		if (_sl.need_length == NL_CALCLENGTH) return;
+	}
+
+	std::list<void *> *l = (std::list<void *> *) list;
+
+	if (_sl.save) {
+		SlWriteUint16(l->size());
+
+		std::list<void *>::iterator iter;
+		for (iter = l->begin(); iter != l->end(); ++iter) {
+			void *ptr = *iter;
+			SlWriteUint16(ReferenceToInt(ptr, conv));
+		}
+	} else {
+		uint length = SlReadUint16();
+
+		/* Load each reference and push to the end of the list */
+		for (uint i = 0; i < length; i++) {
+			void *ptr = IntToReference(SlReadUint16(), conv);
+			l->push_back(ptr);
+		}
+	}
+}
+
+
 /** Are we going to save this object or not? */
 static inline bool SlIsObjectValidInSavegame(const SaveLoad *sld)
 {
@@ -675,6 +731,7 @@
 		case SL_REF:
 		case SL_ARR:
 		case SL_STR:
+		case SL_LST:
 			/* CONDITIONAL saveload types depend on the savegame version */
 			if (!SlIsObjectValidInSavegame(sld)) break;
 
@@ -683,6 +740,7 @@
 			case SL_REF: return SlCalcRefLen();
 			case SL_ARR: return SlCalcArrayLen(sld->length, sld->conv);
 			case SL_STR: return SlCalcStringLen(GetVariableAddress(object, sld), sld->length, sld->conv);
+			case SL_LST: return SlCalcListLen(GetVariableAddress(object, sld));
 			default: NOT_REACHED();
 			}
 			break;
@@ -694,10 +752,6 @@
 }
 
 
-static uint ReferenceToInt(const void* obj, SLRefType rt);
-static void* IntToReference(uint index, SLRefType rt);
-
-
 bool SlObjectMember(void *ptr, const SaveLoad *sld)
 {
 	VarType conv = GB(sld->conv, 0, 8);
@@ -706,6 +760,7 @@
 	case SL_REF:
 	case SL_ARR:
 	case SL_STR:
+	case SL_LST:
 		/* CONDITIONAL saveload types depend on the savegame version */
 		if (!SlIsObjectValidInSavegame(sld)) return false;
 		if (SlSkipVariableOnLoad(sld)) return false;
@@ -722,6 +777,7 @@
 			break;
 		case SL_ARR: SlArray(ptr, sld->length, conv); break;
 		case SL_STR: SlString(ptr, sld->length, conv); break;
+		case SL_LST: SlList(ptr, (SLRefType)conv); break;
 		default: NOT_REACHED();
 		}
 		break;
@@ -925,7 +981,7 @@
 {
 	const ChunkHandler *ch;
 	const ChunkHandler *const *chsc;
-	for (chsc = _sl.chs; (ch=*chsc++) != NULL;) {
+	for (chsc = _sl.chs; (ch = *chsc++) != NULL;) {
 		for (;;) {
 			if (ch->id == id) return ch;
 			if (ch->flags & CH_LAST) break;
@@ -1030,7 +1086,7 @@
 static bool InitNoComp()
 {
 	_sl.bufsize = LZO_SIZE;
-	_sl.buf = _sl.buf_ori =(byte*)malloc(LZO_SIZE);
+	_sl.buf = _sl.buf_ori = (byte*)malloc(LZO_SIZE);
 	return true;
 }
 
--- a/src/saveload.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/saveload.h	Sat Apr 21 08:23:57 2007 +0000
@@ -159,6 +159,7 @@
 	SL_REF       =  1,
 	SL_ARR       =  2,
 	SL_STR       =  3,
+	SL_LST       =  4,
 	// non-normal save-load types
 	SL_WRITEBYTE =  8,
 	SL_INCLUDE   =  9,
@@ -190,11 +191,13 @@
 #define SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to)
 #define SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to)
 #define SLE_CONDSTR(base, variable, type, length, from, to) SLE_GENERAL(SL_STR, base, variable, type, length, from, to)
+#define SLE_CONDLST(base, variable, type, from, to) SLE_GENERAL(SL_LST, base, variable, type, 0, from, to)
 
 #define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, 0, SL_MAX_VERSION)
 #define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, 0, SL_MAX_VERSION)
 #define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, 0, SL_MAX_VERSION)
 #define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, 0, SL_MAX_VERSION)
+#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, 0, SL_MAX_VERSION)
 
 #define SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to)
 
@@ -224,11 +227,13 @@
 #define SLEG_CONDREF(variable, type, from, to) SLEG_GENERAL(SL_REF, variable, type, 0, from, to)
 #define SLEG_CONDARR(variable, type, length, from, to) SLEG_GENERAL(SL_ARR, variable, type, length, from, to)
 #define SLEG_CONDSTR(variable, type, length, from, to) SLEG_GENERAL(SL_STR, variable, type, length, from, to)
+#define SLEG_CONDLST(variable, type, from, to) SLEG_GENERAL(SL_LST, variable, type, 0, from, to)
 
 #define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, 0, SL_MAX_VERSION)
 #define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, 0, SL_MAX_VERSION)
 #define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), 0, SL_MAX_VERSION)
 #define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, lengthof(variable), 0, SL_MAX_VERSION)
+#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION)
 
 #define SLEG_CONDNULL(length, from, to) {SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL}
 
--- a/src/screenshot.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/screenshot.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -268,7 +268,7 @@
 	uint32 unused;
 	uint16 xmax, ymax;
 	uint16 hdpi, vdpi;
-	byte pal_small[16*3];
+	byte pal_small[16 * 3];
 	byte reserved;
 	byte planes;
 	uint16 pitch;
--- a/src/settings.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/settings.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -412,7 +412,7 @@
 /** Find the set-integer value MANYofMANY type in a string
  * @param many full domain of values the MANYofMANY setting can have
  * @param str the current string value of the setting, each individual
- * of seperated by a whitespace\tab or | character
+ * of seperated by a whitespace,tab or | character
  * @return the 'fully' set integer, or -1 if a set is not found */
 static uint32 lookup_manyofmany(const char *many, const char *str)
 {
@@ -682,7 +682,8 @@
  * @param ini pointer to IniFile structure that holds administrative information
  * @param sd pointer to SettingDesc structure whose internally pointed variables will
  *        be given values
- * @param grpname the group of the IniFile to search in for the new values */
+ * @param grpname the group of the IniFile to search in for the new values
+ * @param object pointer to the object been loaded */
 static void ini_load_settings(IniFile *ini, const SettingDesc *sd, const char *grpname, void *object)
 {
 	IniGroup *group;
@@ -752,6 +753,7 @@
  * @param sd read-only SettingDesc structure which contains the unmodified,
  *        loaded values of the configuration file and various information about it
  * @param grpname holds the name of the group (eg. [network]) where these will be saved
+ * @param object pointer to the object been saved
  * The function works as follows: for each item in the SettingDesc structure we
  * have a look if the value has changed since we started the game (the original
  * values are reloaded when saving). If settings indeed have changed, we get
@@ -865,7 +867,7 @@
  * The list parameter can be a NULL pointer, in this case nothing will be
  * saved and a callback function should be defined that will take over the
  * list-handling and store the data itself somewhere.
- * @param IniFile handle to the ini file with the source data
+ * @param ini IniFile handle to the ini file with the source data
  * @param grpname character string identifying the section-header of the ini
  * file that will be parsed
  * @param list pointer to an string(pointer) array that will store the parsed
@@ -895,10 +897,10 @@
 /** Saves all items from a list into the 'grpname' section
  * The list parameter can be a NULL pointer, in this case a callback function
  * should be defined that will provide the source data to be saved.
- * @param IniFile handle to the ini file where the destination data is saved
+ * @param ini IniFile handle to the ini file where the destination data is saved
  * @param grpname character string identifying the section-header of the ini file
  * @param list pointer to an string(pointer) array that will be used as the
- * source to be saved into the relevant ini section
+ *             source to be saved into the relevant ini section
  * @param len the maximum number of items available for the above list
  * @param proc callback function that can will provide the source data if defined */
 static void ini_save_setting_list(IniFile *ini, const char *grpname, char **list, uint len, SettingListCallbackProc proc)
@@ -1138,15 +1140,15 @@
 	const Patches *ptc = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
 
 	if (p1) {
-		warning = ( (IS_INT_INSIDE(ptc->servint_trains,   5, 90+1) || ptc->servint_trains   == 0) &&
-								(IS_INT_INSIDE(ptc->servint_roadveh,  5, 90+1) || ptc->servint_roadveh  == 0) &&
-								(IS_INT_INSIDE(ptc->servint_aircraft, 5, 90+1) || ptc->servint_aircraft == 0) &&
-								(IS_INT_INSIDE(ptc->servint_ships,    5, 90+1) || ptc->servint_ships    == 0) );
+		warning = ( (IS_INT_INSIDE(ptc->servint_trains,   5, 90 + 1) || ptc->servint_trains   == 0) &&
+								(IS_INT_INSIDE(ptc->servint_roadveh,  5, 90 + 1) || ptc->servint_roadveh  == 0) &&
+								(IS_INT_INSIDE(ptc->servint_aircraft, 5, 90 + 1) || ptc->servint_aircraft == 0) &&
+								(IS_INT_INSIDE(ptc->servint_ships,    5, 90 + 1) || ptc->servint_ships    == 0) );
 	} else {
-		warning = ( (IS_INT_INSIDE(ptc->servint_trains,   30, 800+1) || ptc->servint_trains   == 0) &&
-								(IS_INT_INSIDE(ptc->servint_roadveh,  30, 800+1) || ptc->servint_roadveh  == 0) &&
-								(IS_INT_INSIDE(ptc->servint_aircraft, 30, 800+1) || ptc->servint_aircraft == 0) &&
-								(IS_INT_INSIDE(ptc->servint_ships,    30, 800+1) || ptc->servint_ships    == 0) );
+		warning = ( (IS_INT_INSIDE(ptc->servint_trains,   30, 800 + 1) || ptc->servint_trains   == 0) &&
+								(IS_INT_INSIDE(ptc->servint_roadveh,  30, 800 + 1) || ptc->servint_roadveh  == 0) &&
+								(IS_INT_INSIDE(ptc->servint_aircraft, 30, 800 + 1) || ptc->servint_aircraft == 0) &&
+								(IS_INT_INSIDE(ptc->servint_ships,    30, 800 + 1) || ptc->servint_ships    == 0) );
 	}
 
 	if (!warning)
@@ -1278,7 +1280,7 @@
 	 * and why not byte for example? */
 	SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, (SLE_FILE_I16 | SLE_VAR_I32), 0, 0, GameOptions, diff, 17, 0, 0, 0, 0, NULL, STR_NULL, NULL, NULL, 0, 3),
 	SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, (SLE_FILE_I16 | SLE_VAR_I32), 0, 0, GameOptions, diff, 18, 0, 0, 0, 0, NULL, STR_NULL, NULL, NULL, 4, SL_MAX_VERSION),
-	    SDT_VAR(GameOptions, diff_level,SLE_UINT8, 0, 0, 0, 0,  3, 0, STR_NULL, NULL),
+	    SDT_VAR(GameOptions, diff_level, SLE_UINT8, 0, 0, 0, 0,  3, 0, STR_NULL, NULL),
 	  SDT_OMANY(GameOptions, currency,  SLE_UINT8, N, 0, 0, CUSTOM_CURRENCY_ID, "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|ROL|RUR|SIT|SEK|YTL|SKK|BRR|custom", STR_NULL, NULL, NULL),
 	  SDT_OMANY(GameOptions, units,     SLE_UINT8, N, 0, 1,     2, "imperial|metric|si", STR_NULL, NULL, NULL),
 	  SDT_OMANY(GameOptions, town_name, SLE_UINT8, 0, 0, 0,    20, "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovakish|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan", STR_NULL, NULL, NULL),
@@ -1392,8 +1394,9 @@
 	 SDT_VAR(Patches, ending_year,      SLE_INT32,0,NC|NO,2051, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_ENDING_YEAR,  NULL),
 	SDT_BOOL(Patches, smooth_economy,             0, 0,  true,            STR_CONFIG_PATCHES_SMOOTH_ECONOMY,   NULL),
 	SDT_BOOL(Patches, allow_shares,               0, 0, false,            STR_CONFIG_PATCHES_ALLOW_SHARES,     NULL),
-	SDT_CONDVAR(Patches, town_growth_rate, SLE_UINT8, 54, SL_MAX_VERSION, 0, MS, 2, 0,   4, 0, STR_CONFIG_PATCHES_TOWN_GROWTH,  NULL),
-	SDT_CONDVAR(Patches, larger_towns,     SLE_UINT8, 54, SL_MAX_VERSION, 0, D0, 4, 0, 255, 1, STR_CONFIG_PATCHES_LARGER_TOWNS, NULL),
+	SDT_CONDVAR(Patches, town_growth_rate,  SLE_UINT8, 54, SL_MAX_VERSION, 0, MS, 2, 0,   4, 0, STR_CONFIG_PATCHES_TOWN_GROWTH,          NULL),
+	SDT_CONDVAR(Patches, larger_towns,      SLE_UINT8, 54, SL_MAX_VERSION, 0, D0, 4, 0, 255, 1, STR_CONFIG_PATCHES_LARGER_TOWNS,         NULL),
+	SDT_CONDVAR(Patches, initial_city_size, SLE_UINT8, 56, SL_MAX_VERSION, 0, 0,  2, 1,  10, 1, STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER, NULL),
 
 	/***************************************************************************/
 	/* AI section of the GUI-configure patches window */
@@ -1524,7 +1527,7 @@
 static const SettingDesc _currency_settings[] = {
 	SDT_VAR(CurrencySpec, rate,    SLE_UINT16, S, 0,  1, 0, 100, 0, STR_NULL, NULL),
 	SDT_CHR(CurrencySpec, separator,           S, 0,        ".",    STR_NULL, NULL),
-	SDT_VAR(CurrencySpec, to_euro,  SLE_INT32, S, 0,  0, 0,3000, 0, STR_NULL, NULL),
+	SDT_VAR(CurrencySpec, to_euro,  SLE_INT32, S, 0,  0, 0, 3000, 0, STR_NULL, NULL),
 	SDT_STR(CurrencySpec, prefix,   SLE_STRBQ, S, 0,       NULL,    STR_NULL, NULL),
 	SDT_STR(CurrencySpec, suffix,   SLE_STRBQ, S, 0, " credits",    STR_NULL, NULL),
 	SDT_END()
@@ -1728,6 +1731,8 @@
 }
 
 /** Network-safe changing of patch-settings (server-only).
+ * @param tile unused
+ * @param flags operation to perform
  * @param p1 the index of the patch in the SettingDesc array which identifies it
  * @param p2 the new value for the patch
  * The new value is properly clamped to its minimum/maximum when setting
@@ -1878,6 +1883,7 @@
 }
 
 /** Loadhandler for a list of global variables
+ * @param sdg pointer for the global variable list SettingDescGlobVarList
  * @note this is actually a stub for LoadSettings with the
  * object pointer set to NULL */
 static inline void LoadSettingsGlobList(const SettingDescGlobVarList *sdg)
@@ -1886,7 +1892,7 @@
 }
 
 /** Save and load handler for patches/settings
- * @param osd SettingDesc struct containing all information
+ * @param sd SettingDesc struct containing all information
  * @param object can be either NULL in which case we load global variables or
  * a pointer to a struct which is getting saved */
 static void SaveSettings(const SettingDesc *sd, void *object)
--- a/src/settings_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/settings_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -115,7 +115,7 @@
 
 		w->DrawWidgets();
 		DrawString(20, 175, STR_OPTIONS_FULLSCREEN, 0); // fullscreen
-	}	break;
+	} break;
 
 	case WE_CLICK:
 		switch (e->we.click.widget) {
@@ -225,6 +225,7 @@
 
 /** Change the side of the road vehicles drive on (server only).
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 the side of the road; 0 = left side and 1 = right side
  * @param p2 unused
  */
@@ -325,13 +326,6 @@
 	{  0,   2,  1, STR_6839_PERMISSIVE},
 };
 
-static inline bool GetBitAndShift(uint32 *b)
-{
-	uint32 x = *b;
-	*b >>= 1;
-	return HASBIT(x, 0);
-}
-
 /*
  * A: competitors
  * B: start time in months / 3
@@ -430,9 +424,9 @@
 
 		y = GAMEDIFF_WND_TOP_OFFSET;
 		for (i = 0; i != GAME_DIFFICULTY_NUM; i++) {
-			DrawFrameRect( 5, y,  5 + 8, y + 8, 3, GetBitAndShift(&click_a) ? FR_LOWERED : FR_NONE);
-			DrawFrameRect(15, y, 15 + 8, y + 8, 3, GetBitAndShift(&click_b) ? FR_LOWERED : FR_NONE);
-			if (GetBitAndShift(&disabled) || (_networking && !_network_server)) {
+			DrawFrameRect( 5, y,  5 + 8, y + 8, 3, HASBIT(click_a, i) ? FR_LOWERED : FR_NONE);
+			DrawFrameRect(15, y, 15 + 8, y + 8, 3, HASBIT(click_b, i) ? FR_LOWERED : FR_NONE);
+			if (HASBIT(disabled, i) || (_networking && !_network_server)) {
 				int color = (1 << PALETTE_MODIFIER_GREYOUT) | _colour_gradient[COLOUR_YELLOW][2];
 				GfxFillRect( 6, y + 1,  6 + 8, y + 8, color);
 				GfxFillRect(16, y + 1, 16 + 8, y + 8, color);
@@ -500,9 +494,11 @@
 
 			// save value in temporary variable
 			((int*)&_opt_mod_temp.diff)[btn] = val;
+			w->RaiseWidget(_opt_mod_temp.diff_level + 3);
 			SetDifficultyLevel(3, &_opt_mod_temp); // set difficulty level to custom
+			w->LowerWidget(_opt_mod_temp.diff_level + 3);
 			w->SetDirty();
-		}	break;
+		} break;
 		case 3: case 4: case 5: case 6: /* Easy / Medium / Hard / Custom */
 			// temporarily change difficulty level
 			w->RaiseWidget(_opt_mod_temp.diff_level + 3);
@@ -639,6 +635,7 @@
 	"allow_shares",
 	"town_growth_rate",
 	"larger_towns",
+	"initial_city_size",
 };
 
 static const char *_patches_ai[] = {
--- a/src/ship_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/ship_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -406,7 +406,7 @@
 	uint spd;
 	byte t;
 
-	spd = min(v->cur_speed + 1, v->max_speed);
+	spd = min(v->cur_speed + 1, GetVehicleProperty(v, 0x0B, v->max_speed));
 
 	/*updates statusbar only if speed have changed to save CPU time */
 	if (spd != v->cur_speed) {
@@ -551,7 +551,7 @@
  * direction in which we are entering the tile */
 static Track ChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks)
 {
-	assert(enterdir>=0 && enterdir<=3);
+	assert(enterdir >= 0 && enterdir <= 3);
 
 	if (_patches.yapf.ship_use_yapf) {
 		Trackdir trackdir = YapfChooseShipTrack(v, tile, enterdir, tracks);
@@ -654,11 +654,11 @@
 	},
 	{
 		{ 0, 0, 0},
-		{ 8,15, 7},
+		{ 8, 15, 7},
 		{ 0, 0, 0},
-		{ 8,15, 6},
+		{ 8, 15, 6},
 		{ 0, 0, 0},
-		{ 7,15, 0},
+		{ 7, 15, 0},
 	}
 };
 
@@ -880,7 +880,7 @@
 		y = TileY(tile) * TILE_SIZE + TILE_SIZE / 2;
 		v->x_pos = x;
 		v->y_pos = y;
-		v->z_pos = GetSlopeZ(x,y);
+		v->z_pos = GetSlopeZ(x, y);
 
 		v->z_height = 6;
 		v->sprite_width = 6;
@@ -1065,6 +1065,8 @@
 	if (dep == NULL) return_cmd_error(STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT);
 
 	if (flags & DC_EXEC) {
+		if (v->current_order.type == OT_LOADING) v->LeaveStation();
+
 		v->dest_tile = dep->xy;
 		v->current_order.type = OT_GOTO_DEPOT;
 		v->current_order.flags = OF_NON_STOP;
--- a/src/ship_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/ship_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -78,7 +78,7 @@
 		{
 			SetDParam(0, v->service_interval);
 			SetDParam(1, v->date_of_last_service);
-			DrawString(13, 102, _patches.servint_ispercent?STR_SERVICING_INTERVAL_PERCENT:STR_883C_SERVICING_INTERVAL_DAYS, 0);
+			DrawString(13, 102, _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, 0);
 		}
 
 		DrawShipImage(v, 3, 57, INVALID_VEHICLE);
@@ -120,7 +120,7 @@
 			mod = _ctrl_pressed? 5 : 10;
 			goto do_change_service_int;
 		case 6: /* decrease int */
-			mod = _ctrl_pressed?- 5 : -10;
+			mod = _ctrl_pressed ? - 5 : -10;
 do_change_service_int:
 			v = GetVehicle(w->window_number);
 
@@ -157,7 +157,7 @@
 
 static const WindowDesc _ship_details_desc = {
 	WDP_AUTO, WDP_AUTO, 405, 113,
-	WC_VEHICLE_DETAILS,WC_VEHICLE_VIEW,
+	WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 	_ship_details_widgets,
 	ShipDetailsWndProc
@@ -326,7 +326,7 @@
 { WWT_PUSHIMGBTN, RESIZE_LR,    14, 232, 249,  32,  49, SPR_SEND_SHIP_TODEPOT,   STR_982A_SEND_SHIP_TO_DEPOT},
 { WWT_PUSHIMGBTN, RESIZE_LR,    14, 232, 249,  50,  67, SPR_REFIT_VEHICLE,       STR_983A_REFIT_CARGO_SHIP_TO_CARRY},
 { WWT_PUSHIMGBTN, RESIZE_LR,    14, 232, 249,  68,  85, SPR_SHOW_ORDERS,         STR_9828_SHOW_SHIP_S_ORDERS},
-{ WWT_PUSHIMGBTN, RESIZE_LR,    14, 232, 249,  86, 103, SPR_SHOW_VEHICLE_DETAILS,STR_982B_SHOW_SHIP_DETAILS},
+{ WWT_PUSHIMGBTN, RESIZE_LR,    14, 232, 249,  86, 103, SPR_SHOW_VEHICLE_DETAILS, STR_982B_SHOW_SHIP_DETAILS},
 { WWT_PUSHIMGBTN, RESIZE_LR,    14, 232, 249,  32,  49, SPR_CLONE_SHIP,          STR_CLONE_SHIP_INFO},
 {      WWT_PANEL, RESIZE_LRB,   14, 232, 249, 104, 103, 0x0,                     STR_NULL },
 {  WWT_RESIZEBOX, RESIZE_LRTB,  14, 238, 249, 104, 115, 0x0,                     STR_NULL },
--- a/src/signs.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/signs.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -136,7 +136,7 @@
 		si->x = x;
 		si->y = y;
 		si->owner = _current_player; // owner of the sign; just eyecandy
-		si->z = GetSlopeZ(x,y);
+		si->z = GetSlopeZ(x, y);
 		UpdateSignVirtCoords(si);
 		MarkSignDirty(si);
 		InvalidateWindow(WC_SIGN_LIST, 0);
--- a/src/smallmap_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/smallmap_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -49,12 +49,24 @@
 static int _smallmap_type;
 static bool _smallmap_show_towns = true;
 
-#define MK(a,b) a, b
-#define MKEND() 0xFFFF
-#define MS(a,b) (a | 0x100), b
+/** Macro for ordinary entry of LegendAndColor */
+#define MK(a,b) {a, b, false, false}
+/** Macro for end of list marker in arrays of LegendAndColor */
+#define MKEND() {0, STR_NULL, true, false}
+/** Macro for break marker in arrays of LegendAndColor.
+ * It will have valid data, though */
+#define MS(a,b) {a, b, false, true}
 
-/* Legend text giving the colours to look for on the minimap */
-static const uint16 _legend_land_contours[] = {
+/** Structure for holding relevant data for legends in small map */
+struct LegendAndColour {
+	uint16 colour;     ///< color of the item on the map
+	StringID legend;   ///< string corresponding to the colored item
+	bool end;         ///< this is the end of the list
+	bool col_break;   ///< perform a break and go one collumn further
+};
+
+/** Legend text giving the colours to look for on the minimap */
+static const LegendAndColour _legend_land_contours[] = {
 	MK(0x5A, STR_00F0_100M),
 	MK(0x5C, STR_00F1_200M),
 	MK(0x5E, STR_00F2_300M),
@@ -69,7 +81,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_vehicles[] = {
+static const LegendAndColour _legend_vehicles[] = {
 	MK(0xB8, STR_00F5_TRAINS),
 	MK(0xBF, STR_00F6_ROAD_VEHICLES),
 	MK(0x98, STR_00F7_SHIPS),
@@ -79,7 +91,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_industries_normal[] = {
+static const LegendAndColour _legend_industries_normal[] = {
 	MK(0xD7, STR_00FA_COAL_MINE),
 	MK(0xB8, STR_00FB_POWER_STATION),
 	MK(0x56, STR_00FC_FOREST),
@@ -95,7 +107,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_industries_hilly[] = {
+static const LegendAndColour _legend_industries_hilly[] = {
 	MK(0xD7, STR_00FA_COAL_MINE),
 	MK(0xB8, STR_00FB_POWER_STATION),
 	MK(0x56, STR_00FC_FOREST),
@@ -111,7 +123,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_industries_desert[] = {
+static const LegendAndColour _legend_industries_desert[] = {
 	MK(0xBF, STR_00FE_OIL_REFINERY),
 	MK(0x98, STR_0102_OIL_WELLS),
 	MK(0x0F, STR_0105_BANK),
@@ -129,7 +141,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_industries_candy[] = {
+static const LegendAndColour _legend_industries_candy[] = {
 	MK(0x30, STR_0110_COTTON_CANDY_FOREST),
 	MK(0xAE, STR_0111_CANDY_FACTORY),
 	MK(0x27, STR_0112_BATTERY_FARM),
@@ -145,7 +157,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_routes[] = {
+static const LegendAndColour _legend_routes[] = {
 	MK(0xD7, STR_00EB_ROADS),
 	MK(0x0A, STR_00EC_RAILROADS),
 	MK(0xB5, STR_00EE_BUILDINGS_INDUSTRIES),
@@ -158,7 +170,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_vegetation[] = {
+static const LegendAndColour _legend_vegetation[] = {
 	MK(0x52, STR_0120_ROUGH_LAND),
 	MK(0x54, STR_0121_GRASS_LAND),
 	MK(0x37, STR_0122_BARE_LAND),
@@ -174,7 +186,7 @@
 	MKEND()
 };
 
-static const uint16 _legend_land_owners[] = {
+static const LegendAndColour _legend_land_owners[] = {
 	MK(0xCA, STR_0126_WATER),
 	MK(0x54, STR_0127_NO_OWNER),
 	MK(0xB4, STR_0128_TOWNS),
@@ -186,8 +198,9 @@
 #undef MKEND
 
 
-enum { IND_OFFS = 6 };
-static const uint16 * const _legend_table[] = {
+enum { IND_OFFS = 6 };  ///< allow to "jump" to the industries corresponding to the landscape
+
+static const LegendAndColour * const _legend_table[] = {
 	_legend_land_contours,
 	_legend_vehicles,
 	NULL,
@@ -383,7 +396,7 @@
 /**
  * Return the color a tile would be displayed with in the small map in mode "Vehicles".
  *
- * @param t The tile of which we would like to get the color.
+ * @param tile The tile of which we would like to get the color.
  * @return The color of tile in the small map in mode "Vehicles"
  */
 static inline uint32 GetSmallMapVehiclesPixels(TileIndex tile)
@@ -413,7 +426,7 @@
 /**
  * Return the color a tile would be displayed with in the small map in mode "Routes".
  *
- * @param t The tile of which we would like to get the color.
+ * @param tile The tile of which we would like to get the color.
  * @return The color of tile  in the small map in mode "Routes"
  */
 static inline uint32 GetSmallMapRoutesPixels(TileIndex tile)
@@ -489,7 +502,7 @@
 /**
  * Return the color a tile would be displayed with in the small map in mode "Owner".
  *
- * @param t The tile of which we would like to get the color.
+ * @param tile The tile of which we would like to get the color.
  * @return The color of tile in the small map in mode "Owner"
  */
 static inline uint32 GetSmallMapOwnerPixels(TileIndex tile)
@@ -553,7 +566,7 @@
  * are drawn directly into the screen buffer. The final map is drawn in multiple passes.
  * The passes are:
  * <ol><li>The colors of tiles in the different modes.</li>
- * <li>Town names (optional)</li>
+ * <li>Town names (optional)</li></ol>
  *
  * @param dpi pointer to pixel to write onto
  * @param w pointer to BaseWindow struct
@@ -779,7 +792,7 @@
 {
 	switch (e->event) {
 		case WE_PAINT: {
-			const uint16 *tbl;
+			const LegendAndColour *tbl;
 			int x, y, y_org;
 			DrawPixelInfo new_dpi;
 
@@ -794,15 +807,16 @@
 			y = y_org;
 			for (;;) {
 				GfxFillRect(x,     y + 1, x + 8, y + 5, 0);
-				GfxFillRect(x + 1, y + 2, x + 7, y + 4, (byte)tbl[0]);
-				DrawString(x + 11, y, tbl[1], 0);
+				GfxFillRect(x + 1, y + 2, x + 7, y + 4, tbl->colour);
+				DrawString(x + 11, y, tbl->legend, 0);
 
-				tbl += 2;
+				tbl += 1;
 				y += 6;
 
-				if (tbl[0] == 0xFFFF) {
+				if (tbl->end) { // end of the list
 					break;
-				} else if (tbl[0] & 0x100) {
+				} else if (tbl->col_break) {
+					/*  break asked, continue at top, 123 pixels (one "row") to the right */
 					x += 123;
 					y = y_org;
 				}
--- a/src/spritecache.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/spritecache.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file spritechache.cpp */
+/** @file spritecache.cpp */
 
 #include "stdafx.h"
 #include "openttd.h"
--- a/src/station.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/station.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -59,7 +59,6 @@
  * Aircraft-Hangar orders need special treatment here, as the hangars are
  * actually part of a station (tiletype is STATION), but the order type
  * is OT_GOTO_DEPOT.
- * @param st Station to be deleted
  */
 Station::~Station()
 {
--- a/src/station.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/station.h	Sat Apr 21 08:23:57 2007 +0000
@@ -11,6 +11,7 @@
 #include "sprite.h"
 #include "tile.h"
 #include "newgrf_station.h"
+#include <list>
 
 static const StationID INVALID_STATION = 0xFFFF;
 static const byte INITIAL_STATION_RATING = 175;
@@ -157,6 +158,7 @@
 	StationID index;
 
 	byte last_vehicle_type;
+	std::list<Vehicle *> loading_vehicles;
 	GoodsEntry goods[NUM_CARGO];
 
 	uint16 random_bits;
--- a/src/station_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/station_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -199,7 +199,7 @@
 		Station *s;
 
 		FOR_ALL_STATIONS(s) {
-			if (s != st && s->town==t) {
+			if (s != st && s->town == t) {
 				uint str = M(s->string_id);
 				if (str <= 0x20) {
 					if (str == M(STR_SV_STNAME_FOREST))
@@ -230,7 +230,7 @@
 	}
 
 	/* check close enough to town to get central as name? */
-	if (DistanceMax(tile,t->xy) < 8) {
+	if (DistanceMax(tile, t->xy) < 8) {
 		found = M(STR_SV_STNAME);
 		if (HASBIT(free_names, M(STR_SV_STNAME))) goto done;
 
@@ -272,10 +272,10 @@
 	/* check direction compared to town */
 	{
 		static const int8 _direction_and_table[] = {
-			~( (1<<M(STR_SV_STNAME_WEST)) | (1<<M(STR_SV_STNAME_EAST)) | (1<<M(STR_SV_STNAME_NORTH)) ),
-			~( (1<<M(STR_SV_STNAME_SOUTH)) | (1<<M(STR_SV_STNAME_WEST)) | (1<<M(STR_SV_STNAME_NORTH)) ),
-			~( (1<<M(STR_SV_STNAME_SOUTH)) | (1<<M(STR_SV_STNAME_EAST)) | (1<<M(STR_SV_STNAME_NORTH)) ),
-			~( (1<<M(STR_SV_STNAME_SOUTH)) | (1<<M(STR_SV_STNAME_WEST)) | (1<<M(STR_SV_STNAME_EAST)) ),
+			~( (1 << M(STR_SV_STNAME_WEST)) | (1 << M(STR_SV_STNAME_EAST)) | (1 << M(STR_SV_STNAME_NORTH)) ),
+			~( (1 << M(STR_SV_STNAME_SOUTH)) | (1 << M(STR_SV_STNAME_WEST)) | (1 << M(STR_SV_STNAME_NORTH)) ),
+			~( (1 << M(STR_SV_STNAME_SOUTH)) | (1 << M(STR_SV_STNAME_EAST)) | (1 << M(STR_SV_STNAME_NORTH)) ),
+			~( (1 << M(STR_SV_STNAME_SOUTH)) | (1 << M(STR_SV_STNAME_WEST)) | (1 << M(STR_SV_STNAME_EAST)) ),
 		};
 
 		free_names &= _direction_and_table[
@@ -283,7 +283,7 @@
 			(TileY(tile) < TileY(t->xy)) * 2];
 	}
 
-	tmp = free_names & ((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7)|(1<<12)|(1<<26)|(1<<27)|(1<<28)|(1<<29)|(1<<30));
+	tmp = free_names & ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 6) | (1 << 7) | (1 << 12) | (1 << 26) | (1 << 27) | (1 << 28) | (1 << 29) | (1 << 30));
 	if (tmp == 0) {
 		_error_message = STR_3007_TOO_MANY_STATIONS_LOADING;
 		return false;
@@ -368,7 +368,7 @@
 	}
 
 	SetDParam(0, st->index);
-	AddNewsItem(msg, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_TILE, NT_ACCEPTANCE, 0), st->xy, 0);
+	AddNewsItem(msg, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT | NF_TILE, NT_ACCEPTANCE, 0), st->xy, 0);
 }
 
 // Get a list of the cargo types being produced around the tile.
@@ -646,10 +646,10 @@
 		int flat_z = z;
 		if (tileh != SLOPE_FLAT) {
 			// need to check so the entrance to the station is not pointing at a slope.
-			if ((invalid_dirs&1 && !(tileh & SLOPE_NE) && (uint)w_cur == w) ||
-					(invalid_dirs&2 && !(tileh & SLOPE_SE) && h_cur == 1) ||
-					(invalid_dirs&4 && !(tileh & SLOPE_SW) && w_cur == 1) ||
-					(invalid_dirs&8 && !(tileh & SLOPE_NW) && (uint)h_cur == h)) {
+			if ((invalid_dirs & 1 && !(tileh & SLOPE_NE) && (uint)w_cur == w) ||
+					(invalid_dirs & 2 && !(tileh & SLOPE_SE) && h_cur == 1) ||
+					(invalid_dirs & 4 && !(tileh & SLOPE_SW) && w_cur == 1) ||
+					(invalid_dirs & 8 && !(tileh & SLOPE_NW) && (uint)h_cur == h)) {
 				return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
 			}
 			cost += _price.terraform;
@@ -748,7 +748,7 @@
 {
 	int i = n;
 	do *layout++ = 0; while (--i);
-	layout[((n-1) >> 1)-n] = 2;
+	layout[((n - 1) >> 1) - n] = 2;
 	return layout;
 }
 
@@ -757,8 +757,8 @@
 	int i = n;
 	do *layout++ = b; while (--i);
 	if (n > 4) {
-		layout[0-n] = 0;
-		layout[n-1-n] = 0;
+		layout[0 - n] = 0;
+		layout[n - 1 - n] = 0;
 	}
 	return layout;
 }
@@ -789,6 +789,7 @@
 
 /** Build railroad station
  * @param tile_org starting position of station dragging/placement
+ * @param flags operation to perform
  * @param p1 various bitstuffed elements
  * - p1 = (bit  0)    - orientation (Axis)
  * - p1 = (bit  8-15) - number of tracks
@@ -1023,6 +1024,7 @@
 /** Remove a single tile from a railroad station.
  * This allows for custom-built station with holes and weird layouts
  * @param tile tile of station piece to remove
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 unused
  */
@@ -1153,8 +1155,8 @@
 }
 
 /**
- * @param[in] truck_station Determines whether a stop is RoadStop::BUS or RoadStop::TRUCK
- * @param[in] station The station to do the whole procedure for
+ * @param truck_station Determines whether a stop is RoadStop::BUS or RoadStop::TRUCK
+ * @param st The Station to do the whole procedure for
  * @return a pointer to where to link a new RoadStop*
  */
 static RoadStop **FindRoadStopSpot(bool truck_station, Station* st)
@@ -1162,10 +1164,10 @@
 	RoadStop **primary_stop = (truck_station) ? &st->truck_stops : &st->bus_stops;
 
 	if (*primary_stop == NULL) {
-		//we have no roadstop of the type yet, so write a "primary stop"
+		/* we have no roadstop of the type yet, so write a "primary stop" */
 		return primary_stop;
 	} else {
-		//there are stops already, so append to the end of the list
+		/* there are stops already, so append to the end of the list */
 		RoadStop *stop = *primary_stop;
 		while (stop->next != NULL) stop = stop->next;
 		return &stop->next;
@@ -1174,6 +1176,7 @@
 
 /** Build a bus or truck stop
  * @param tile tile to build the stop at
+ * @param flags operation to perform
  * @param p1 entrance direction (DiagDirection)
  * @param p2 bit 0: 0 for Bus stops, 1 for truck stops
  *           bit 1: 0 for normal, 1 for drive-through
@@ -1341,6 +1344,7 @@
 
 /** Remove a bus or truck stop
  * @param tile tile to remove the stop from
+ * @param flags operation to perform
  * @param p1 not used
  * @param p2 bit 0: 0 for Bus stops, 1 for truck stops
  */
@@ -1466,6 +1470,7 @@
 
 /** Place an Airport.
  * @param tile tile where airport will be built
+ * @param flags operation to perform
  * @param p1 airport type, @see airport.h
  * @param p2 unused
  */
@@ -1618,7 +1623,7 @@
 			DeleteAnimatedTile(tile_cur);
 			DoClearSquare(tile_cur);
 		}
-	} END_TILE_LOOP(tile_cur, w,h,tile)
+	} END_TILE_LOOP(tile_cur, w, h, tile)
 
 	if (flags & DC_EXEC) {
 		for (uint i = 0; i < afc->nof_depots; ++i) {
@@ -1641,6 +1646,7 @@
 
 /** Build a buoy.
  * @param tile tile where to place the bouy
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 unused
  */
@@ -1749,6 +1755,7 @@
 
 /** Build a dock/haven.
  * @param tile tile where dock will be built
+ * @param flags operation to perform
  * @param p1 unused
  * @param p2 unused
  */
@@ -2381,6 +2388,7 @@
 
 /** Rename a station
  * @param tile unused
+ * @param flags operation to perform
  * @param p1 station ID that is to be renamed
  * @param p2 unused
  */
@@ -2787,6 +2795,8 @@
 	SLE_CONDVAR(Station, waiting_triggers,           SLE_UINT8,                  27, SL_MAX_VERSION),
 	SLE_CONDVAR(Station, num_specs,                  SLE_UINT8,                  27, SL_MAX_VERSION),
 
+	SLE_CONDLST(Station, loading_vehicles,           REF_VEHICLE,                57, SL_MAX_VERSION),
+
 	// reserve extra space in savegame here. (currently 32 bytes)
 	SLE_CONDNULL(32, 2, SL_MAX_VERSION),
 
@@ -2820,7 +2830,9 @@
 static void SaveLoad_STNS(Station *st)
 {
 	SlObject(st, _station_desc);
-	for (CargoID i = 0; i < NUM_CARGO; i++) {
+
+	uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO;
+	for (CargoID i = 0; i < num_cargo; i++) {
 		SlObject(&st->goods[i], _goods_desc);
 	}
 
--- a/src/station_map.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/station_map.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -6,7 +6,12 @@
 #include "openttd.h"
 #include "station_map.h"
 
-
+/**
+ * Get the station type (rail, airport, truck etc) for the given tile.
+ * @param t the tile to get the station type of.
+ * @pre IsTileType(t, MP_STATION)
+ * @return the station type of the given tile.
+ */
 StationType GetStationType(TileIndex t)
 {
 	assert(IsTileType(t, MP_STATION));
--- a/src/stdafx.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/stdafx.h	Sat Apr 21 08:23:57 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file stdfax.h */
+/** @file stdafx.h */
 
 #ifndef STDAFX_H
 #define STDAFX_H
--- a/src/strgen/strgen.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/strgen/strgen.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -730,7 +730,7 @@
 {
 	ParsedCommandStruct templ;
 	ParsedCommandStruct lang;
-	int i,j;
+	int i, j;
 	bool result = true;
 
 	ExtractCommandString(&templ, b, true);
@@ -914,7 +914,7 @@
 	in = fopen(file, "r");
 	if (in == NULL) fatal("Cannot open file");
 	_cur_line = 1;
-	while (fgets(buf, sizeof(buf),in) != NULL) {
+	while (fgets(buf, sizeof(buf), in) != NULL) {
 		rstrip(buf);
 		HandleString(buf, english);
 		_cur_line++;
--- a/src/strings.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/strings.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -63,7 +63,7 @@
 
 	assert(argv);
 	result = (uint32)(*argv)[0] + ((uint64)(uint32)(*argv)[1] << 32);
-	(*argv)+=2;
+	(*argv) += 2;
 	return result;
 }
 
@@ -421,37 +421,37 @@
 	 * Used in:
 	 *   Latvian */
 	case 3:
-		return n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;
+		return n % 10 == 1 && n % 100 != 11 ? 0 : n != 0 ? 1 : 2;
 
 	/* Three forms, special case for one and two
 	 * Used in:
 	 *   Gaelige (Irish) */
 	case 4:
-		return n==1 ? 0 : n==2 ? 1 : 2;
+		return n == 1 ? 0 : n == 2 ? 1 : 2;
 
 	/* Three forms, special case for numbers ending in 1[2-9]
 	 * Used in:
 	 *   Lithuanian */
 	case 5:
-		return n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;
+		return n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2;
 
 	/* Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4]
 	 * Used in:
 	 *   Croatian, Czech, Russian, Slovak, Ukrainian */
 	case 6:
-		return n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
+		return n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2;
 
 	/* Three forms, special case for one and some numbers ending in 2, 3, or 4
 	 * Used in:
 	 *   Polish */
 	case 7:
-		return n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
+		return n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2;
 
 	/* Four forms, special case for one and all numbers ending in 02, 03, or 04
 	 * Used in:
 	 *   Slovenian */
 	case 8:
-		return n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;
+		return n % 100 == 1 ? 0 : n % 100 == 2 ? 1 : n % 100 == 3 || n % 100 == 4 ? 2 : 3;
 	}
 }
 
@@ -459,7 +459,7 @@
 {
 	//<NUM> {Length of each string} {each string}
 	uint n = (byte)*b++;
-	uint pos,i, mylen=0,mypos=0;
+	uint pos, i, mylen = 0, mypos = 0;
 
 	for (i = pos = 0; i != n; i++) {
 		uint len = (byte)*b++;
--- a/src/table/ai_rail.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/ai_rail.h	Sat Apr 21 08:23:57 2007 +0000
@@ -21,7 +21,7 @@
 };
 
 
-#define MKHDR(a,b,c,d,e) a,b,c,d,e,
+#define MKHDR(a, b, c, d, e) a, b, c, d, e,
 #define MKDEPOT(a, b, c)   {0, a, {b, c}}
 #define MKSTATION(a, b, c) {1, a, {b, c}}
 #define MKRAIL(a, b, c)    {2, a, {b, c}}
@@ -424,17 +424,17 @@
 
 #undef MKHDR
 
-#define MKHDR(a) a,{
+#define MKHDR(a) a, {
 
 static const AiDefaultBlockData _roaddata_ai_0_data[] = {
-	MKDEPOT(2, -1,1),
-	MKSTATION(0x2, -1,0),
-	MKRAIL(0xC, 0,0),
-	MKRAIL(0x9, 0,1),
-	MKCLRRAIL(0, 0,-1),
-	MKCLRRAIL(0, 1,0),
-	MKCLRRAIL(0, 1,1),
-	MKCLRRAIL(0, 0,2),
+	MKDEPOT(2, -1, 1),
+	MKSTATION(0x2, -1, 0),
+	MKRAIL(0xC, 0, 0),
+	MKRAIL(0x9, 0, 1),
+	MKCLRRAIL(0, 0, -1),
+	MKCLRRAIL(0, 1, 0),
+	MKCLRRAIL(0, 1, 1),
+	MKCLRRAIL(0, 0, 2),
 	MKEND
 };
 
@@ -443,14 +443,14 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_1_data[] = {
-	MKDEPOT(1, 0,-1),
-	MKSTATION(0x1, 1,-1),
-	MKRAIL(0x3, 0,0),
-	MKRAIL(0x9, 1,0),
-	MKCLRRAIL(0, -1,0),
-	MKCLRRAIL(0, 0,1),
-	MKCLRRAIL(0, 1,1),
-	MKCLRRAIL(0, 2,0),
+	MKDEPOT(1, 0, -1),
+	MKSTATION(0x1, 1, -1),
+	MKRAIL(0x3, 0, 0),
+	MKRAIL(0x9, 1, 0),
+	MKCLRRAIL(0, -1, 0),
+	MKCLRRAIL(0, 0, 1),
+	MKCLRRAIL(0, 1, 1),
+	MKCLRRAIL(0, 2, 0),
 	MKEND
 };
 
@@ -459,14 +459,14 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_2_data[] = {
-	MKDEPOT(3, 1,1),
-	MKSTATION(0x3, 0,1),
-	MKRAIL(0x6, 0,0),
-	MKRAIL(0xC, 1,0),
-	MKCLRRAIL(0, -1,0),
-	MKCLRRAIL(0, 0,-1),
-	MKCLRRAIL(0, 1,-1),
-	MKCLRRAIL(0, 2,0),
+	MKDEPOT(3, 1, 1),
+	MKSTATION(0x3, 0, 1),
+	MKRAIL(0x6, 0, 0),
+	MKRAIL(0xC, 1, 0),
+	MKCLRRAIL(0, -1, 0),
+	MKCLRRAIL(0, 0, -1),
+	MKCLRRAIL(0, 1, -1),
+	MKCLRRAIL(0, 2, 0),
 	MKEND
 };
 
@@ -475,14 +475,14 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_3_data[] = {
-	MKDEPOT(0, 1,0),
-	MKSTATION(0x0, 1,1),
-	MKRAIL(0x6, 0,0),
-	MKRAIL(0x3, 0,1),
-	MKCLRRAIL(0, 0,-1),
-	MKCLRRAIL(0, -1,0),
-	MKCLRRAIL(0, -1,1),
-	MKCLRRAIL(0, 0,2),
+	MKDEPOT(0, 1, 0),
+	MKSTATION(0x0, 1, 1),
+	MKRAIL(0x6, 0, 0),
+	MKRAIL(0x3, 0, 1),
+	MKCLRRAIL(0, 0, -1),
+	MKCLRRAIL(0, -1, 0),
+	MKCLRRAIL(0, -1, 1),
+	MKCLRRAIL(0, 0, 2),
 	MKEND
 };
 
@@ -491,11 +491,11 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_4_data[] = {
-	MKSTATION(0x2, -1,0),
-	MKRAIL(0x8, 0,0),
-	MKCLRRAIL(0, 0,-1),
-	MKCLRRAIL(0, 1,0),
-	MKCLRRAIL(0, 0,1),
+	MKSTATION(0x2, -1, 0),
+	MKRAIL(0x8, 0, 0),
+	MKCLRRAIL(0, 0, -1),
+	MKCLRRAIL(0, 1, 0),
+	MKCLRRAIL(0, 0, 1),
 	MKEND
 };
 
@@ -504,11 +504,11 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_5_data[] = {
-	MKSTATION(0x3, 0,1),
-	MKRAIL(0x4, 0,0),
-	MKCLRRAIL(0, -1,0),
-	MKCLRRAIL(0, 0,-1),
-	MKCLRRAIL(0, 1,0),
+	MKSTATION(0x3, 0, 1),
+	MKRAIL(0x4, 0, 0),
+	MKCLRRAIL(0, -1, 0),
+	MKCLRRAIL(0, 0, -1),
+	MKCLRRAIL(0, 1, 0),
 	MKEND
 };
 
@@ -517,11 +517,11 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_6_data[] = {
-	MKSTATION(0x0, 1,1),
-	MKRAIL(0x2, 0,1),
-	MKCLRRAIL(0, 0,0),
-	MKCLRRAIL(0, -1,0),
-	MKCLRRAIL(0, 0,2),
+	MKSTATION(0x0, 1, 1),
+	MKRAIL(0x2, 0, 1),
+	MKCLRRAIL(0, 0, 0),
+	MKCLRRAIL(0, -1, 0),
+	MKCLRRAIL(0, 0, 2),
 	MKEND
 };
 
@@ -530,11 +530,11 @@
 };
 
 static const AiDefaultBlockData _roaddata_ai_7_data[] = {
-	MKSTATION(0x1, 1,-1),
-	MKRAIL(0x1, 1,0),
-	MKCLRRAIL(0, 0,0),
-	MKCLRRAIL(0, 1,1),
-	MKCLRRAIL(0, 2,0),
+	MKSTATION(0x1, 1, -1),
+	MKRAIL(0x1, 1, 0),
+	MKCLRRAIL(0, 0, 0),
+	MKCLRRAIL(0, 1, 1),
+	MKCLRRAIL(0, 2, 0),
 	MKEND
 };
 
--- a/src/table/build_industry.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/build_industry.h	Sat Apr 21 08:23:57 2007 +0000
@@ -5,54 +5,65 @@
 #ifndef BUILD_INDUSTRY_H
 #define BUILD_INDUSTRY_H
 
-#define MK(x,y, m) {{x, y}, m}
+/**
+ * Definition of an industry tiles layout.
+ * @param x offset x of this tile
+ * @param y offset y of this tile
+ * @param m index of the tile.
+ * @see _industry_specs
+ * @see IndustryTileTable
+ */
+#define MK(x, y, m) {{x, y}, m}
 
+/**
+ * Terminator of industry tiles layout definition
+ */
 #define MKEND {{-0x80, 0}, 0}
 
 static const IndustryTileTable _tile_table_coal_mine_0[] = {
-	MK(1,1, 0),
-	MK(1,2, 2),
-	MK(0,0, 5),
-	MK(1,0, 6),
-	MK(2,0, 3),
-	MK(2,2, 3),
+	MK(1, 1, 0),
+	MK(1, 2, 2),
+	MK(0, 0, 5),
+	MK(1, 0, 6),
+	MK(2, 0, 3),
+	MK(2, 2, 3),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_coal_mine_1[] = {
-	MK(1,1, 0),
-	MK(1,2, 2),
-	MK(2,0, 0),
-	MK(2,1, 2),
-	MK(1,0, 3),
-	MK(0,0, 3),
-	MK(0,1, 4),
-	MK(0,2, 4),
-	MK(2,2, 4),
+	MK(1, 1, 0),
+	MK(1, 2, 2),
+	MK(2, 0, 0),
+	MK(2, 1, 2),
+	MK(1, 0, 3),
+	MK(0, 0, 3),
+	MK(0, 1, 4),
+	MK(0, 2, 4),
+	MK(2, 2, 4),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_coal_mine_2[] = {
-	MK(0,0, 0),
-	MK(0,1, 2),
-	MK(0,2, 5),
-	MK(1,0, 3),
-	MK(1,1, 3),
-	MK(1,2, 6),
+	MK(0, 0, 0),
+	MK(0, 1, 2),
+	MK(0, 2, 5),
+	MK(1, 0, 3),
+	MK(1, 1, 3),
+	MK(1, 2, 6),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_coal_mine_3[] = {
-	MK(0,1, 0),
-	MK(0,2, 2),
-	MK(0,3, 4),
-	MK(1,0, 5),
-	MK(1,1, 0),
-	MK(1,2, 2),
-	MK(1,3, 3),
-	MK(2,0, 6),
-	MK(2,1, 4),
-	MK(2,2, 3),
+	MK(0, 1, 0),
+	MK(0, 2, 2),
+	MK(0, 3, 4),
+	MK(1, 0, 5),
+	MK(1, 1, 0),
+	MK(1, 2, 2),
+	MK(1, 3, 3),
+	MK(2, 0, 6),
+	MK(2, 1, 4),
+	MK(2, 2, 3),
 	MKEND
 };
 
@@ -64,36 +75,36 @@
 };
 
 static const IndustryTileTable _tile_table_power_station_0[] = {
-	MK(0,0, 7),
-	MK(0,1, 9),
-	MK(1,0, 7),
-	MK(1,1, 8),
-	MK(2,0, 7),
-	MK(2,1, 8),
-	MK(3,0, 10),
-	MK(3,1, 10),
+	MK(0, 0, 7),
+	MK(0, 1, 9),
+	MK(1, 0, 7),
+	MK(1, 1, 8),
+	MK(2, 0, 7),
+	MK(2, 1, 8),
+	MK(3, 0, 10),
+	MK(3, 1, 10),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_power_station_1[] = {
-	MK(0,1, 7),
-	MK(0,2, 7),
-	MK(1,0, 8),
-	MK(1,1, 8),
-	MK(1,2, 7),
-	MK(2,0, 9),
-	MK(2,1, 10),
-	MK(2,2, 9),
+	MK(0, 1, 7),
+	MK(0, 2, 7),
+	MK(1, 0, 8),
+	MK(1, 1, 8),
+	MK(1, 2, 7),
+	MK(2, 0, 9),
+	MK(2, 1, 10),
+	MK(2, 2, 9),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_power_station_2[] = {
-	MK(0,0, 7),
-	MK(0,1, 7),
-	MK(1,0, 9),
-	MK(1,1, 8),
-	MK(2,0, 10),
-	MK(2,1, 9),
+	MK(0, 0, 7),
+	MK(0, 1, 7),
+	MK(1, 0, 9),
+	MK(1, 1, 8),
+	MK(2, 0, 10),
+	MK(2, 1, 9),
 	MKEND
 };
 
@@ -104,26 +115,26 @@
 };
 
 static const IndustryTileTable _tile_table_sawmill_0[] = {
-	MK(1,0, 14),
-	MK(1,1, 12),
-	MK(1,2, 11),
-	MK(2,0, 14),
-	MK(2,1, 13),
-	MK(0,0, 15),
-	MK(0,1, 15),
-	MK(0,2, 12),
+	MK(1, 0, 14),
+	MK(1, 1, 12),
+	MK(1, 2, 11),
+	MK(2, 0, 14),
+	MK(2, 1, 13),
+	MK(0, 0, 15),
+	MK(0, 1, 15),
+	MK(0, 2, 12),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_sawmill_1[] = {
-	MK(0,0, 15),
-	MK(0,1, 11),
-	MK(0,2, 14),
-	MK(1,0, 15),
-	MK(1,1, 13),
-	MK(1,2, 12),
-	MK(2,0, 11),
-	MK(2,1, 13),
+	MK(0, 0, 15),
+	MK(0, 1, 11),
+	MK(0, 2, 14),
+	MK(1, 0, 15),
+	MK(1, 1, 13),
+	MK(1, 2, 12),
+	MK(2, 0, 11),
+	MK(2, 1, 13),
 	MKEND
 };
 
@@ -133,51 +144,51 @@
 };
 
 static const IndustryTileTable _tile_table_forest_0[] = {
-	MK(0,0, 16),
-	MK(0,1, 16),
-	MK(0,2, 16),
-	MK(0,3, 16),
-	MK(1,0, 16),
-	MK(1,1, 16),
-	MK(1,2, 16),
-	MK(1,3, 16),
-	MK(2,0, 16),
-	MK(2,1, 16),
-	MK(2,2, 16),
-	MK(2,3, 16),
-	MK(3,0, 16),
-	MK(3,1, 16),
-	MK(3,2, 16),
-	MK(3,3, 16),
-	MK(1,4, 16),
-	MK(2,4, 16),
+	MK(0, 0, 16),
+	MK(0, 1, 16),
+	MK(0, 2, 16),
+	MK(0, 3, 16),
+	MK(1, 0, 16),
+	MK(1, 1, 16),
+	MK(1, 2, 16),
+	MK(1, 3, 16),
+	MK(2, 0, 16),
+	MK(2, 1, 16),
+	MK(2, 2, 16),
+	MK(2, 3, 16),
+	MK(3, 0, 16),
+	MK(3, 1, 16),
+	MK(3, 2, 16),
+	MK(3, 3, 16),
+	MK(1, 4, 16),
+	MK(2, 4, 16),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_forest_1[] = {
-	MK(0,0, 16),
-	MK(1,0, 16),
-	MK(2,0, 16),
-	MK(3,0, 16),
-	MK(4,0, 16),
-	MK(0,1, 16),
-	MK(1,1, 16),
-	MK(2,1, 16),
-	MK(3,1, 16),
-	MK(4,1, 16),
-	MK(0,2, 16),
-	MK(1,2, 16),
-	MK(2,2, 16),
-	MK(3,2, 16),
-	MK(4,2, 16),
-	MK(0,3, 16),
-	MK(1,3, 16),
-	MK(2,3, 16),
-	MK(3,3, 16),
-	MK(4,3, 16),
-	MK(1,4, 16),
-	MK(2,4, 16),
-	MK(3,4, 16),
+	MK(0, 0, 16),
+	MK(1, 0, 16),
+	MK(2, 0, 16),
+	MK(3, 0, 16),
+	MK(4, 0, 16),
+	MK(0, 1, 16),
+	MK(1, 1, 16),
+	MK(2, 1, 16),
+	MK(3, 1, 16),
+	MK(4, 1, 16),
+	MK(0, 2, 16),
+	MK(1, 2, 16),
+	MK(2, 2, 16),
+	MK(3, 2, 16),
+	MK(4, 2, 16),
+	MK(0, 3, 16),
+	MK(1, 3, 16),
+	MK(2, 3, 16),
+	MK(3, 3, 16),
+	MK(4, 3, 16),
+	MK(1, 4, 16),
+	MK(2, 4, 16),
+	MK(3, 4, 16),
 	MKEND
 };
 
@@ -187,40 +198,40 @@
 };
 
 static const IndustryTileTable _tile_table_oil_refinery_0[] = {
-	MK(0,0, 20),
-	MK(0,1, 21),
-	MK(0,2, 22),
-	MK(0,3, 21),
-	MK(1,0, 20),
-	MK(1,1, 19),
-	MK(1,2, 22),
-	MK(1,3, 20),
-	MK(2,1, 18),
-	MK(2,2, 18),
-	MK(2,3, 18),
-	MK(3,2, 18),
-	MK(3,3, 18),
-	MK(2,0, 23),
-	MK(3,1, 23),
+	MK(0, 0, 20),
+	MK(0, 1, 21),
+	MK(0, 2, 22),
+	MK(0, 3, 21),
+	MK(1, 0, 20),
+	MK(1, 1, 19),
+	MK(1, 2, 22),
+	MK(1, 3, 20),
+	MK(2, 1, 18),
+	MK(2, 2, 18),
+	MK(2, 3, 18),
+	MK(3, 2, 18),
+	MK(3, 3, 18),
+	MK(2, 0, 23),
+	MK(3, 1, 23),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_oil_refinery_1[] = {
-	MK(0,0, 18),
-	MK(0,1, 18),
-	MK(0,2, 21),
-	MK(0,3, 22),
-	MK(0,4, 20),
-	MK(1,0, 18),
-	MK(1,1, 18),
-	MK(1,2, 19),
-	MK(1,3, 20),
-	MK(2,0, 18),
-	MK(2,1, 18),
-	MK(2,2, 19),
-	MK(2,3, 22),
-	MK(1,4, 23),
-	MK(2,4, 23),
+	MK(0, 0, 18),
+	MK(0, 1, 18),
+	MK(0, 2, 21),
+	MK(0, 3, 22),
+	MK(0, 4, 20),
+	MK(1, 0, 18),
+	MK(1, 1, 18),
+	MK(1, 2, 19),
+	MK(1, 3, 20),
+	MK(2, 0, 18),
+	MK(2, 1, 18),
+	MK(2, 2, 19),
+	MK(2, 3, 22),
+	MK(1, 4, 23),
+	MK(2, 4, 23),
 	MKEND
 };
 
@@ -230,51 +241,51 @@
 };
 
 static const IndustryTileTable _tile_table_oil_rig_0[] = {
-	MK(0,0, 24),
-	MK(0,1, 24),
-	MK(0,2, 25),
-	MK(1,0, 26),
-	MK(1,1, 27),
-	MK(1,2, 28),
-	MK(-4,-5, 255),
-	MK(-4,-4, 255),
-	MK(-4,-3, 255),
-	MK(-4,-2, 255),
-	MK(-4,-1, 255),
-	MK(-4,0, 255),
-	MK(-4,1, 255),
-	MK(-4,2, 255),
-	MK(-4,3, 255),
-	MK(-4,4, 255),
-	MK(-4,5, 255),
-	MK(-3,5, 255),
-	MK(-2,5, 255),
-	MK(-1,5, 255),
-	MK(0,6, 255),
-	MK(1,6, 255),
-	MK(2,6, 255),
-	MK(3,6, 255),
-	MK(4,6, 255),
-	MK(5,6, 255),
-	MK(5,5, 255),
-	MK(5,4, 255),
-	MK(5,3, 255),
-	MK(5,2, 255),
-	MK(5,1, 255),
-	MK(5,0, 255),
-	MK(5,-1, 255),
-	MK(5,-2, 255),
-	MK(5,-3, 255),
-	MK(5,-4, 255),
-	MK(4,-4, 255),
-	MK(3,-4, 255),
-	MK(2,-4, 255),
-	MK(1,-4, 255),
-	MK(0,-4, 255),
-	MK(-1,-5, 255),
-	MK(-2,-5, 255),
-	MK(-3,-5, 255),
-	MK(2,0, 255),
+	MK(0, 0, 24),
+	MK(0, 1, 24),
+	MK(0, 2, 25),
+	MK(1, 0, 26),
+	MK(1, 1, 27),
+	MK(1, 2, 28),
+	MK(-4, -5, 255),
+	MK(-4, -4, 255),
+	MK(-4, -3, 255),
+	MK(-4, -2, 255),
+	MK(-4, -1, 255),
+	MK(-4, 0, 255),
+	MK(-4, 1, 255),
+	MK(-4, 2, 255),
+	MK(-4, 3, 255),
+	MK(-4, 4, 255),
+	MK(-4, 5, 255),
+	MK(-3, 5, 255),
+	MK(-2, 5, 255),
+	MK(-1, 5, 255),
+	MK(0, 6, 255),
+	MK(1, 6, 255),
+	MK(2, 6, 255),
+	MK(3, 6, 255),
+	MK(4, 6, 255),
+	MK(5, 6, 255),
+	MK(5, 5, 255),
+	MK(5, 4, 255),
+	MK(5, 3, 255),
+	MK(5, 2, 255),
+	MK(5, 1, 255),
+	MK(5, 0, 255),
+	MK(5, -1, 255),
+	MK(5, -2, 255),
+	MK(5, -3, 255),
+	MK(5, -4, 255),
+	MK(4, -4, 255),
+	MK(3, -4, 255),
+	MK(2, -4, 255),
+	MK(1, -4, 255),
+	MK(0, -4, 255),
+	MK(-1, -5, 255),
+	MK(-2, -5, 255),
+	MK(-3, -5, 255),
+	MK(2, 0, 255),
 	MKEND
 };
 
@@ -283,34 +294,34 @@
 };
 
 static const IndustryTileTable _tile_table_factory_0[] = {
-	MK(0,0, 39),
-	MK(0,1, 40),
-	MK(1,0, 41),
-	MK(1,1, 42),
-	MK(0,2, 39),
-	MK(0,3, 40),
-	MK(1,2, 41),
-	MK(1,3, 42),
-	MK(2,1, 39),
-	MK(2,2, 40),
-	MK(3,1, 41),
-	MK(3,2, 42),
+	MK(0, 0, 39),
+	MK(0, 1, 40),
+	MK(1, 0, 41),
+	MK(1, 1, 42),
+	MK(0, 2, 39),
+	MK(0, 3, 40),
+	MK(1, 2, 41),
+	MK(1, 3, 42),
+	MK(2, 1, 39),
+	MK(2, 2, 40),
+	MK(3, 1, 41),
+	MK(3, 2, 42),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_factory_1[] = {
-	MK(0,0, 39),
-	MK(0,1, 40),
-	MK(1,0, 41),
-	MK(1,1, 42),
-	MK(2,0, 39),
-	MK(2,1, 40),
-	MK(3,0, 41),
-	MK(3,1, 42),
-	MK(1,2, 39),
-	MK(1,3, 40),
-	MK(2,2, 41),
-	MK(2,3, 42),
+	MK(0, 0, 39),
+	MK(0, 1, 40),
+	MK(1, 0, 41),
+	MK(1, 1, 42),
+	MK(2, 0, 39),
+	MK(2, 1, 40),
+	MK(3, 0, 41),
+	MK(3, 1, 42),
+	MK(1, 2, 39),
+	MK(1, 3, 40),
+	MK(2, 2, 41),
+	MK(2, 3, 42),
 	MKEND
 };
 
@@ -320,34 +331,34 @@
 };
 
 static const IndustryTileTable _tile_table_printing_works_0[] = {
-	MK(0,0, 43),
-	MK(0,1, 44),
-	MK(1,0, 45),
-	MK(1,1, 46),
-	MK(0,2, 43),
-	MK(0,3, 44),
-	MK(1,2, 45),
-	MK(1,3, 46),
-	MK(2,1, 43),
-	MK(2,2, 44),
-	MK(3,1, 45),
-	MK(3,2, 46),
+	MK(0, 0, 43),
+	MK(0, 1, 44),
+	MK(1, 0, 45),
+	MK(1, 1, 46),
+	MK(0, 2, 43),
+	MK(0, 3, 44),
+	MK(1, 2, 45),
+	MK(1, 3, 46),
+	MK(2, 1, 43),
+	MK(2, 2, 44),
+	MK(3, 1, 45),
+	MK(3, 2, 46),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_printing_works_1[] = {
-	MK(0,0, 43),
-	MK(0,1, 44),
-	MK(1,0, 45),
-	MK(1,1, 46),
-	MK(2,0, 43),
-	MK(2,1, 44),
-	MK(3,0, 45),
-	MK(3,1, 46),
-	MK(1,2, 43),
-	MK(1,3, 44),
-	MK(2,2, 45),
-	MK(2,3, 46),
+	MK(0, 0, 43),
+	MK(0, 1, 44),
+	MK(1, 0, 45),
+	MK(1, 1, 46),
+	MK(2, 0, 43),
+	MK(2, 1, 44),
+	MK(3, 0, 45),
+	MK(3, 1, 46),
+	MK(1, 2, 43),
+	MK(1, 3, 44),
+	MK(2, 2, 45),
+	MK(2, 3, 46),
 	MKEND
 };
 
@@ -357,36 +368,36 @@
 };
 
 static const IndustryTileTable _tile_table_steel_mill_0[] = {
-	MK(2,1, 52),
-	MK(2,2, 53),
-	MK(3,1, 54),
-	MK(3,2, 55),
-	MK(0,0, 56),
-	MK(1,0, 57),
-	MK(0,1, 56),
-	MK(1,1, 57),
-	MK(0,2, 56),
-	MK(1,2, 57),
-	MK(2,0, 56),
-	MK(3,0, 57),
+	MK(2, 1, 52),
+	MK(2, 2, 53),
+	MK(3, 1, 54),
+	MK(3, 2, 55),
+	MK(0, 0, 56),
+	MK(1, 0, 57),
+	MK(0, 1, 56),
+	MK(1, 1, 57),
+	MK(0, 2, 56),
+	MK(1, 2, 57),
+	MK(2, 0, 56),
+	MK(3, 0, 57),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_steel_mill_1[] = {
-	MK(0,0, 52),
-	MK(0,1, 53),
-	MK(1,0, 54),
-	MK(1,1, 55),
-	MK(2,0, 52),
-	MK(2,1, 53),
-	MK(3,0, 54),
-	MK(3,1, 55),
-	MK(0,2, 56),
-	MK(1,2, 57),
-	MK(2,2, 56),
-	MK(3,2, 57),
-	MK(1,3, 56),
-	MK(2,3, 57),
+	MK(0, 0, 52),
+	MK(0, 1, 53),
+	MK(1, 0, 54),
+	MK(1, 1, 55),
+	MK(2, 0, 52),
+	MK(2, 1, 53),
+	MK(3, 0, 54),
+	MK(3, 1, 55),
+	MK(0, 2, 56),
+	MK(1, 2, 57),
+	MK(2, 2, 56),
+	MK(3, 2, 57),
+	MK(1, 3, 56),
+	MK(2, 3, 57),
 	MKEND
 };
 
@@ -396,47 +407,47 @@
 };
 
 static const IndustryTileTable _tile_table_farm_0[] = {
-	MK(1,0, 33),
-	MK(1,1, 34),
-	MK(1,2, 36),
-	MK(0,0, 37),
-	MK(0,1, 37),
-	MK(0,2, 36),
-	MK(2,0, 35),
-	MK(2,1, 38),
-	MK(2,2, 38),
+	MK(1, 0, 33),
+	MK(1, 1, 34),
+	MK(1, 2, 36),
+	MK(0, 0, 37),
+	MK(0, 1, 37),
+	MK(0, 2, 36),
+	MK(2, 0, 35),
+	MK(2, 1, 38),
+	MK(2, 2, 38),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_farm_1[] = {
-	MK(1,1, 33),
-	MK(1,2, 34),
-	MK(0,0, 35),
-	MK(0,1, 36),
-	MK(0,2, 36),
-	MK(0,3, 35),
-	MK(1,0, 37),
-	MK(1,3, 38),
-	MK(2,0, 37),
-	MK(2,1, 37),
-	MK(2,2, 38),
-	MK(2,3, 38),
+	MK(1, 1, 33),
+	MK(1, 2, 34),
+	MK(0, 0, 35),
+	MK(0, 1, 36),
+	MK(0, 2, 36),
+	MK(0, 3, 35),
+	MK(1, 0, 37),
+	MK(1, 3, 38),
+	MK(2, 0, 37),
+	MK(2, 1, 37),
+	MK(2, 2, 38),
+	MK(2, 3, 38),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_farm_2[] = {
-	MK(2,0, 33),
-	MK(2,1, 34),
-	MK(0,0, 36),
-	MK(0,1, 36),
-	MK(0,2, 37),
-	MK(0,3, 37),
-	MK(1,0, 35),
-	MK(1,1, 38),
-	MK(1,2, 38),
-	MK(1,3, 37),
-	MK(2,2, 37),
-	MK(2,3, 35),
+	MK(2, 0, 33),
+	MK(2, 1, 34),
+	MK(0, 0, 36),
+	MK(0, 1, 36),
+	MK(0, 2, 37),
+	MK(0, 3, 37),
+	MK(1, 0, 35),
+	MK(1, 1, 38),
+	MK(1, 2, 38),
+	MK(1, 3, 37),
+	MK(2, 2, 37),
+	MK(2, 3, 35),
 	MKEND
 };
 
@@ -447,27 +458,27 @@
 };
 
 static const IndustryTileTable _tile_table_copper_mine_0[] = {
-	MK(0,0, 47),
-	MK(0,1, 49),
-	MK(0,2, 51),
-	MK(1,0, 47),
-	MK(1,1, 49),
-	MK(1,2, 50),
-	MK(2,0, 51),
-	MK(2,1, 51),
+	MK(0, 0, 47),
+	MK(0, 1, 49),
+	MK(0, 2, 51),
+	MK(1, 0, 47),
+	MK(1, 1, 49),
+	MK(1, 2, 50),
+	MK(2, 0, 51),
+	MK(2, 1, 51),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_copper_mine_1[] = {
-	MK(0,0, 50),
-	MK(0,1, 47),
-	MK(0,2, 49),
-	MK(1,0, 47),
-	MK(1,1, 49),
-	MK(1,2, 51),
-	MK(2,0, 51),
-	MK(2,1, 47),
-	MK(2,2, 49),
+	MK(0, 0, 50),
+	MK(0, 1, 47),
+	MK(0, 2, 49),
+	MK(1, 0, 47),
+	MK(1, 1, 49),
+	MK(1, 2, 51),
+	MK(2, 0, 51),
+	MK(2, 1, 47),
+	MK(2, 2, 49),
 	MKEND
 };
 
@@ -477,20 +488,20 @@
 };
 
 static const IndustryTileTable _tile_table_oil_well_0[] = {
-	MK(0,0, 29),
-	MK(1,0, 29),
-	MK(2,0, 29),
-	MK(0,1, 29),
-	MK(0,2, 29),
+	MK(0, 0, 29),
+	MK(1, 0, 29),
+	MK(2, 0, 29),
+	MK(0, 1, 29),
+	MK(0, 2, 29),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_oil_well_1[] = {
-	MK(0,0, 29),
-	MK(1,0, 29),
-	MK(1,1, 29),
-	MK(2,2, 29),
-	MK(2,3, 29),
+	MK(0, 0, 29),
+	MK(1, 0, 29),
+	MK(1, 1, 29),
+	MK(2, 2, 29),
+	MK(2, 3, 29),
 	MKEND
 };
 
@@ -500,8 +511,8 @@
 };
 
 static const IndustryTileTable _tile_table_bank_0[] = {
-	MK(0,0, 58),
-	MK(1,0, 59),
+	MK(0, 0, 58),
+	MK(1, 0, 59),
 	MKEND
 };
 
@@ -510,36 +521,36 @@
 };
 
 static const IndustryTileTable _tile_table_food_process_0[] = {
-	MK(0,0, 60),
-	MK(1,0, 60),
-	MK(2,0, 60),
-	MK(0,1, 60),
-	MK(1,1, 60),
-	MK(2,1, 60),
-	MK(0,2, 61),
-	MK(1,2, 61),
-	MK(2,2, 63),
-	MK(0,3, 62),
-	MK(1,3, 62),
-	MK(2,3, 63),
+	MK(0, 0, 60),
+	MK(1, 0, 60),
+	MK(2, 0, 60),
+	MK(0, 1, 60),
+	MK(1, 1, 60),
+	MK(2, 1, 60),
+	MK(0, 2, 61),
+	MK(1, 2, 61),
+	MK(2, 2, 63),
+	MK(0, 3, 62),
+	MK(1, 3, 62),
+	MK(2, 3, 63),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_food_process_1[] = {
-	MK(0,0, 61),
-	MK(1,0, 60),
-	MK(2,0, 61),
-	MK(3,0, 61),
-	MK(0,1, 62),
-	MK(1,1, 63),
-	MK(2,1, 63),
-	MK(3,1, 63),
-	MK(0,2, 60),
-	MK(1,2, 60),
-	MK(2,2, 60),
-	MK(3,2, 60),
-	MK(0,3, 62),
-	MK(1,3, 62),
+	MK(0, 0, 61),
+	MK(1, 0, 60),
+	MK(2, 0, 61),
+	MK(3, 0, 61),
+	MK(0, 1, 62),
+	MK(1, 1, 63),
+	MK(2, 1, 63),
+	MK(3, 1, 63),
+	MK(0, 2, 60),
+	MK(1, 2, 60),
+	MK(2, 2, 60),
+	MK(3, 2, 60),
+	MK(0, 3, 62),
+	MK(1, 3, 62),
 	MKEND
 };
 
@@ -549,18 +560,18 @@
 };
 
 static const IndustryTileTable _tile_table_paper_mill_0[] = {
-	MK(0,0, 64),
-	MK(1,0, 65),
-	MK(2,0, 66),
-	MK(3,0, 67),
-	MK(0,1, 68),
-	MK(1,1, 69),
-	MK(2,1, 67),
-	MK(3,1, 67),
-	MK(0,2, 66),
-	MK(1,2, 71),
-	MK(2,2, 71),
-	MK(3,2, 70),
+	MK(0, 0, 64),
+	MK(1, 0, 65),
+	MK(2, 0, 66),
+	MK(3, 0, 67),
+	MK(0, 1, 68),
+	MK(1, 1, 69),
+	MK(2, 1, 67),
+	MK(3, 1, 67),
+	MK(0, 2, 66),
+	MK(1, 2, 71),
+	MK(2, 2, 71),
+	MK(3, 2, 70),
 	MKEND
 };
 
@@ -569,22 +580,22 @@
 };
 
 static const IndustryTileTable _tile_table_gold_mine_0[] = {
-	MK(0,0, 72),
-	MK(0,1, 73),
-	MK(0,2, 74),
-	MK(0,3, 75),
-	MK(1,0, 76),
-	MK(1,1, 77),
-	MK(1,2, 78),
-	MK(1,3, 79),
-	MK(2,0, 80),
-	MK(2,1, 81),
-	MK(2,2, 82),
-	MK(2,3, 83),
-	MK(3,0, 84),
-	MK(3,1, 85),
-	MK(3,2, 86),
-	MK(3,3, 87),
+	MK(0, 0, 72),
+	MK(0, 1, 73),
+	MK(0, 2, 74),
+	MK(0, 3, 75),
+	MK(1, 0, 76),
+	MK(1, 1, 77),
+	MK(1, 2, 78),
+	MK(1, 3, 79),
+	MK(2, 0, 80),
+	MK(2, 1, 81),
+	MK(2, 2, 82),
+	MK(2, 3, 83),
+	MK(3, 0, 84),
+	MK(3, 1, 85),
+	MK(3, 2, 86),
+	MK(3, 3, 87),
 	MKEND
 };
 
@@ -593,8 +604,8 @@
 };
 
 static const IndustryTileTable _tile_table_bank2_0[] = {
-	MK(0,0, 89),
-	MK(1,0, 90),
+	MK(0, 0, 89),
+	MK(1, 0, 90),
 	MKEND
 };
 
@@ -603,15 +614,15 @@
 };
 
 static const IndustryTileTable _tile_table_diamond_mine_0[] = {
-	MK(0,0, 91),
-	MK(0,1, 92),
-	MK(0,2, 93),
-	MK(1,0, 94),
-	MK(1,1, 95),
-	MK(1,2, 96),
-	MK(2,0, 97),
-	MK(2,1, 98),
-	MK(2,2, 99),
+	MK(0, 0, 91),
+	MK(0, 1, 92),
+	MK(0, 2, 93),
+	MK(1, 0, 94),
+	MK(1, 1, 95),
+	MK(1, 2, 96),
+	MK(2, 0, 97),
+	MK(2, 1, 98),
+	MK(2, 2, 99),
 	MKEND
 };
 
@@ -620,22 +631,22 @@
 };
 
 static const IndustryTileTable _tile_table_iron_mine_0[] = {
-	MK(0,0, 100),
-	MK(0,1, 101),
-	MK(0,2, 102),
-	MK(0,3, 103),
-	MK(1,0, 104),
-	MK(1,1, 105),
-	MK(1,2, 106),
-	MK(1,3, 107),
-	MK(2,0, 108),
-	MK(2,1, 109),
-	MK(2,2, 110),
-	MK(2,3, 111),
-	MK(3,0, 112),
-	MK(3,1, 113),
-	MK(3,2, 114),
-	MK(3,3, 115),
+	MK(0, 0, 100),
+	MK(0, 1, 101),
+	MK(0, 2, 102),
+	MK(0, 3, 103),
+	MK(1, 0, 104),
+	MK(1, 1, 105),
+	MK(1, 2, 106),
+	MK(1, 3, 107),
+	MK(2, 0, 108),
+	MK(2, 1, 109),
+	MK(2, 2, 110),
+	MK(2, 3, 111),
+	MK(3, 0, 112),
+	MK(3, 1, 113),
+	MK(3, 2, 114),
+	MK(3, 3, 115),
 	MKEND
 };
 
@@ -644,26 +655,26 @@
 };
 
 static const IndustryTileTable _tile_table_fruit_plantation_0[] = {
-	MK(0,0, 116),
-	MK(0,1, 116),
-	MK(0,2, 116),
-	MK(0,3, 116),
-	MK(1,0, 116),
-	MK(1,1, 116),
-	MK(1,2, 116),
-	MK(1,3, 116),
-	MK(2,0, 116),
-	MK(2,1, 116),
-	MK(2,2, 116),
-	MK(2,3, 116),
-	MK(3,0, 116),
-	MK(3,1, 116),
-	MK(3,2, 116),
-	MK(3,3, 116),
-	MK(4,0, 116),
-	MK(4,1, 116),
-	MK(4,2, 116),
-	MK(4,3, 116),
+	MK(0, 0, 116),
+	MK(0, 1, 116),
+	MK(0, 2, 116),
+	MK(0, 3, 116),
+	MK(1, 0, 116),
+	MK(1, 1, 116),
+	MK(1, 2, 116),
+	MK(1, 3, 116),
+	MK(2, 0, 116),
+	MK(2, 1, 116),
+	MK(2, 2, 116),
+	MK(2, 3, 116),
+	MK(3, 0, 116),
+	MK(3, 1, 116),
+	MK(3, 2, 116),
+	MK(3, 3, 116),
+	MK(4, 0, 116),
+	MK(4, 1, 116),
+	MK(4, 2, 116),
+	MK(4, 3, 116),
 	MKEND
 };
 
@@ -672,26 +683,26 @@
 };
 
 static const IndustryTileTable _tile_table_rubber_plantation_0[] = {
-	MK(0,0, 117),
-	MK(0,1, 117),
-	MK(0,2, 117),
-	MK(0,3, 117),
-	MK(1,0, 117),
-	MK(1,1, 117),
-	MK(1,2, 117),
-	MK(1,3, 117),
-	MK(2,0, 117),
-	MK(2,1, 117),
-	MK(2,2, 117),
-	MK(2,3, 117),
-	MK(3,0, 117),
-	MK(3,1, 117),
-	MK(3,2, 117),
-	MK(3,3, 117),
-	MK(4,0, 117),
-	MK(4,1, 117),
-	MK(4,2, 117),
-	MK(4,3, 117),
+	MK(0, 0, 117),
+	MK(0, 1, 117),
+	MK(0, 2, 117),
+	MK(0, 3, 117),
+	MK(1, 0, 117),
+	MK(1, 1, 117),
+	MK(1, 2, 117),
+	MK(1, 3, 117),
+	MK(2, 0, 117),
+	MK(2, 1, 117),
+	MK(2, 2, 117),
+	MK(2, 3, 117),
+	MK(3, 0, 117),
+	MK(3, 1, 117),
+	MK(3, 2, 117),
+	MK(3, 3, 117),
+	MK(4, 0, 117),
+	MK(4, 1, 117),
+	MK(4, 2, 117),
+	MK(4, 3, 117),
 	MKEND
 };
 
@@ -700,10 +711,10 @@
 };
 
 static const IndustryTileTable _tile_table_water_supply_0[] = {
-	MK(0,0, 118),
-	MK(0,1, 119),
-	MK(1,0, 118),
-	MK(1,1, 119),
+	MK(0, 0, 118),
+	MK(0, 1, 119),
+	MK(1, 0, 118),
+	MK(1, 1, 119),
 	MKEND
 };
 
@@ -712,7 +723,7 @@
 };
 
 static const IndustryTileTable _tile_table_water_tower_0[] = {
-	MK(0,0, 120),
+	MK(0, 0, 120),
 	MKEND
 };
 
@@ -721,26 +732,26 @@
 };
 
 static const IndustryTileTable _tile_table_factory2_0[] = {
-	MK(0,0, 121),
-	MK(0,1, 122),
-	MK(1,0, 123),
-	MK(1,1, 124),
-	MK(0,2, 121),
-	MK(0,3, 122),
-	MK(1,2, 123),
-	MK(1,3, 124),
+	MK(0, 0, 121),
+	MK(0, 1, 122),
+	MK(1, 0, 123),
+	MK(1, 1, 124),
+	MK(0, 2, 121),
+	MK(0, 3, 122),
+	MK(1, 2, 123),
+	MK(1, 3, 124),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_factory2_1[] = {
-	MK(0,0, 121),
-	MK(0,1, 122),
-	MK(1,0, 123),
-	MK(1,1, 124),
-	MK(2,0, 121),
-	MK(2,1, 122),
-	MK(3,0, 123),
-	MK(3,1, 124),
+	MK(0, 0, 121),
+	MK(0, 1, 122),
+	MK(1, 0, 123),
+	MK(1, 1, 124),
+	MK(2, 0, 121),
+	MK(2, 1, 122),
+	MK(3, 0, 123),
+	MK(3, 1, 124),
 	MKEND
 };
 
@@ -750,47 +761,47 @@
 };
 
 static const IndustryTileTable _tile_table_farm2_0[] = {
-	MK(1,0, 33),
-	MK(1,1, 34),
-	MK(1,2, 36),
-	MK(0,0, 37),
-	MK(0,1, 37),
-	MK(0,2, 36),
-	MK(2,0, 35),
-	MK(2,1, 38),
-	MK(2,2, 38),
+	MK(1, 0, 33),
+	MK(1, 1, 34),
+	MK(1, 2, 36),
+	MK(0, 0, 37),
+	MK(0, 1, 37),
+	MK(0, 2, 36),
+	MK(2, 0, 35),
+	MK(2, 1, 38),
+	MK(2, 2, 38),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_farm2_1[] = {
-	MK(1,1, 33),
-	MK(1,2, 34),
-	MK(0,0, 35),
-	MK(0,1, 36),
-	MK(0,2, 36),
-	MK(0,3, 35),
-	MK(1,0, 37),
-	MK(1,3, 38),
-	MK(2,0, 37),
-	MK(2,1, 37),
-	MK(2,2, 38),
-	MK(2,3, 38),
+	MK(1, 1, 33),
+	MK(1, 2, 34),
+	MK(0, 0, 35),
+	MK(0, 1, 36),
+	MK(0, 2, 36),
+	MK(0, 3, 35),
+	MK(1, 0, 37),
+	MK(1, 3, 38),
+	MK(2, 0, 37),
+	MK(2, 1, 37),
+	MK(2, 2, 38),
+	MK(2, 3, 38),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_farm2_2[] = {
-	MK(2,0, 33),
-	MK(2,1, 34),
-	MK(0,0, 36),
-	MK(0,1, 36),
-	MK(0,2, 37),
-	MK(0,3, 37),
-	MK(1,0, 35),
-	MK(1,1, 38),
-	MK(1,2, 38),
-	MK(1,3, 37),
-	MK(2,2, 37),
-	MK(2,3, 35),
+	MK(2, 0, 33),
+	MK(2, 1, 34),
+	MK(0, 0, 36),
+	MK(0, 1, 36),
+	MK(0, 2, 37),
+	MK(0, 3, 37),
+	MK(1, 0, 35),
+	MK(1, 1, 38),
+	MK(1, 2, 38),
+	MK(1, 3, 37),
+	MK(2, 2, 37),
+	MK(2, 3, 35),
 	MKEND
 };
 
@@ -801,10 +812,10 @@
 };
 
 static const IndustryTileTable _tile_table_lumber_mill_0[] = {
-	MK(0,0, 125),
-	MK(0,1, 126),
-	MK(1,0, 127),
-	MK(1,1, 128),
+	MK(0, 0, 125),
+	MK(0, 1, 126),
+	MK(1, 0, 127),
+	MK(1, 1, 128),
 	MKEND
 };
 
@@ -813,51 +824,51 @@
 };
 
 static const IndustryTileTable _tile_table_cotton_candy_0[] = {
-	MK(0,0, 129),
-	MK(0,1, 129),
-	MK(0,2, 129),
-	MK(0,3, 129),
-	MK(1,0, 129),
-	MK(1,1, 129),
-	MK(1,2, 129),
-	MK(1,3, 129),
-	MK(2,0, 129),
-	MK(2,1, 129),
-	MK(2,2, 129),
-	MK(2,3, 129),
-	MK(3,0, 129),
-	MK(3,1, 129),
-	MK(3,2, 129),
-	MK(3,3, 129),
-	MK(1,4, 129),
-	MK(2,4, 129),
+	MK(0, 0, 129),
+	MK(0, 1, 129),
+	MK(0, 2, 129),
+	MK(0, 3, 129),
+	MK(1, 0, 129),
+	MK(1, 1, 129),
+	MK(1, 2, 129),
+	MK(1, 3, 129),
+	MK(2, 0, 129),
+	MK(2, 1, 129),
+	MK(2, 2, 129),
+	MK(2, 3, 129),
+	MK(3, 0, 129),
+	MK(3, 1, 129),
+	MK(3, 2, 129),
+	MK(3, 3, 129),
+	MK(1, 4, 129),
+	MK(2, 4, 129),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_cotton_candy_1[] = {
-	MK(0,0, 129),
-	MK(1,0, 129),
-	MK(2,0, 129),
-	MK(3,0, 129),
-	MK(4,0, 129),
-	MK(0,1, 129),
-	MK(1,1, 129),
-	MK(2,1, 129),
-	MK(3,1, 129),
-	MK(4,1, 129),
-	MK(0,2, 129),
-	MK(1,2, 129),
-	MK(2,2, 129),
-	MK(3,2, 129),
-	MK(4,2, 129),
-	MK(0,3, 129),
-	MK(1,3, 129),
-	MK(2,3, 129),
-	MK(3,3, 129),
-	MK(4,3, 129),
-	MK(1,4, 129),
-	MK(2,4, 129),
-	MK(3,4, 129),
+	MK(0, 0, 129),
+	MK(1, 0, 129),
+	MK(2, 0, 129),
+	MK(3, 0, 129),
+	MK(4, 0, 129),
+	MK(0, 1, 129),
+	MK(1, 1, 129),
+	MK(2, 1, 129),
+	MK(3, 1, 129),
+	MK(4, 1, 129),
+	MK(0, 2, 129),
+	MK(1, 2, 129),
+	MK(2, 2, 129),
+	MK(3, 2, 129),
+	MK(4, 2, 129),
+	MK(0, 3, 129),
+	MK(1, 3, 129),
+	MK(2, 3, 129),
+	MK(3, 3, 129),
+	MK(4, 3, 129),
+	MK(1, 4, 129),
+	MK(2, 4, 129),
+	MK(3, 4, 129),
 	MKEND
 };
 
@@ -867,34 +878,34 @@
 };
 
 static const IndustryTileTable _tile_table_candy_factory_0[] = {
-	MK(0,0, 131),
-	MK(0,1, 132),
-	MK(1,0, 133),
-	MK(1,1, 134),
-	MK(0,2, 131),
-	MK(0,3, 132),
-	MK(1,2, 133),
-	MK(1,3, 134),
-	MK(2,1, 131),
-	MK(2,2, 132),
-	MK(3,1, 133),
-	MK(3,2, 134),
+	MK(0, 0, 131),
+	MK(0, 1, 132),
+	MK(1, 0, 133),
+	MK(1, 1, 134),
+	MK(0, 2, 131),
+	MK(0, 3, 132),
+	MK(1, 2, 133),
+	MK(1, 3, 134),
+	MK(2, 1, 131),
+	MK(2, 2, 132),
+	MK(3, 1, 133),
+	MK(3, 2, 134),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_candy_factory_1[] = {
-	MK(0,0, 131),
-	MK(0,1, 132),
-	MK(1,0, 133),
-	MK(1,1, 134),
-	MK(2,0, 131),
-	MK(2,1, 132),
-	MK(3,0, 133),
-	MK(3,1, 134),
-	MK(1,2, 131),
-	MK(1,3, 132),
-	MK(2,2, 133),
-	MK(2,3, 134),
+	MK(0, 0, 131),
+	MK(0, 1, 132),
+	MK(1, 0, 133),
+	MK(1, 1, 134),
+	MK(2, 0, 131),
+	MK(2, 1, 132),
+	MK(3, 0, 133),
+	MK(3, 1, 134),
+	MK(1, 2, 131),
+	MK(1, 3, 132),
+	MK(2, 2, 133),
+	MK(2, 3, 134),
 	MKEND
 };
 
@@ -904,26 +915,26 @@
 };
 
 static const IndustryTileTable _tile_table_battery_farm_0[] = {
-	MK(0,0, 135),
-	MK(0,1, 135),
-	MK(0,2, 135),
-	MK(0,3, 135),
-	MK(1,0, 135),
-	MK(1,1, 135),
-	MK(1,2, 135),
-	MK(1,3, 135),
-	MK(2,0, 135),
-	MK(2,1, 135),
-	MK(2,2, 135),
-	MK(2,3, 135),
-	MK(3,0, 135),
-	MK(3,1, 135),
-	MK(3,2, 135),
-	MK(3,3, 135),
-	MK(4,0, 135),
-	MK(4,1, 135),
-	MK(4,2, 135),
-	MK(4,3, 135),
+	MK(0, 0, 135),
+	MK(0, 1, 135),
+	MK(0, 2, 135),
+	MK(0, 3, 135),
+	MK(1, 0, 135),
+	MK(1, 1, 135),
+	MK(1, 2, 135),
+	MK(1, 3, 135),
+	MK(2, 0, 135),
+	MK(2, 1, 135),
+	MK(2, 2, 135),
+	MK(2, 3, 135),
+	MK(3, 0, 135),
+	MK(3, 1, 135),
+	MK(3, 2, 135),
+	MK(3, 3, 135),
+	MK(4, 0, 135),
+	MK(4, 1, 135),
+	MK(4, 2, 135),
+	MK(4, 3, 135),
 	MKEND
 };
 
@@ -932,25 +943,25 @@
 };
 
 static const IndustryTileTable _tile_table_cola_wells_0[] = {
-	MK(0,0, 137),
-	MK(0,1, 137),
-	MK(0,2, 137),
-	MK(1,0, 137),
-	MK(1,1, 137),
-	MK(1,2, 137),
-	MK(2,1, 137),
-	MK(2,2, 137),
+	MK(0, 0, 137),
+	MK(0, 1, 137),
+	MK(0, 2, 137),
+	MK(1, 0, 137),
+	MK(1, 1, 137),
+	MK(1, 2, 137),
+	MK(2, 1, 137),
+	MK(2, 2, 137),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_cola_wells_1[] = {
-	MK(0,1, 137),
-	MK(0,2, 137),
-	MK(0,3, 137),
-	MK(1,0, 137),
-	MK(1,1, 137),
-	MK(1,2, 137),
-	MK(2,1, 137),
+	MK(0, 1, 137),
+	MK(0, 2, 137),
+	MK(0, 3, 137),
+	MK(1, 0, 137),
+	MK(1, 1, 137),
+	MK(1, 2, 137),
+	MK(2, 1, 137),
 	MKEND
 };
 
@@ -960,10 +971,10 @@
 };
 
 static const IndustryTileTable _tile_table_toy_shop_0[] = {
-	MK(0,0, 138),
-	MK(0,1, 139),
-	MK(1,0, 140),
-	MK(1,1, 141),
+	MK(0, 0, 138),
+	MK(0, 1, 139),
+	MK(1, 0, 140),
+	MK(1, 1, 141),
 	MKEND
 };
 
@@ -972,14 +983,14 @@
 };
 
 static const IndustryTileTable _tile_table_toy_factory_0[] = {
-	MK(0,0, 147),
-	MK(0,1, 142),
-	MK(1,0, 147),
-	MK(1,1, 143),
-	MK(2,0, 147),
-	MK(2,1, 144),
-	MK(3,0, 146),
-	MK(3,1, 145),
+	MK(0, 0, 147),
+	MK(0, 1, 142),
+	MK(1, 0, 147),
+	MK(1, 1, 143),
+	MK(2, 0, 147),
+	MK(2, 1, 144),
+	MK(3, 0, 146),
+	MK(3, 1, 145),
 	MKEND
 };
 
@@ -988,16 +999,16 @@
 };
 
 static const IndustryTileTable _tile_table_plastic_fountain_0[] = {
-	MK(0,0, 148),
-	MK(0,1, 151),
-	MK(0,2, 154),
+	MK(0, 0, 148),
+	MK(0, 1, 151),
+	MK(0, 2, 154),
 	MKEND
 };
 
 static const IndustryTileTable _tile_table_plastic_fountain_1[] = {
-	MK(0,0, 148),
-	MK(1,0, 151),
-	MK(2,0, 154),
+	MK(0, 0, 148),
+	MK(1, 0, 151),
+	MK(2, 0, 154),
 	MKEND
 };
 
@@ -1007,10 +1018,10 @@
 };
 
 static const IndustryTileTable _tile_table_fizzy_drink_0[] = {
-	MK(0,0, 156),
-	MK(0,1, 157),
-	MK(1,0, 158),
-	MK(1,1, 159),
+	MK(0, 0, 156),
+	MK(0, 1, 157),
+	MK(1, 0, 158),
+	MK(1, 1, 159),
 	MKEND
 };
 
@@ -1019,18 +1030,18 @@
 };
 
 static const IndustryTileTable _tile_table_bubble_generator_0[] = {
-	MK(0,0, 163),
-	MK(0,1, 160),
-	MK(1,0, 163),
-	MK(1,1, 161),
-	MK(2,0, 163),
-	MK(2,1, 162),
-	MK(0,2, 163),
-	MK(0,3, 160),
-	MK(1,2, 163),
-	MK(1,3, 161),
-	MK(2,2, 163),
-	MK(2,3, 162),
+	MK(0, 0, 163),
+	MK(0, 1, 160),
+	MK(1, 0, 163),
+	MK(1, 1, 161),
+	MK(2, 0, 163),
+	MK(2, 1, 162),
+	MK(0, 2, 163),
+	MK(0, 3, 160),
+	MK(1, 2, 163),
+	MK(1, 3, 161),
+	MK(2, 2, 163),
+	MK(2, 3, 162),
 	MKEND
 };
 
@@ -1039,9 +1050,9 @@
 };
 
 static const IndustryTileTable _tile_table_toffee_quarry_0[] = {
-	MK(0,0, 164),
-	MK(1,0, 165),
-	MK(2,0, 166),
+	MK(0, 0, 164),
+	MK(1, 0, 165),
+	MK(2, 0, 166),
 	MKEND
 };
 
@@ -1050,14 +1061,14 @@
 };
 
 static const IndustryTileTable _tile_table_sugar_mine_0[] = {
-	MK(0,0, 167),
-	MK(0,1, 168),
-	MK(1,0, 169),
-	MK(1,1, 170),
-	MK(2,0, 171),
-	MK(2,1, 172),
-	MK(3,0, 173),
-	MK(3,1, 174),
+	MK(0, 0, 167),
+	MK(0, 1, 168),
+	MK(1, 0, 169),
+	MK(1, 1, 170),
+	MK(2, 0, 171),
+	MK(2, 1, 172),
+	MK(3, 0, 173),
+	MK(3, 1, 174),
 	MKEND
 };
 
@@ -1068,7 +1079,42 @@
 #undef MK
 #undef MKEND
 
-#define MK(tbl, d, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col,\
+/**
+ * Writes the properties of an industry into the IndustrySpec struct.
+ * @param tbl  tile table
+ * @param d    cost multiplier
+ * @param ai1  appear chance ingame - temperate
+ * @param ai2  appear chance ingame - arctic
+ * @param ai3  appear chance ingame - tropic
+ * @param ai4  appear chance ingame - toyland
+ * @param ag1  appear chance random creation - temperate
+ * @param ag2  appear chance random creation - arctic
+ * @param ag3  appear chance random creation - tropic
+ * @param ag4  appear chance random creation - toyland
+ * @param col  map colour
+ * @param c1   industry proximity refusal - 1st
+ * @param c2   industry proximity refusal - 2nd
+ * @param c3   industry proximity refusal - 3th
+ * @param proc check procedure index
+ * @param p1   produce cargo 1
+ * @param r1   rate of production 1
+ * @param p2   produce cargo 2
+ * @param r2   rate of production 1
+ * @param m    minimum cargo moved to station
+ * @param a1   accepted cargo 1
+ * @param a2   accepted cargo 2
+ * @param a3   accepted cargo 3
+ * @param pr   industry life (actually, the same as extractive, organic, processing in ttdpatch's specs)
+ * @param clim climate availaility
+ * @param bev  industry behaviour
+ * @param in   name
+ * @param intx text while building
+ * @param s1   text for closure
+ * @param s2   text for production up
+ * @param s3   text for production down
+ */
+
+#define MI(tbl, d, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \
            c1, c2, c3, proc, p1, r1, p2, r2, m, a1, a2, a3, pr, clim, bev, in, intx, s1, s2, s3) \
 	{tbl, lengthof(tbl), d, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m,            \
 	 {a1, a2, a3}, pr, clim, bev, col, in, intx, s1, s2, s3, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, 0, 0, 0, 0}
@@ -1083,7 +1129,7 @@
 	   industry behaviours
 	   industry name                           building text
 	   messages : Closure                      production up                      production down   */
-	MK(_tile_table_coal_mine,                  210,              2, 3, 0, 0,    8, 8, 0, 0,        215,
+	MI(_tile_table_coal_mine,                  210,              2, 3, 0, 0,    8, 8, 0, 0,        215,
 	   IT_POWER_STATION,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_COAL,       15, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1092,7 +1138,7 @@
 	   STR_4802_COAL_MINE,                     STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4836_NEW_COAL_SEAM_FOUND_AT,   STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_power_station,              30,               2, 2, 0, 0,    5, 5, 0, 0,        184,
+	MI(_tile_table_power_station,              30,               2, 2, 0, 0,    5, 5, 0, 0,        184,
 	   IT_COAL_MINE,      IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_COAL,           CT_INVALID,          CT_INVALID,
@@ -1101,7 +1147,7 @@
 	   STR_4803_POWER_STATION,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_sawmill,                    28,               2, 0, 0, 0,    5, 0, 0, 0,        194,
+	MI(_tile_table_sawmill,                    28,               2, 0, 0, 0,    5, 0, 0, 0,        194,
 	   IT_FOREST,         IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_WOOD,           CT_INVALID,          CT_INVALID,
@@ -1110,7 +1156,7 @@
 	   STR_4804_SAWMILL,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_forest,                     200,              3, 4, 0, 0,    5, 5, 0, 0,         86,
+	MI(_tile_table_forest,                     200,              3, 4, 0, 0,    5, 5, 0, 0,         86,
 	   IT_SAWMILL,        IT_PAPER_MILL,       IT_INVALID,       CHECK_FOREST,
 	   CT_WOOD,       13, CT_INVALID,       0, 30,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1119,7 +1165,7 @@
 	   STR_4805_FOREST,                        STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_483A_INSECT_INFESTATION_CAUSES),
 
-	MK(_tile_table_oil_refinery,               31,               2, 2, 2, 0,    4, 4, 4, 0,        191,
+	MI(_tile_table_oil_refinery,               31,               2, 2, 2, 0,    4, 4, 4, 0,        191,
 	   IT_OIL_RIG,        IT_INVALID,          IT_INVALID,       CHECK_REFINERY,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_OIL,            CT_INVALID,          CT_INVALID,
@@ -1128,7 +1174,7 @@
 	   STR_4806_OIL_REFINERY,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_oil_rig,                    240,              6, 0, 0, 0,    0, 0, 0, 0,        152,
+	MI(_tile_table_oil_rig,                    240,              6, 0, 0, 0,    0, 0, 0, 0,        152,
 	   IT_OIL_REFINERY,   IT_INVALID,          IT_INVALID,       CHECK_OIL_RIG,
 	   CT_OIL,        15, CT_PASSENGERS,    2, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1137,7 +1183,7 @@
 	   STR_4807_OIL_RIG,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4837_NEW_OIL_RESERVES_FOUND,   STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_factory,                    26,               2, 0, 0, 0,    5, 0, 0, 0,        174,
+	MI(_tile_table_factory,                    26,               2, 0, 0, 0,    5, 0, 0, 0,        174,
 	   IT_FARM,           IT_STEEL_MILL,       IT_INVALID,       CHECK_NOTHING,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_LIVESTOCK,      CT_GRAIN,            CT_STEEL,
@@ -1146,7 +1192,7 @@
 	   STR_4808_FACTORY,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_printing_works,             26,               0, 2, 0, 0,    0, 5, 0, 0,        174,
+	MI(_tile_table_printing_works,             26,               0, 2, 0, 0,    0, 5, 0, 0,        174,
 	   IT_PAPER_MILL,     IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_PAPER,          CT_INVALID,          CT_INVALID,
@@ -1155,7 +1201,7 @@
 	   STR_4809_PRINTING_WORKS,                STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_steel_mill,                 27,               2, 0, 0, 0,    5, 0, 0, 0,         10,
+	MI(_tile_table_steel_mill,                 27,               2, 0, 0, 0,    5, 0, 0, 0,         10,
 	   IT_IRON_MINE,      IT_FACTORY,          IT_INVALID,       CHECK_NOTHING,
 	   CT_STEEL,       0, CT_INVALID,       0, 5,
 	   CT_IRON_ORE,       CT_INVALID,          CT_INVALID,
@@ -1164,7 +1210,7 @@
 	   STR_480A_STEEL_MILL,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_farm,                       250,              2, 4, 0, 0,    9, 9, 0, 0,         48,
+	MI(_tile_table_farm,                       250,              2, 4, 0, 0,    9, 9, 0, 0,         48,
 	   IT_FACTORY,        IT_FOOD_PROCESS,     IT_INVALID,       CHECK_FARM,
 	   CT_GRAIN,      10, CT_LIVESTOCK,    10, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1173,7 +1219,7 @@
 	   STR_480B_FARM,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
-	MK(_tile_table_copper_mine,                205,              0, 0, 3, 0,    0, 0, 4, 0,         10,
+	MI(_tile_table_copper_mine,                205,              0, 0, 3, 0,    0, 0, 4, 0,         10,
 	   IT_FACTORY_2,      IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_COPPER_ORE, 10, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1182,7 +1228,7 @@
 	   STR_480C_COPPER_ORE_MINE,               STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_oil_well,                   220,              0, 5, 3, 0,    4, 5, 5, 0,        152,
+	MI(_tile_table_oil_well,                   220,              0, 5, 3, 0,    4, 5, 5, 0,        152,
 	   IT_OIL_REFINERY,   IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_OIL,        12, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1191,7 +1237,7 @@
 	   STR_480D_OIL_WELLS,                     STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4837_NEW_OIL_RESERVES_FOUND,   STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_bank,                       193,              7, 0, 0, 0,    0, 0, 0, 0,         15,
+	MI(_tile_table_bank,                       193,              7, 0, 0, 0,    0, 0, 0, 0,         15,
 	   IT_BANK_TEMP,      IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_VALUABLES,   6, CT_INVALID,       0, 5,
 	   CT_VALUABLES,      CT_INVALID,          CT_INVALID,
@@ -1200,7 +1246,7 @@
 	   STR_480E_BANK,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_food_process,               26,               0, 2, 2, 0,    0, 3, 4, 0,         55,
+	MI(_tile_table_food_process,               26,               0, 2, 2, 0,    0, 3, 4, 0,         55,
 	   IT_FRUIT_PLANTATION, IT_FARM,           IT_FARM_2,        CHECK_NOTHING,
 	   CT_FOOD,        0, CT_INVALID,       0, 5,
 	   CT_FRUIT,          CT_MAIZE,            CT_INVALID,
@@ -1209,7 +1255,7 @@
 	   STR_480F_FOOD_PROCESSING_PLANT,         STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_paper_mill,                 28,               0, 2, 0, 0,    0, 5, 0, 0,         10,
+	MI(_tile_table_paper_mill,                 28,               0, 2, 0, 0,    0, 5, 0, 0,         10,
 	   IT_FOREST,         IT_PRINTING_WORKS,   IT_INVALID,       CHECK_NOTHING,
 	   CT_PAPER,       0, CT_INVALID,       0, 5,
 	   CT_WOOD,           CT_INVALID,          CT_INVALID,
@@ -1218,7 +1264,7 @@
 	   STR_4810_PAPER_MILL,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_gold_mine,                  208,              0, 3, 0, 0,    0, 4, 0, 0,        194,
+	MI(_tile_table_gold_mine,                  208,              0, 3, 0, 0,    0, 4, 0, 0,        194,
 	   IT_BANK_TROPIC_ARCTIC, IT_INVALID,      IT_INVALID,       CHECK_NOTHING,
 	   CT_GOLD,        7, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1227,7 +1273,7 @@
 	   STR_4811_GOLD_MINE,                     STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_bank2,                      19,               0, 3, 3, 0,    0, 6, 5, 0,         15,
+	MI(_tile_table_bank2,                      19,               0, 3, 3, 0,    0, 6, 5, 0,         15,
 	   IT_GOLD_MINE,      IT_DIAMOND_MINE,     IT_INVALID,       CHECK_NOTHING,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_GOLD,           CT_INVALID,          CT_INVALID,
@@ -1236,7 +1282,7 @@
 	   STR_4812_BANK,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_diamond_mine,               213,              0, 0, 3, 0,    0, 0, 4, 0,        184,
+	MI(_tile_table_diamond_mine,               213,              0, 0, 3, 0,    0, 0, 4, 0,        184,
 	   IT_BANK_TROPIC_ARCTIC, IT_INVALID,      IT_INVALID,       CHECK_NOTHING,
 	   CT_DIAMONDS,    7, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1245,7 +1291,7 @@
 	   STR_4813_DIAMOND_MINE,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_iron_mine,                  220,              2, 0, 0, 0,    5, 0, 0, 0,         55,
+	MI(_tile_table_iron_mine,                  220,              2, 0, 0, 0,    5, 0, 0, 0,         55,
 	   IT_STEEL_MILL,     IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_IRON_ORE,   10, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1254,7 +1300,7 @@
 	   STR_4814_IRON_ORE_MINE,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_fruit_plantation,           225,              0, 0, 2, 0,    0, 0, 4, 0,         86,
+	MI(_tile_table_fruit_plantation,           225,              0, 0, 2, 0,    0, 0, 4, 0,         86,
 	   IT_FOOD_PROCESS,   IT_INVALID,          IT_INVALID,       CHECK_PLANTATION,
 	   CT_FRUIT,      10, CT_INVALID,       0, 15,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1263,7 +1309,7 @@
 	   STR_4815_FRUIT_PLANTATION,              STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
-	MK(_tile_table_rubber_plantation,          218,              0, 0, 3, 0,    0, 0, 4, 0,         39,
+	MI(_tile_table_rubber_plantation,          218,              0, 0, 3, 0,    0, 0, 4, 0,         39,
 	   IT_FACTORY_2,      IT_INVALID,          IT_INVALID,       CHECK_PLANTATION,
 	   CT_RUBBER,     10, CT_INVALID,       0, 15,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1272,7 +1318,7 @@
 	   STR_4816_RUBBER_PLANTATION,             STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
-	MK(_tile_table_water_supply,               199,              0, 0, 3, 0,    0, 0, 4, 0,         37,
+	MI(_tile_table_water_supply,               199,              0, 0, 3, 0,    0, 0, 4, 0,         37,
 	   IT_WATER_TOWER,    IT_INVALID,          IT_INVALID,       CHECK_WATER,
 	   CT_WATER,      12, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1281,7 +1327,7 @@
 	   STR_4817_WATER_SUPPLY,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_water_tower,                14,               0, 0, 4, 0,    0, 0, 8, 0,        208,
+	MI(_tile_table_water_tower,                14,               0, 0, 4, 0,    0, 0, 8, 0,        208,
 	   IT_WATER_SUPPLY,   IT_INVALID,          IT_INVALID,       CHECK_WATER,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_WATER,          CT_INVALID,          CT_INVALID,
@@ -1290,7 +1336,7 @@
 	   STR_4818_WATER_TOWER,                   STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_factory2,                   26,               0, 0, 2, 0,    0, 0, 4, 0,        174,
+	MI(_tile_table_factory2,                   26,               0, 0, 2, 0,    0, 0, 4, 0,        174,
 	   IT_RUBBER_PLANTATION, IT_COPPER_MINE,   IT_LUMBER_MILL,   CHECK_PLANTATION,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_RUBBER,         CT_COPPER_ORE,       CT_WOOD,
@@ -1299,7 +1345,7 @@
 	   STR_4819_FACTORY,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_farm2,                      250,              0, 0, 1, 0,    0, 0, 2, 0,         48,
+	MI(_tile_table_farm2,                      250,              0, 0, 1, 0,    0, 0, 2, 0,         48,
 	   IT_FOOD_PROCESS,   IT_INVALID,          IT_INVALID,       CHECK_PLANTATION,
 	   CT_MAIZE,      11, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1308,7 +1354,7 @@
 	   STR_481A_FARM,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
-	MK(_tile_table_lumber_mill,                17,               0, 0, 0, 0,    0, 0, 0, 0,        194,
+	MI(_tile_table_lumber_mill,                17,               0, 0, 0, 0,    0, 0, 0, 0,        194,
 	   IT_FACTORY_2,      IT_INVALID,          IT_INVALID,       CHECK_LUMBERMILL,
 	   CT_WOOD,        0, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1317,7 +1363,7 @@
 	   STR_481B_LUMBER_MILL,                   STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4834_LACK_OF_NEARBY_TREES_CAUSES,   STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_cotton_candy,               195,              0, 0, 0, 3,    0, 0, 0, 5,         48,
+	MI(_tile_table_cotton_candy,               195,              0, 0, 0, 3,    0, 0, 0, 5,         48,
 	   IT_CANDY_FACTORY,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_COTTON_CANDY, 13, CT_INVALID,    0, 30,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1326,7 +1372,7 @@
 	   STR_481C_COTTON_CANDY_FOREST,           STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_candy_factory,              26,               0, 0, 0, 3,    0, 0, 0, 5,        174,
+	MI(_tile_table_candy_factory,              26,               0, 0, 0, 3,    0, 0, 0, 5,        174,
 	   IT_COTTON_CANDY,   IT_TOFFEE_QUARRY,    IT_SUGAR_MINE,    CHECK_NOTHING,
 	   CT_CANDY,       0, CT_INVALID,       0, 5,
 	   CT_SUGAR,          CT_TOFFEE,           CT_COTTON_CANDY,
@@ -1335,7 +1381,7 @@
 	   STR_481D_CANDY_FACTORY,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_battery_farm,               187,              0, 0, 0, 3,    0, 0, 0, 4,         39,
+	MI(_tile_table_battery_farm,               187,              0, 0, 0, 3,    0, 0, 0, 4,         39,
 	   IT_TOY_FACTORY,    IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_BATTERIES,  11, CT_INVALID,      0, 30,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1344,7 +1390,7 @@
 	   STR_481E_BATTERY_FARM,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
-	MK(_tile_table_cola_wells,                 193,              0, 0, 0, 3,    0, 0, 0, 5,         55,
+	MI(_tile_table_cola_wells,                 193,              0, 0, 0, 3,    0, 0, 0, 5,         55,
 	   IT_FIZZY_DRINK_FACTORY, IT_INVALID,     IT_INVALID,       CHECK_NOTHING,
 	   CT_COLA,       12, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1353,7 +1399,7 @@
 	   STR_481F_COLA_WELLS,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_toy_shop,                   17,               0, 0, 0, 3,    0, 0, 0, 4,        208,
+	MI(_tile_table_toy_shop,                   17,               0, 0, 0, 3,    0, 0, 0, 4,        208,
 	   IT_TOY_FACTORY,    IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_TOYS,           CT_INVALID,          CT_INVALID,
@@ -1362,7 +1408,7 @@
 	   STR_4820_TOY_SHOP,                      STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_toy_factory,                20,              0, 0, 0, 3,    0, 0, 0, 5,          10,
+	MI(_tile_table_toy_factory,                20,              0, 0, 0, 3,    0, 0, 0, 5,          10,
 	   IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM,  IT_TOY_SHOP,     CHECK_NOTHING,
 	   CT_TOYS,        0, CT_INVALID,       0, 5,
 	   CT_PLASTIC,        CT_BATTERIES,        CT_INVALID,
@@ -1371,7 +1417,7 @@
 	   STR_4821_TOY_FACTORY,                   STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_plastic_fountain,           192,              0, 0, 0, 3,    0, 0, 0, 5,         37,
+	MI(_tile_table_plastic_fountain,           192,              0, 0, 0, 3,    0, 0, 0, 5,         37,
 	   IT_TOY_FACTORY,    IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_PLASTIC,    14, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1380,7 +1426,7 @@
 	   STR_4822_PLASTIC_FOUNTAINS,             STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_fizzy_drink,                22,               0, 0, 0, 3,    0, 0, 0, 4,        184,
+	MI(_tile_table_fizzy_drink,                22,               0, 0, 0, 3,    0, 0, 0, 4,        184,
 	   IT_COLA_WELLS,     IT_BUBBLE_GENERATOR, IT_INVALID,       CHECK_NOTHING,
 	   CT_FIZZY_DRINKS, 0, CT_INVALID,      0, 5,
 	   CT_COLA,           CT_BUBBLES,          CT_INVALID,
@@ -1389,7 +1435,7 @@
 	   STR_4823_FIZZY_DRINK_FACTORY,           STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_bubble_generator,           203,              0, 0, 0, 3,    0, 0, 0, 5,        152,
+	MI(_tile_table_bubble_generator,           203,              0, 0, 0, 3,    0, 0, 0, 5,        152,
 	   IT_FIZZY_DRINK_FACTORY, IT_INVALID,     IT_INVALID,       CHECK_BUBBLEGEN,
 	   CT_BUBBLES,    13, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1398,7 +1444,7 @@
 	   STR_4824_BUBBLE_GENERATOR,              STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_toffee_quarry,              213,              0, 0, 0, 3,    0, 0, 0, 5,        194,
+	MI(_tile_table_toffee_quarry,              213,              0, 0, 0, 3,    0, 0, 0, 5,        194,
 	   IT_CANDY_FACTORY,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_TOFFEE,     10, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1407,7 +1453,7 @@
 	   STR_4825_TOFFEE_QUARRY,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MK(_tile_table_sugar_mine,                 210,              0, 0, 0, 2,    0, 0, 0, 4,         15,
+	MI(_tile_table_sugar_mine,                 210,              0, 0, 0, 2,    0, 0, 0, 4,         15,
 	   IT_CANDY_FACTORY,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_SUGAR,      11, CT_INVALID,       0, 5,
 	   CT_INVALID,        CT_INVALID,          CT_INVALID,
@@ -1416,266 +1462,266 @@
 	   STR_4826_SUGAR_MINE,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 };
-#undef MK
+#undef MI
 
-/** Writes the properties of a industry tile into the IndustryTileSpec struct.
+/** Writes the properties of an industry tile into the IndustryTileSpec struct.
  * @param c1 first type of cargo accepted for this tile
  * @param c2 second cargo
  * @param c3 and third cargo. Those three are in an array
  * @param s1 slope refused upon choosing a place to build
  * @param a1 animation frame on production
  * @param a2 next frame of animation
- * @param a3 chosses between animation of construction state
+ * @param a3 chooses between animation or construction state
  */
-#define MK(c1, c2, c3, sl, a1, a2, a3) {{c1, c2, c3}, sl, a1, a2, a3}
+#define MT(c1, c2, c3, sl, a1, a2, a3) {{c1, c2, c3}, sl, a1, a2, a3}
 static const IndustryTileSpec _industry_tile_specs[] = {
 	/* Coal Mine */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Power Station */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_COAL,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_COAL,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Sawmill */
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Forest Artic, temperate */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,               17,  INDUTILE_NOANIM,   false), // Chopping forest
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,               16,   false), // Growing forest
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,               17,  INDUTILE_NOANIM,   false), ///< Chopping forest
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,               16,   false), ///< Growing forest
 
 	/* Oil refinery */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_OIL,        SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_OIL,        SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* oil Rig */
-	MK(CT_INVALID,      CT_INVALID,   CT_PASSENGERS, SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_MAIL,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_PASSENGERS, SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_MAIL,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Oil Wells artic, temperate */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
 
 	/* Farm tropic, arctic and temperate */
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Factory temperate */
-	MK(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_GRAIN,        CT_STEEL,     CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Printing works */
-	MK(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_PAPER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Copper ore mine */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Steel mill */
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_IRON_ORE,   SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Bank temperate*/
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_VALUABLES,  SLOPE_E,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_PASSENGERS,   CT_INVALID,   CT_VALUABLES,  SLOPE_S,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_VALUABLES,  SLOPE_E,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_PASSENGERS,   CT_INVALID,   CT_VALUABLES,  SLOPE_S,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Food processing plant, tropic and arctic. CT_MAIZE or CT_WHEAT, CT_LIVESTOCK or CT_FRUIT*/
-	MK(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_MAIZE,        CT_INVALID,   CT_LIVESTOCK,  SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Paper mill */
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WOOD,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Gold mine */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  true ),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Bank Sub Arctic */
-	MK(CT_INVALID,      CT_INVALID,   CT_GOLD,       SLOPE_E,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_GOLD,       SLOPE_S,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_GOLD,       SLOPE_E,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_GOLD,       SLOPE_S,      INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Diamond mine */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Iron ore Mine */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Fruit plantation */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Rubber plantation */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Water supply */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Water tower */
-	MK(CT_INVALID,      CT_INVALID,   CT_WATER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_WATER,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Factory (sub-tropical) */
-	MK(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COPPER_ORE,   CT_WOOD,      CT_RUBBER,     SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Lumber mill */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Candyfloss forest */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,              130,   INDUTILE_NOANIM,  false), // Chopping candyfloss
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,               129,  false), // Growing candyfloss
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,              130,   INDUTILE_NOANIM,  false), ///< Chopping candyfloss
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,               129,  false), ///< Growing candyfloss
 
 	/* Sweet factory */
-	MK(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_COTTON_CANDY, CT_TOFFEE,    CT_SUGAR,      SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Batter farm */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,              136,   INDUTILE_NOANIM,  false), // Reaping batteries
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,               135,  false), // Growing batteries
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,              136,   INDUTILE_NOANIM,  false), ///< Reaping batteries
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,               135,  false), ///< Growing batteries
 
 	/* Cola wells */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Toy shop */
-	MK(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_TOYS,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Toy factory */
-	MK(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BATTERIES,    CT_INVALID,   CT_PLASTIC,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Plastic Fountain */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Fizzy drink factory */
-	MK(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_BUBBLES,      CT_INVALID,   CT_COLA,       SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Bubble generator */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Toffee quarry */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 
 	/* Sugar mine */
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
-	MK(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
+	MT(CT_INVALID,      CT_INVALID,   CT_INVALID,    SLOPE_STEEP,  INDUTILE_NOANIM,   INDUTILE_NOANIM,  false),
 };
-#undef MK
+#undef MT
 
 #endif  /* BUILD_INDUSTRY_H */
--- a/src/table/engines.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/engines.h	Sat Apr 21 08:23:57 2007 +0000
@@ -12,25 +12,43 @@
 /** Writes the properties of a train or road vehicle into the EngineInfo struct.
  * @see EngineInfo
  * @param a Introduction date
+ * @param b unk2, flag for carriage(bit 7) and decay speed(bits0..6)
+ * @param c life length
+ * @param d base life
  * @param e Bitmask of the climates
+ * @note the 0x80 in parameter b sets the "is carriage bit"
  * @note the 5 between d and e is the load amount
  */
 #define MK(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, e, 0, 8, 0, 0 }
 
 /** Writes the properties of a train carriage into the EngineInfo struct.
+ * @param a Introduction date
+ * @param b unk2, flag for carriage(bit 7) and decay speed(bits0..6)
+ * @param c life length
+ * @param d base life
+ * @param e Bitmask of the climates
  * @see MK
- * @note the 0x80 in parameter b sets the "is carriage bit"
  * @note the 5 between d and e is the load amount
  */
 #define MW(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b | 0x80, 5, e, 0, 8, 0, 0 }
 
 /** Writes the properties of a ship into the EngineInfo struct.
+ * @param a Introduction date
+ * @param b unk2, flag for carriage(bit 7) and decay speed(bits0..6)
+ * @param c life length
+ * @param d base life
+ * @param e Bitmask of the climates
  * @see MK
  * @note the 10 between d and e is the load amount
  */
 #define MS(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, e, 0, 8, 0, 0 }
 
 /** Writes the properties of an aeroplane into the EngineInfo struct.
+ * @param a Introduction date
+ * @param b unk2, flag for carriage(bit 7) and decay speed(bits0..6)
+ * @param c life length
+ * @param d base life
+ * @param e Bitmask of the climates
  * @see MK
  * @note the 20 between d and e is the load amount
  */
@@ -321,7 +339,7 @@
  * @param e power (hp)
  * @param f weight
  * @param g running_cost_base
- * @param h running_cost_class / engclass
+ * @param h running_cost_class - engclass
  * @param i capacity
  * @param j cargo_type
  * @param k ai_rank
@@ -586,101 +604,101 @@
  * @param f capacity
  * @param g cargo_type
  */
-#define RVI(a, b, c, d, e, f, g) { a, b, c, {d}, e, f, g }
+#define ROV(a, b, c, d, e, f, g) { a, b, c, {d}, e, f, g }
 const RoadVehicleInfo orig_road_vehicle_info[NUM_ROAD_ENGINES] = {
 	//    image_index       sfx                                 max_speed
 	//    |    base_cost    |                                   |   capacity
 	//    |    |    running_cost                                |   |  cargo_type
 	//    |    |    |       |                                   |   |  |
-	RVI(  0, 120,  91, SND_19_BUS_START_PULL_AWAY,            112, 31, CT_PASSENGERS   ), /*  0 */
-	RVI( 17, 140, 128, SND_1C_TRUCK_START_2,                  176, 35, CT_PASSENGERS   ), /*  1 */
-	RVI( 17, 150, 178, SND_1B_TRUCK_START,                    224, 37, CT_PASSENGERS   ), /*  2 */
-	RVI( 34, 160, 240, SND_1B_TRUCK_START,                    255, 40, CT_PASSENGERS   ), /*  3 */
-	RVI( 51, 120,  91, SND_3C_COMEDY_CAR,                     112, 30, CT_PASSENGERS   ), /*  4 */
-	RVI( 51, 140, 171, SND_3E_COMEDY_CAR_2,                   192, 35, CT_PASSENGERS   ), /*  5 */
-	RVI( 51, 160, 240, SND_3C_COMEDY_CAR,                     240, 38, CT_PASSENGERS   ), /*  6 */
-	RVI(  1, 108,  90, SND_19_BUS_START_PULL_AWAY,             96, 20, CT_COAL         ), /*  7 */
-	RVI( 18, 128, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_COAL         ), /*  8 */
-	RVI( 35, 138, 240, SND_19_BUS_START_PULL_AWAY,            224, 28, CT_COAL         ), /*  9 */
-	RVI(  2, 115,  90, SND_19_BUS_START_PULL_AWAY,             96, 22, CT_MAIL         ), /* 10 */
-	RVI( 19, 135, 168, SND_19_BUS_START_PULL_AWAY,            176, 28, CT_MAIL         ), /* 11 */
-	RVI( 36, 145, 240, SND_19_BUS_START_PULL_AWAY,            224, 30, CT_MAIL         ), /* 12 */
-	RVI( 57, 115,  90, SND_3E_COMEDY_CAR_2,                    96, 22, CT_MAIL         ), /* 13 */
-	RVI( 57, 135, 168, SND_3C_COMEDY_CAR,                     176, 28, CT_MAIL         ), /* 14 */
-	RVI( 57, 145, 240, SND_3E_COMEDY_CAR_2,                   224, 30, CT_MAIL         ), /* 15 */
-	RVI(  3, 110,  90, SND_19_BUS_START_PULL_AWAY,             96, 21, CT_OIL          ), /* 16 */
-	RVI( 20, 140, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_OIL          ), /* 17 */
-	RVI( 37, 150, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_OIL          ), /* 18 */
-	RVI(  4, 105,  90, SND_19_BUS_START_PULL_AWAY,             96, 14, CT_LIVESTOCK    ), /* 19 */
-	RVI( 21, 130, 168, SND_19_BUS_START_PULL_AWAY,            176, 16, CT_LIVESTOCK    ), /* 20 */
-	RVI( 38, 140, 240, SND_19_BUS_START_PULL_AWAY,            224, 18, CT_LIVESTOCK    ), /* 21 */
-	RVI(  5, 107,  90, SND_19_BUS_START_PULL_AWAY,             96, 14, CT_GOODS        ), /* 22 */
-	RVI( 22, 130, 168, SND_19_BUS_START_PULL_AWAY,            176, 16, CT_GOODS        ), /* 23 */
-	RVI( 39, 140, 240, SND_19_BUS_START_PULL_AWAY,            224, 18, CT_GOODS        ), /* 24 */
-	RVI(  6, 114,  90, SND_19_BUS_START_PULL_AWAY,             96, 20, CT_GRAIN        ), /* 25 */
-	RVI( 23, 133, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_GRAIN        ), /* 26 */
-	RVI( 40, 143, 240, SND_19_BUS_START_PULL_AWAY,            224, 30, CT_GRAIN        ), /* 27 */
-	RVI(  7, 118,  90, SND_19_BUS_START_PULL_AWAY,             96, 20, CT_WOOD         ), /* 28 */
-	RVI( 24, 137, 168, SND_19_BUS_START_PULL_AWAY,            176, 22, CT_WOOD         ), /* 29 */
-	RVI( 41, 147, 240, SND_19_BUS_START_PULL_AWAY,            224, 24, CT_WOOD         ), /* 30 */
-	RVI(  8, 121,  90, SND_19_BUS_START_PULL_AWAY,             96, 22, CT_IRON_ORE     ), /* 31 */
-	RVI( 25, 140, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_IRON_ORE     ), /* 32 */
-	RVI( 42, 150, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_IRON_ORE     ), /* 33 */
-	RVI(  9, 112,  90, SND_19_BUS_START_PULL_AWAY,             96, 15, CT_STEEL        ), /* 34 */
-	RVI( 26, 135, 168, SND_19_BUS_START_PULL_AWAY,            176, 18, CT_STEEL        ), /* 35 */
-	RVI( 43, 145, 240, SND_19_BUS_START_PULL_AWAY,            224, 20, CT_STEEL        ), /* 36 */
-	RVI( 10, 145,  90, SND_19_BUS_START_PULL_AWAY,             96, 12, CT_VALUABLES    ), /* 37 */
-	RVI( 27, 170, 168, SND_19_BUS_START_PULL_AWAY,            176, 15, CT_VALUABLES    ), /* 38 */
-	RVI( 44, 180, 240, SND_19_BUS_START_PULL_AWAY,            224, 16, CT_VALUABLES    ), /* 39 */
-	RVI( 11, 112,  90, SND_19_BUS_START_PULL_AWAY,             96, 17, CT_FOOD         ), /* 40 */
-	RVI( 28, 134, 168, SND_19_BUS_START_PULL_AWAY,            176, 20, CT_FOOD         ), /* 41 */
-	RVI( 45, 144, 240, SND_19_BUS_START_PULL_AWAY,            224, 22, CT_FOOD         ), /* 42 */
-	RVI( 12, 112,  90, SND_19_BUS_START_PULL_AWAY,             96, 15, CT_PAPER        ), /* 43 */
-	RVI( 29, 135, 168, SND_19_BUS_START_PULL_AWAY,            176, 18, CT_PAPER        ), /* 44 */
-	RVI( 46, 145, 240, SND_19_BUS_START_PULL_AWAY,            224, 20, CT_PAPER        ), /* 45 */
-	RVI( 13, 121,  90, SND_19_BUS_START_PULL_AWAY,             96, 22, CT_COPPER_ORE   ), /* 46 */
-	RVI( 30, 140, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_COPPER_ORE   ), /* 47 */
-	RVI( 47, 150, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_COPPER_ORE   ), /* 48 */
-	RVI( 14, 111,  90, SND_19_BUS_START_PULL_AWAY,             96, 21, CT_WATER        ), /* 49 */
-	RVI( 31, 141, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_WATER        ), /* 50 */
-	RVI( 48, 151, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_WATER        ), /* 51 */
-	RVI( 15, 118,  90, SND_19_BUS_START_PULL_AWAY,             96, 18, CT_FRUIT        ), /* 52 */
-	RVI( 32, 148, 168, SND_19_BUS_START_PULL_AWAY,            176, 20, CT_FRUIT        ), /* 53 */
-	RVI( 49, 158, 240, SND_19_BUS_START_PULL_AWAY,            224, 23, CT_FRUIT        ), /* 54 */
-	RVI( 16, 117,  90, SND_19_BUS_START_PULL_AWAY,             96, 17, CT_RUBBER       ), /* 55 */
-	RVI( 33, 147, 168, SND_19_BUS_START_PULL_AWAY,            176, 19, CT_RUBBER       ), /* 56 */
-	RVI( 50, 157, 240, SND_19_BUS_START_PULL_AWAY,            224, 22, CT_RUBBER       ), /* 57 */
-	RVI( 52, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_SUGAR        ), /* 58 */
-	RVI( 52, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_SUGAR        ), /* 59 */
-	RVI( 52, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_SUGAR        ), /* 60 */
-	RVI( 53, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_COLA         ), /* 61 */
-	RVI( 53, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_COLA         ), /* 62 */
-	RVI( 53, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_COLA         ), /* 63 */
-	RVI( 54, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_COTTON_CANDY ), /* 64 */
-	RVI( 54, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_COTTON_CANDY ), /* 65 */
-	RVI( 54, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_COTTON_CANDY ), /* 66 */
-	RVI( 55, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_TOFFEE       ), /* 67 */
-	RVI( 55, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_TOFFEE       ), /* 68 */
-	RVI( 55, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_TOFFEE       ), /* 69 */
-	RVI( 56, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_TOYS         ), /* 70 */
-	RVI( 56, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_TOYS         ), /* 71 */
-	RVI( 56, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_TOYS         ), /* 72 */
-	RVI( 58, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_CANDY        ), /* 73 */
-	RVI( 58, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_CANDY        ), /* 74 */
-	RVI( 58, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_CANDY        ), /* 75 */
-	RVI( 59, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_BATTERIES    ), /* 76 */
-	RVI( 59, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_BATTERIES    ), /* 77 */
-	RVI( 59, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_BATTERIES    ), /* 78 */
-	RVI( 60, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_FIZZY_DRINKS ), /* 79 */
-	RVI( 60, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_FIZZY_DRINKS ), /* 80 */
-	RVI( 60, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_FIZZY_DRINKS ), /* 81 */
-	RVI( 61, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_PLASTIC      ), /* 82 */
-	RVI( 61, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_PLASTIC      ), /* 83 */
-	RVI( 61, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_PLASTIC      ), /* 84 */
-	RVI( 62, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_BUBBLES      ), /* 85 */
-	RVI( 62, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_BUBBLES      ), /* 86 */
-	RVI( 62, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_BUBBLES      ), /* 87 */
+	ROV(  0, 120,  91, SND_19_BUS_START_PULL_AWAY,            112, 31, CT_PASSENGERS   ), /*  0 */
+	ROV( 17, 140, 128, SND_1C_TRUCK_START_2,                  176, 35, CT_PASSENGERS   ), /*  1 */
+	ROV( 17, 150, 178, SND_1B_TRUCK_START,                    224, 37, CT_PASSENGERS   ), /*  2 */
+	ROV( 34, 160, 240, SND_1B_TRUCK_START,                    255, 40, CT_PASSENGERS   ), /*  3 */
+	ROV( 51, 120,  91, SND_3C_COMEDY_CAR,                     112, 30, CT_PASSENGERS   ), /*  4 */
+	ROV( 51, 140, 171, SND_3E_COMEDY_CAR_2,                   192, 35, CT_PASSENGERS   ), /*  5 */
+	ROV( 51, 160, 240, SND_3C_COMEDY_CAR,                     240, 38, CT_PASSENGERS   ), /*  6 */
+	ROV(  1, 108,  90, SND_19_BUS_START_PULL_AWAY,             96, 20, CT_COAL         ), /*  7 */
+	ROV( 18, 128, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_COAL         ), /*  8 */
+	ROV( 35, 138, 240, SND_19_BUS_START_PULL_AWAY,            224, 28, CT_COAL         ), /*  9 */
+	ROV(  2, 115,  90, SND_19_BUS_START_PULL_AWAY,             96, 22, CT_MAIL         ), /* 10 */
+	ROV( 19, 135, 168, SND_19_BUS_START_PULL_AWAY,            176, 28, CT_MAIL         ), /* 11 */
+	ROV( 36, 145, 240, SND_19_BUS_START_PULL_AWAY,            224, 30, CT_MAIL         ), /* 12 */
+	ROV( 57, 115,  90, SND_3E_COMEDY_CAR_2,                    96, 22, CT_MAIL         ), /* 13 */
+	ROV( 57, 135, 168, SND_3C_COMEDY_CAR,                     176, 28, CT_MAIL         ), /* 14 */
+	ROV( 57, 145, 240, SND_3E_COMEDY_CAR_2,                   224, 30, CT_MAIL         ), /* 15 */
+	ROV(  3, 110,  90, SND_19_BUS_START_PULL_AWAY,             96, 21, CT_OIL          ), /* 16 */
+	ROV( 20, 140, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_OIL          ), /* 17 */
+	ROV( 37, 150, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_OIL          ), /* 18 */
+	ROV(  4, 105,  90, SND_19_BUS_START_PULL_AWAY,             96, 14, CT_LIVESTOCK    ), /* 19 */
+	ROV( 21, 130, 168, SND_19_BUS_START_PULL_AWAY,            176, 16, CT_LIVESTOCK    ), /* 20 */
+	ROV( 38, 140, 240, SND_19_BUS_START_PULL_AWAY,            224, 18, CT_LIVESTOCK    ), /* 21 */
+	ROV(  5, 107,  90, SND_19_BUS_START_PULL_AWAY,             96, 14, CT_GOODS        ), /* 22 */
+	ROV( 22, 130, 168, SND_19_BUS_START_PULL_AWAY,            176, 16, CT_GOODS        ), /* 23 */
+	ROV( 39, 140, 240, SND_19_BUS_START_PULL_AWAY,            224, 18, CT_GOODS        ), /* 24 */
+	ROV(  6, 114,  90, SND_19_BUS_START_PULL_AWAY,             96, 20, CT_GRAIN        ), /* 25 */
+	ROV( 23, 133, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_GRAIN        ), /* 26 */
+	ROV( 40, 143, 240, SND_19_BUS_START_PULL_AWAY,            224, 30, CT_GRAIN        ), /* 27 */
+	ROV(  7, 118,  90, SND_19_BUS_START_PULL_AWAY,             96, 20, CT_WOOD         ), /* 28 */
+	ROV( 24, 137, 168, SND_19_BUS_START_PULL_AWAY,            176, 22, CT_WOOD         ), /* 29 */
+	ROV( 41, 147, 240, SND_19_BUS_START_PULL_AWAY,            224, 24, CT_WOOD         ), /* 30 */
+	ROV(  8, 121,  90, SND_19_BUS_START_PULL_AWAY,             96, 22, CT_IRON_ORE     ), /* 31 */
+	ROV( 25, 140, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_IRON_ORE     ), /* 32 */
+	ROV( 42, 150, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_IRON_ORE     ), /* 33 */
+	ROV(  9, 112,  90, SND_19_BUS_START_PULL_AWAY,             96, 15, CT_STEEL        ), /* 34 */
+	ROV( 26, 135, 168, SND_19_BUS_START_PULL_AWAY,            176, 18, CT_STEEL        ), /* 35 */
+	ROV( 43, 145, 240, SND_19_BUS_START_PULL_AWAY,            224, 20, CT_STEEL        ), /* 36 */
+	ROV( 10, 145,  90, SND_19_BUS_START_PULL_AWAY,             96, 12, CT_VALUABLES    ), /* 37 */
+	ROV( 27, 170, 168, SND_19_BUS_START_PULL_AWAY,            176, 15, CT_VALUABLES    ), /* 38 */
+	ROV( 44, 180, 240, SND_19_BUS_START_PULL_AWAY,            224, 16, CT_VALUABLES    ), /* 39 */
+	ROV( 11, 112,  90, SND_19_BUS_START_PULL_AWAY,             96, 17, CT_FOOD         ), /* 40 */
+	ROV( 28, 134, 168, SND_19_BUS_START_PULL_AWAY,            176, 20, CT_FOOD         ), /* 41 */
+	ROV( 45, 144, 240, SND_19_BUS_START_PULL_AWAY,            224, 22, CT_FOOD         ), /* 42 */
+	ROV( 12, 112,  90, SND_19_BUS_START_PULL_AWAY,             96, 15, CT_PAPER        ), /* 43 */
+	ROV( 29, 135, 168, SND_19_BUS_START_PULL_AWAY,            176, 18, CT_PAPER        ), /* 44 */
+	ROV( 46, 145, 240, SND_19_BUS_START_PULL_AWAY,            224, 20, CT_PAPER        ), /* 45 */
+	ROV( 13, 121,  90, SND_19_BUS_START_PULL_AWAY,             96, 22, CT_COPPER_ORE   ), /* 46 */
+	ROV( 30, 140, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_COPPER_ORE   ), /* 47 */
+	ROV( 47, 150, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_COPPER_ORE   ), /* 48 */
+	ROV( 14, 111,  90, SND_19_BUS_START_PULL_AWAY,             96, 21, CT_WATER        ), /* 49 */
+	ROV( 31, 141, 168, SND_19_BUS_START_PULL_AWAY,            176, 25, CT_WATER        ), /* 50 */
+	ROV( 48, 151, 240, SND_19_BUS_START_PULL_AWAY,            224, 27, CT_WATER        ), /* 51 */
+	ROV( 15, 118,  90, SND_19_BUS_START_PULL_AWAY,             96, 18, CT_FRUIT        ), /* 52 */
+	ROV( 32, 148, 168, SND_19_BUS_START_PULL_AWAY,            176, 20, CT_FRUIT        ), /* 53 */
+	ROV( 49, 158, 240, SND_19_BUS_START_PULL_AWAY,            224, 23, CT_FRUIT        ), /* 54 */
+	ROV( 16, 117,  90, SND_19_BUS_START_PULL_AWAY,             96, 17, CT_RUBBER       ), /* 55 */
+	ROV( 33, 147, 168, SND_19_BUS_START_PULL_AWAY,            176, 19, CT_RUBBER       ), /* 56 */
+	ROV( 50, 157, 240, SND_19_BUS_START_PULL_AWAY,            224, 22, CT_RUBBER       ), /* 57 */
+	ROV( 52, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_SUGAR        ), /* 58 */
+	ROV( 52, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_SUGAR        ), /* 59 */
+	ROV( 52, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_SUGAR        ), /* 60 */
+	ROV( 53, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_COLA         ), /* 61 */
+	ROV( 53, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_COLA         ), /* 62 */
+	ROV( 53, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_COLA         ), /* 63 */
+	ROV( 54, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_COTTON_CANDY ), /* 64 */
+	ROV( 54, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_COTTON_CANDY ), /* 65 */
+	ROV( 54, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_COTTON_CANDY ), /* 66 */
+	ROV( 55, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_TOFFEE       ), /* 67 */
+	ROV( 55, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_TOFFEE       ), /* 68 */
+	ROV( 55, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_TOFFEE       ), /* 69 */
+	ROV( 56, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_TOYS         ), /* 70 */
+	ROV( 56, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_TOYS         ), /* 71 */
+	ROV( 56, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_TOYS         ), /* 72 */
+	ROV( 58, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_CANDY        ), /* 73 */
+	ROV( 58, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_CANDY        ), /* 74 */
+	ROV( 58, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_CANDY        ), /* 75 */
+	ROV( 59, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_BATTERIES    ), /* 76 */
+	ROV( 59, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_BATTERIES    ), /* 77 */
+	ROV( 59, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_BATTERIES    ), /* 78 */
+	ROV( 60, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_FIZZY_DRINKS ), /* 79 */
+	ROV( 60, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_FIZZY_DRINKS ), /* 80 */
+	ROV( 60, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_FIZZY_DRINKS ), /* 81 */
+	ROV( 61, 117,  90, SND_3F_COMEDY_CAR_3,                    96, 17, CT_PLASTIC      ), /* 82 */
+	ROV( 61, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_PLASTIC      ), /* 83 */
+	ROV( 61, 157, 240, SND_3F_COMEDY_CAR_3,                   224, 22, CT_PLASTIC      ), /* 84 */
+	ROV( 62, 117,  90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY,  96, 17, CT_BUBBLES      ), /* 85 */
+	ROV( 62, 147, 168, SND_3F_COMEDY_CAR_3,                   176, 19, CT_BUBBLES      ), /* 86 */
+	ROV( 62, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_BUBBLES      ), /* 87 */
 };
-#undef RVI
+#undef ROV
 
 #endif /* ENGINES_H */
--- a/src/table/industry_land.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/industry_land.h	Sat Apr 21 08:23:57 2007 +0000
@@ -2,20 +2,30 @@
 
 /** @file industry_land.h */
 
-struct DrawIndustrySpec1Struct {
-	byte x;
-	byte image_1;
-	byte image_2;
-	byte image_3;
+/**
+ * This is used to gather some data about animation
+ * drawing in the industry code
+ * Image_1-2-3 are in fact only offset in the sprites
+ * used by the industry.
+ * To specify an invalid one, either 255 or 0 is used,
+ * depending of the industry.
+ */
+struct DrawIndustryAnimationStruct {
+	int x;        ///< coordinate x of the first image offset
+	byte image_1; ///< image offset 1
+	byte image_2; ///< image offset 2
+	byte image_3; ///< image offset 3
 };
 
-struct DrawIndustrySpec4Struct {
-	byte image_1;
-	byte image_2;
-	byte image_3;
+/**
+ * Simple structure gathering x,y coordinates for
+ * industries animations
+ */
+struct DrawIndustryCoordinates {
+	byte x;  ///< coordinate x of the pair
+	byte y;  ///< coordinate y of the pair
 };
 
-
 /**
  * Macro to ease the declaration of the array
  * @param s1 sprite ID of ground sprite
@@ -734,9 +744,10 @@
 	M(     0xf8d, PAL_NONE,     0x12a5 | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE,  0,  0, 16, 16,  50, 1),
 	M(     0xf8d, PAL_NONE,     0x12a5 | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE,  0,  0, 16, 16,  50, 1),
 };
+#undef M
 
 /* this is ONLY used for Sugar Mine*/
-static const DrawIndustrySpec1Struct _draw_industry_spec1[96] = {
+static const DrawIndustryAnimationStruct _draw_industry_spec1[96] = {
 	{  8,   4,   0,   0},
 	{  6,   0,   1,   0},
 	{  4,   0,   2,   0},
@@ -836,71 +847,77 @@
 };
 
 /* this is ONLY used for Sugar Mine*/
-static const byte _drawtile_proc1_x[5] = {
-	22, 17, 14, 10, 8
-};
-
-/* this is ONLY used for Sugar Mine*/
-static const byte _drawtile_proc1_y[5] = {
-	73, 70, 69, 66, 41
+static const DrawIndustryCoordinates _drawtile_proc1[5] = {
+	{22, 73},
+	{17, 70},
+	{14, 69},
+	{10, 66},
+	{ 8, 41},
 };
 
-/* this is ONLY used for Toy Factory*/
-static const DrawIndustrySpec4Struct _industry_anim_offs_3[] = {
-	{255, 255,   0},
-	{  0, 255,   0},
-	{  1, 255,   0},
-	{  2, 255,   0},
-	{  3, 255,   0},
-	{  4, 255,   0},
-	{  5, 255,   0},
-	{  6, 255,   0},
-	{  7, 255,   0},
-	{  8, 255,   0},
-	{  9, 255,   0},
-	{ 10, 255,   0},
-	{ 11, 255,   0},
-	{ 12, 255,   0},
-	{ 13, 255,   0},
-	{ 14, 255,   0},
-	{ 15, 255,   0},
-	{ 16, 255,   0},
-	{ 17, 255,   0},
-	{ 18, 255,   0},
-	{ 18, 255,   1},
-	{ 18, 255,   2},
-	{ 18, 255,   4},
-	{ 18, 255,   6},
-	{ 18, 255,   8},
-	{ 18, 255,  11},
-	{ 18, 255,  14},
-	{ 18, 255,  17},
-	{ 18, 255,  20},
-	{ 18, 255,  24},
-	{255,   0,  29},
-	{255,   0,  24},
-	{255,   0,  20},
-	{255,   0,  17},
-	{255,   0,  14},
-	{255,   0,  11},
-	{255,   0,   8},
-	{255,   0,   6},
-	{255,   0,   4},
-	{255,   0,   2},
-	{255,   0,   1},
-	{255,   1,   0},
-	{255,   2,   0},
-	{255,   3,   0},
-	{255,   4,   0},
-	{255,   5,   0},
-	{255,   6,   0},
-	{255,   7,   0},
-	{255,   8,   0},
-	{255, 255,   0},
+/** this is ONLY used for Toy Factory.
+ * 255 means no drawing
+ * @param img1 offset from base sprite SPR_IT_SUGAR_MINE_SIEVE
+ * @param img2 offset from base sprite SPR_IT_SUGAR_MINE_CLOUDS
+ * @param img3 offset from base sprite SPR_IT_SUGAR_MINE_PILE
+ */
+#define MD( img1, img2, img3) { (50 - img1 * 2), img1, img2, img3 }
+static const DrawIndustryAnimationStruct _industry_anim_offs_toys[] = {
+	MD(255, 255,   0),
+	MD(  0, 255,   0),
+	MD(  1, 255,   0),
+	MD(  2, 255,   0),
+	MD(  3, 255,   0),
+	MD(  4, 255,   0),
+	MD(  5, 255,   0),
+	MD(  6, 255,   0),
+	MD(  7, 255,   0),
+	MD(  8, 255,   0),
+	MD(  9, 255,   0),
+	MD( 10, 255,   0),
+	MD( 11, 255,   0),
+	MD( 12, 255,   0),
+	MD( 13, 255,   0),
+	MD( 14, 255,   0),
+	MD( 15, 255,   0),
+	MD( 16, 255,   0),
+	MD( 17, 255,   0),
+	MD( 18, 255,   0),
+	MD( 18, 255,   1),
+	MD( 18, 255,   2),
+	MD( 18, 255,   4),
+	MD( 18, 255,   6),
+	MD( 18, 255,   8),
+	MD( 18, 255,  11),
+	MD( 18, 255,  14),
+	MD( 18, 255,  17),
+	MD( 18, 255,  20),
+	MD( 18, 255,  24),
+	MD(255,   0,  29),
+	MD(255,   0,  24),
+	MD(255,   0,  20),
+	MD(255,   0,  17),
+	MD(255,   0,  14),
+	MD(255,   0,  11),
+	MD(255,   0,   8),
+	MD(255,   0,   6),
+	MD(255,   0,   4),
+	MD(255,   0,   2),
+	MD(255,   0,   1),
+	MD(255,   1,   0),
+	MD(255,   2,   0),
+	MD(255,   3,   0),
+	MD(255,   4,   0),
+	MD(255,   5,   0),
+	MD(255,   6,   0),
+	MD(255,   7,   0),
+	MD(255,   8,   0),
+	MD(255, 255,   0),
 };
+#undef MD
 
 /* this is ONLY used for Toffee Quarry*/
-static const byte _industry_anim_offs[] = {
+static const byte _industry_anim_offs_toffee[] = {
 	255,   0,   0,   0,   2,   4,   6,   8,  10,   9,
 	  7,   5,   3,   1, 255,   0,   0,   0,   2,   4,
 	  6,   8,  10,   9,   7,   5,   3,   1, 255,   0,
@@ -911,13 +928,22 @@
 };
 
 /* this is ONLY used for the Bubble Generator*/
-static const byte _industry_anim_offs_2[] = {
+static const byte _industry_anim_offs_bubbles[] = {
 	68, 69, 71, 74, 77, 80, 83, 85, 86, 86,
 	86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
 	86, 86, 85, 84, 83, 82, 81, 80, 79, 78,
 	77, 76, 75, 74, 73, 72, 71, 70, 69, 68,
 };
 
-/* those are ONLY used for Power Station*/
-static const byte _coal_plant_sparks_x[] = {11, 11, 14, 13, 18, 15};
-static const byte _coal_plant_sparks_y[] = {23, 11,  6,  3,  1,  0};
+/**
+ * Movement of the sparks , only used for Power Station
+ */
+static const DrawIndustryCoordinates _coal_plant_sparks[] = {
+	{11, 23},
+	{11, 11},
+	{14,  6},
+	{13,  3},
+	{18,  1},
+	{15,  0},
+};
+
--- a/src/table/namegen.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/namegen.h	Sat Apr 21 08:23:57 2007 +0000
@@ -1931,7 +1931,7 @@
 
 
 
-static const char *name_romanian_real[]= {
+static const char *name_romanian_real[] = {
 	"Adjud",
 	"Alba Iulia",
 	"Alexandria",
--- a/src/table/palettes.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/palettes.h	Sat Apr 21 08:23:57 2007 +0000
@@ -178,22 +178,43 @@
 	byte shadow;
 };
 
-static const StringColor _string_colormap[] = {
-	{ 150, 215 }, // BLUE
-	{  12, 215 }, // SILVER
-	{ 189, 215 }, // GOLD
-	{ 184, 215 }, // RED
-	{ 174, 215 }, // PURPLE
-	{  30, 215 }, // LTBROWN
-	{ 195, 215 }, // ORANGE
-	{ 209, 215 }, // GREEN
-	{  68, 215 }, // YELLOW
-	{  95, 215 }, // DKGREEN
-	{  79, 215 }, // CREAM
-	{ 116, 215 }, // BROWN
-	{  15, 215 }, // WHITE
-	{ 152, 215 }, // LTBLUE
-	{  32, 215 }, // GRAY
-	{ 133, 215 }, // DKBLUE
-	{ 215,   0 }, // BLACK
+static const StringColor _string_colormap[][17] = {
+	{ /* Windows palette. */
+		{ 150, 215 }, // BLUE
+		{  12, 215 }, // SILVER
+		{ 189, 215 }, // GOLD
+		{ 184, 215 }, // RED
+		{ 174, 215 }, // PURPLE
+		{  30, 215 }, // LTBROWN
+		{ 195, 215 }, // ORANGE
+		{ 209, 215 }, // GREEN
+		{  68, 215 }, // YELLOW
+		{  95, 215 }, // DKGREEN
+		{  79, 215 }, // CREAM
+		{ 116, 215 }, // BROWN
+		{  15, 215 }, // WHITE
+		{ 152, 215 }, // LTBLUE
+		{  32, 215 }, // GRAY
+		{ 133, 215 }, // DKBLUE
+		{ 215,   0 }, // BLACK
+	},
+	{ /* DOS palette. */
+		{ 150,   1 }, // BLUE
+		{  12,   1 }, // SILVER
+		{ 189,   1 }, // GOLD
+		{ 184,   1 }, // RED
+		{ 174,   1 }, // PURPLE
+		{  30,   1 }, // LTBROWN
+		{ 195,   1 }, // ORANGE
+		{ 209,   1 }, // GREEN
+		{  68,   1 }, // YELLOW
+		{  95,   1 }, // DKGREEN
+		{  79,   1 }, // CREAM
+		{ 116,   1 }, // BROWN
+		{  15,   1 }, // WHITE
+		{ 152,   1 }, // LTBLUE
+		{   6,   1 }, // GRAY
+		{ 133,   1 }, // DKBLUE
+		{   1,   0 }, // BLACK
+	}
 };
--- a/src/table/sprites.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/sprites.h	Sat Apr 21 08:23:57 2007 +0000
@@ -1302,7 +1302,7 @@
  * <li> TRANSPARENT_BIT is the bit number which toggles sprite transparency</li>
  * <li> RECOLOR_BIT toggles the recoloring system</li>
  * <li> PALETTE_SPRITE_WIDTH and PALETTE_SPRITE_START determine the position and number of
- * bits used for the recoloring process. For transparency, it must be 0x322.</li>
+ * bits used for the recoloring process. For transparency, it must be 0x322.</li></ul>
  */
 enum SpriteSetup {
 	TRANSPARENT_BIT = 31,       ///< toggles transparency in the sprite
--- a/src/table/station_land.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/station_land.h	Sat Apr 21 08:23:57 2007 +0000
@@ -34,7 +34,7 @@
 	{  0,  0,  0, 16,  5,  7, SPR_RAIL_PLATFORM_PILLARS_X_REAR | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{  0, 11,  0, 16,  5,  2, SPR_RAIL_PLATFORM_X_FRONT        | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{  0,  0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_X_TILE_A | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  0,(byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_X_TILE_A     | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
+	{  0,  0, (byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_X_TILE_A     | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
 	TILE_SEQ_END()
 };
 
@@ -42,7 +42,7 @@
 	{  0,  0,  0,  5, 16,  2, SPR_RAIL_PLATFORM_PILLARS_Y_REAR | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{ 11,  0,  0,  5, 16,  2, SPR_RAIL_PLATFORM_Y_FRONT        | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{  0,  0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_Y_TILE_A | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  0,(byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_Y_TILE_A     | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
+	{  0,  0, (byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_Y_TILE_A     | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
 	TILE_SEQ_END()
 };
 
@@ -50,7 +50,7 @@
 	{  0,  0,  0, 16,  5,  2, SPR_RAIL_PLATFORM_X_REAR          | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{  0, 11,  0, 16,  5,  2, SPR_RAIL_PLATFORM_PILLARS_X_FRONT | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{  0,  0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_X_TILE_B  | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  0,(byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_X_TILE_B      | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
+	{  0,  0, (byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_X_TILE_B      | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
 	TILE_SEQ_END()
 };
 
@@ -58,7 +58,7 @@
 	{  0,  0,  0,  5, 16,  2, SPR_RAIL_PLATFORM_Y_REAR          | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{ 11,  0,  0,  5, 16,  2, SPR_RAIL_PLATFORM_PILLARS_Y_FRONT | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	{  0,  0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_Y_TILE_B  | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  0,(byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_Y_TILE_B      | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
+	{  0,  0, (byte)0x80, 0,  0,  0, SPR_RAIL_ROOF_GLASS_Y_TILE_B      | (1 << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT },
 	TILE_SEQ_END()
 };
 
--- a/src/table/town_land.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/town_land.h	Sat Apr 21 08:23:57 2007 +0000
@@ -1781,7 +1781,7 @@
 	M(0x1244, PAL_NONE, 0x125a, PAL_NONE,  0,  0, 16, 16,  50, 0),
 };
 #undef M
-/* 4 variants * 4 build stages */
+/** Make sure we have the right number of elements: 4 variants * 4 build stages for each house */
 assert_compile(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4);
 
 /** Describes the data that defines each house in the game
@@ -1802,9 +1802,10 @@
  * @param cg3 3rd CargoID available
  * @see HouseSpec
  */
-#define M(mnd, mxd, p, rc, bn, rr, mg, ca1, ca2, ca3, bf, ba, cg1, cg2, cg3) \
+#define MS(mnd, mxd, p, rc, bn, rr, mg, ca1, ca2, ca3, bf, ba, cg1, cg2, cg3) \
 	{mnd, mxd, p, rc, bn, rr, mg, {ca1, ca2, ca3}, {cg1, cg2, cg3}, bf, ba, true, \
 	 0, NULL, 0, 0, {0, 0, 0, 0}, 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, 0, 2, 0, 0, NULL}
+/** House specifications from original data */
 static const HouseSpec _original_house_specs[] = {
 	/**
 	 *                                                              remove_rating_decrease
@@ -1820,446 +1821,448 @@
 	 * +-building_availability |    |                                |    |    |    |    |
 	 * +-cargoID accepted |    |    |                                |    |    |    |    |
 	 * |   |         |    |    |    |                                |    |    |    |    | */
-	M( 1963, MAX_YEAR, 187, 150, STR_200F_TALL_OFFICE_BLOCK,      140,  70,   8,   3,   4,
+	MS(1963, MAX_YEAR, 187, 150, STR_200F_TALL_OFFICE_BLOCK,      140,  70,   8,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //00
-	M( 1957, MAX_YEAR,  85, 140, STR_2010_OFFICE_BLOCK,           130,  55,   8,   3,   4,
+	MS(1957, MAX_YEAR,  85, 140, STR_2010_OFFICE_BLOCK,           130,  55,   8,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //01
-	M( 1968, MAX_YEAR,  40, 100, STR_2011_SMALL_BLOCK_OF_FLATS,    90,  20,   8,   3,   1,
+	MS(1968, MAX_YEAR,  40, 100, STR_2011_SMALL_BLOCK_OF_FLATS,    90,  20,   8,   3,   1,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //02
-	M(    0, MAX_YEAR,   5,  90, STR_2012_CHURCH,                 230,   2,   2,   0,   0,
+	MS(   0, MAX_YEAR,   5,  90, STR_2012_CHURCH,                 230,   2,   2,   0,   0,
 	   BUILDING_IS_CHURCH | TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //03
-	M( 1975, MAX_YEAR, 220, 160, STR_2013_LARGE_OFFICE_BLOCK,     160,  85,  10,   4,   6,
+	MS(1975, MAX_YEAR, 220, 160, STR_2013_LARGE_OFFICE_BLOCK,     160,  85,  10,   4,   6,
 	   BUILDING_IS_ANIMATED | TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //04
-	M( 1975, MAX_YEAR, 220, 160, STR_2013_LARGE_OFFICE_BLOCK,     160,  85,  10,   4,   6,
+	MS(1975, MAX_YEAR, 220, 160, STR_2013_LARGE_OFFICE_BLOCK,     160,  85,  10,   4,   6,
 	   BUILDING_IS_ANIMATED | TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE  | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //05
-	M(    0, MAX_YEAR,  30,  80, STR_2014_TOWN_HOUSES,             80,  12,   4,   1,   0,
+	MS(   0, MAX_YEAR,  30,  80, STR_2014_TOWN_HOUSES,             80,  12,   4,   1,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //06
-	M( 1959, MAX_YEAR, 140, 180, STR_2015_HOTEL,                  150,  22,   6,   1,   2,
+	MS(1959, MAX_YEAR, 140, 180, STR_2015_HOTEL,                  150,  22,   6,   1,   2,
 	   TILE_SIZE_1x2,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //07
-	M( 1959, MAX_YEAR,   0, 180, STR_2015_HOTEL,                  150,  22,   6,   1,   2,
+	MS(1959, MAX_YEAR,   0, 180, STR_2015_HOTEL,                  150,  22,   6,   1,   2,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //08
-	M( 1945, MAX_YEAR,   0,  65, STR_2016_STATUE,                  40,   0,   2,   0,   0,
+	MS(1945, MAX_YEAR,   0,  65, STR_2016_STATUE,                  40,   0,   2,   0,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //09
-	M( 1945, MAX_YEAR,   0,  65, STR_2017_FOUNTAIN,                40,   0,   2,   0,   0,
+	MS(1945, MAX_YEAR,   0,  65, STR_2017_FOUNTAIN,                40,   0,   2,   0,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //0A
-	M(    0, MAX_YEAR,   0,  60, STR_2018_PARK,                    75,   0,   2,   0,   0,
+	MS(   0, MAX_YEAR,   0,  60, STR_2018_PARK,                    75,   0,   2,   0,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //0B
-	M( 1935, MAX_YEAR,   0,  60, STR_2018_PARK,                    75,   0,   2,   0,   0,
+	MS(1935, MAX_YEAR,   0,  60, STR_2018_PARK,                    75,   0,   2,   0,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //0C
-	M( 1951, MAX_YEAR, 150, 130, STR_2019_OFFICE_BLOCK,           110,  65,   8,   2,   4,
+	MS(1951, MAX_YEAR, 150, 130, STR_2019_OFFICE_BLOCK,           110,  65,   8,   2,   4,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //0D
-	M( 1930, 1960,      95, 110, STR_201A_SHOPS_AND_OFFICES,      100,  48,   6,   2,   3,
+	MS(1930, 1960,      95, 110, STR_201A_SHOPS_AND_OFFICES,      100,  48,   6,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //0E
-	M( 1930, 1960,      95, 105, STR_201A_SHOPS_AND_OFFICES,      100,  48,   6,   2,   3,
+	MS(1930, 1960,      95, 105, STR_201A_SHOPS_AND_OFFICES,      100,  48,   6,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //0F
-	M( 1930, 1960,      95, 107, STR_201A_SHOPS_AND_OFFICES,      100,  48,   6,   2,   3,
+	MS(1930, 1960,      95, 107, STR_201A_SHOPS_AND_OFFICES,      100,  48,   6,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //10
-	M( 1977, MAX_YEAR, 130, 200, STR_201B_MODERN_OFFICE_BUILDING, 150,  50,  10,   3,   6,
+	MS(1977, MAX_YEAR, 130, 200, STR_201B_MODERN_OFFICE_BUILDING, 150,  50,  10,   3,   6,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //11
-	M( 1983, MAX_YEAR,   6, 145, STR_201C_WAREHOUSE,              110,  10,   6,   3,   8,
+	MS(1983, MAX_YEAR,   6, 145, STR_201C_WAREHOUSE,              110,  10,   6,   3,   8,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //12
-	M( 1985, MAX_YEAR, 110, 155, STR_201D_OFFICE_BLOCK,           110,  55,   6,   2,   6,
+	MS(1985, MAX_YEAR, 110, 155, STR_201D_OFFICE_BLOCK,           110,  55,   6,   2,   6,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //13
-	M(    0, MAX_YEAR,  65, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
+	MS(   0, MAX_YEAR,  65, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
 	   BUILDING_IS_STADIUM | TILE_SIZE_2x2,
 	   HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //14
-	M(    0, MAX_YEAR,   0, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
+	MS(   0, MAX_YEAR,   0, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //15
-	M(    0, MAX_YEAR,   0, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
+	MS(   0, MAX_YEAR,   0, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //16
-	M(    0, MAX_YEAR,   0, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
+	MS(   0, MAX_YEAR,   0, 250, STR_201E_STADIUM,                300,   5,   4,   0,   0,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //17
-	M(    0, 1951,      15,  70, STR_201F_OLD_HOUSES,              75,   6,   3,   1,   0,
+	MS(   0, 1951,      15,  70, STR_201F_OLD_HOUSES,              75,   6,   3,   1,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //18
-	M(    0, 1952,      12,  75, STR_2036_COTTAGES,                75,   7,   3,   1,   0,
+	MS(   0, 1952,      12,  75, STR_2036_COTTAGES,                75,   7,   3,   1,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //19
-	M( 1931, MAX_YEAR,  13,  71, STR_2037_HOUSES,                  75,   8,   3,   1,   0,
+	MS(1931, MAX_YEAR,  13,  71, STR_2037_HOUSES,                  75,   8,   3,   1,   0,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //1A
-	M( 1935, MAX_YEAR, 100, 135, STR_2038_FLATS,                  100,  35,   7,   2,   2,
+	MS(1935, MAX_YEAR, 100, 135, STR_2038_FLATS,                  100,  35,   7,   2,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //1B
-	M( 1963, MAX_YEAR, 170, 145, STR_2039_TALL_OFFICE_BLOCK,      170,  50,   8,   3,   3,
+	MS(1963, MAX_YEAR, 170, 145, STR_2039_TALL_OFFICE_BLOCK,      170,  50,   8,   3,   3,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //1C
-	M(    0, 1955,     100, 132, STR_203A_SHOPS_AND_OFFICES,      135,  40,   6,   2,   3,
+	MS(   0, 1955,     100, 132, STR_203A_SHOPS_AND_OFFICES,      135,  40,   6,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //1D
-	M( 1973, MAX_YEAR, 180, 155, STR_203B_SHOPS_AND_OFFICES,      180,  64,   8,   3,   3,
+	MS(1973, MAX_YEAR, 180, 155, STR_203B_SHOPS_AND_OFFICES,      180,  64,   8,   3,   3,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //1E
-	M(    0, MAX_YEAR,  35, 220, STR_203C_THEATER,                230,  23,   8,   2,   2,
+	MS(   0, MAX_YEAR,  35, 220, STR_203C_THEATER,                230,  23,   8,   2,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //1F
-	M( 1958, MAX_YEAR,  65, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
+	MS(1958, MAX_YEAR,  65, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
 	   BUILDING_IS_STADIUM | TILE_SIZE_2x2,
 	   HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //20
-	M( 1958, MAX_YEAR,   0, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
+	MS(1958, MAX_YEAR,   0, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //21
-	M( 1958, MAX_YEAR,   0, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
+	MS(1958, MAX_YEAR,   0, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //22
-	M( 1958, MAX_YEAR,   0, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
+	MS(1958, MAX_YEAR,   0, 250, STR_203D_STADIUM,                300,   5,   4,   0,   0,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //23
-	M( 2000, MAX_YEAR, 140, 170, STR_203E_OFFICES,                250,  65,   8,   3,   2,
+	MS(2000, MAX_YEAR, 140, 170, STR_203E_OFFICES,                250,  65,   8,   3,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //24
-	M(    0, 1960,      15,  70, STR_203F_HOUSES,                  75,   6,   3,   1,   1,
+	MS(   0, 1960,      15,  70, STR_203F_HOUSES,                  75,   6,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //25
-	M(    0, 1960,      15,  70, STR_203F_HOUSES,                  75,   6,   3,   1,   1,
+	MS(   0, 1960,      15,  70, STR_203F_HOUSES,                  75,   6,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //26
-	M( 1945, MAX_YEAR,  35, 210, STR_2040_CINEMA,                 230,  23,   8,   2,   2,
+	MS(1945, MAX_YEAR,  35, 210, STR_2040_CINEMA,                 230,  23,   8,   2,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //27
-	M( 1983, MAX_YEAR, 180, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
+	MS(1983, MAX_YEAR, 180, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
 	   TILE_SIZE_2x2,
 	   HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 |HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //28
-	M( 1983, MAX_YEAR,   0, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
+	MS(1983, MAX_YEAR,   0, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //29
-	M( 1983, MAX_YEAR,   0, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
+	MS(1983, MAX_YEAR,   0, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //2A
-	M( 1983, MAX_YEAR,   0, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
+	MS(1983, MAX_YEAR,   0, 250, STR_2041_SHOPPING_MALL,          300,   5,   8,   2,   3,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //2B
-	M(    0, MAX_YEAR,  80, 100, STR_2038_FLATS,                   90,  20,   5,   2,   2,
+	MS(   0, MAX_YEAR,  80, 100, STR_2038_FLATS,                   90,  20,   5,   2,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //2C
-	M(    0, MAX_YEAR,  80, 100, STR_2038_FLATS,                   90,  20,   5,   2,   2,
+	MS(   0, MAX_YEAR,  80, 100, STR_2038_FLATS,                   90,  20,   5,   2,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE  | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //2D
-	M(    0, MAX_YEAR,  16,  70, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  16,  70, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //2E
-	M(    0, MAX_YEAR,  16,  70, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  16,  70, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //2F
-	M(    0, 1963,      14,  80, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
+	MS(   0, 1963,      14,  80, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //30
-	M(    0, 1963,      14,  80, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
+	MS(   0, 1963,      14,  80, STR_203F_HOUSES,                  70,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //31
-	M( 1966, MAX_YEAR, 135, 150, STR_200F_TALL_OFFICE_BLOCK,      120,  60,   8,   3,   4,
+	MS(1966, MAX_YEAR, 135, 150, STR_200F_TALL_OFFICE_BLOCK,      120,  60,   8,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //32
-	M( 1966, MAX_YEAR, 135, 150, STR_200F_TALL_OFFICE_BLOCK,      120,  60,   8,   3,   4,
+	MS(1966, MAX_YEAR, 135, 150, STR_200F_TALL_OFFICE_BLOCK,      120,  60,   8,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //33
-	M( 1970, MAX_YEAR, 170, 170, STR_200F_TALL_OFFICE_BLOCK,      130,  70,   9,   3,   4,
+	MS(1970, MAX_YEAR, 170, 170, STR_200F_TALL_OFFICE_BLOCK,      130,  70,   9,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //34
-	M( 1970, MAX_YEAR, 170, 170, STR_200F_TALL_OFFICE_BLOCK,      130,  70,   9,   3,   4,
+	MS(1970, MAX_YEAR, 170, 170, STR_200F_TALL_OFFICE_BLOCK,      130,  70,   9,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //35
-	M( 1974, MAX_YEAR, 210, 200, STR_200F_TALL_OFFICE_BLOCK,      140,  80,  10,   3,   5,
+	MS(1974, MAX_YEAR, 210, 200, STR_200F_TALL_OFFICE_BLOCK,      140,  80,  10,   3,   5,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //36
-	M( 1974, MAX_YEAR, 210, 200, STR_200F_TALL_OFFICE_BLOCK,      140,  80,  10,   3,   5,
+	MS(1974, MAX_YEAR, 210, 200, STR_200F_TALL_OFFICE_BLOCK,      140,  80,  10,   3,   5,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //37
-	M(    0, MAX_YEAR,  10,  60, STR_203F_HOUSES,                  60,   5,   2,   1,   1,
+	MS(   0, MAX_YEAR,  10,  60, STR_203F_HOUSES,                  60,   5,   2,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //38
-	M(    0, MAX_YEAR,  10,  60, STR_203F_HOUSES,                  60,   5,   2,   1,   1,
+	MS(   0, MAX_YEAR,  10,  60, STR_203F_HOUSES,                  60,   5,   2,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //39
-	M(    0, MAX_YEAR,  25, 100, STR_201A_SHOPS_AND_OFFICES,       80,  20,   3,   1,   1,
+	MS(   0, MAX_YEAR,  25, 100, STR_201A_SHOPS_AND_OFFICES,       80,  20,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //3A
-	M(    0, MAX_YEAR,  25, 100, STR_201A_SHOPS_AND_OFFICES,       80,  20,   3,   1,   1,
+	MS(   0, MAX_YEAR,  25, 100, STR_201A_SHOPS_AND_OFFICES,       80,  20,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //3B
-	M(    0, MAX_YEAR,   6,  85, STR_2012_CHURCH,                 230,   2,   2,   0,   0,
+	MS(   0, MAX_YEAR,   6,  85, STR_2012_CHURCH,                 230,   2,   2,   0,   0,
 	   BUILDING_IS_CHURCH | TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //3C
-	M(    0, MAX_YEAR,   6,  85, STR_2012_CHURCH,                 230,   2,   2,   0,   0,
+	MS(   0, MAX_YEAR,   6,  85, STR_2012_CHURCH,                 230,   2,   2,   0,   0,
 	   BUILDING_IS_CHURCH | TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //3D
-	M(    0, MAX_YEAR,  17,  80, STR_203F_HOUSES,                  80,   7,   3,   1,   1,
+	MS(   0, MAX_YEAR,  17,  80, STR_203F_HOUSES,                  80,   7,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //3E
-	M(    0, MAX_YEAR,  17,  80, STR_203F_HOUSES,                  80,   7,   3,   1,   1,
+	MS(   0, MAX_YEAR,  17,  80, STR_203F_HOUSES,                  80,   7,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //3F
-	M(    0, 1960,      90, 140, STR_201A_SHOPS_AND_OFFICES,      110,  45,   6,   2,   3,
+	MS(   0, 1960,      90, 140, STR_201A_SHOPS_AND_OFFICES,      110,  45,   6,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //40
-	M(    0, 1960,      90, 140, STR_201A_SHOPS_AND_OFFICES,      110,  45,   6,   2,   3,
+	MS(   0, 1960,      90, 140, STR_201A_SHOPS_AND_OFFICES,      110,  45,   6,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //41
-	M( 1972, MAX_YEAR, 140, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   3,
+	MS(1972, MAX_YEAR, 140, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   3,
 	   TILE_SIZE_1x2,
 	   HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //42
-	M( 1972, MAX_YEAR,   0, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   2,
+	MS(1972, MAX_YEAR,   0, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   2,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //43
-	M( 1972, MAX_YEAR, 140, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   3,
+	MS(1972, MAX_YEAR, 140, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   3,
 	   TILE_SIZE_1x2,
 	   HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //44
-	M( 1972, MAX_YEAR,   0, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   2,
+	MS(1972, MAX_YEAR,   0, 160, STR_2015_HOTEL,                  160,  25,   6,   1,   2,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //45
-	M( 1963, MAX_YEAR, 105, 130, STR_201A_SHOPS_AND_OFFICES,      105,  50,   7,   2,   3,
+	MS(1963, MAX_YEAR, 105, 130, STR_201A_SHOPS_AND_OFFICES,      105,  50,   7,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //46
-	M( 1963, MAX_YEAR, 105, 130, STR_201A_SHOPS_AND_OFFICES,      105,  50,   7,   2,   3,
+	MS(1963, MAX_YEAR, 105, 130, STR_201A_SHOPS_AND_OFFICES,      105,  50,   7,   2,   3,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //47
-	M( 1978, MAX_YEAR, 190, 190, STR_200F_TALL_OFFICE_BLOCK,      135,  75,   9,   3,   4,
+	MS(1978, MAX_YEAR, 190, 190, STR_200F_TALL_OFFICE_BLOCK,      135,  75,   9,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //48
-	M( 1978, MAX_YEAR, 190, 190, STR_200F_TALL_OFFICE_BLOCK,      135,  75,   9,   3,   4,
+	MS(1978, MAX_YEAR, 190, 190, STR_200F_TALL_OFFICE_BLOCK,      135,  75,   9,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //49
-	M( 1967, MAX_YEAR, 250, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
+	MS(1967, MAX_YEAR, 250, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
 	   TILE_SIZE_2x1,
 	   HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //4A
-	M( 1967, MAX_YEAR,   0, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
+	MS(1967, MAX_YEAR,   0, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //4B
-	M( 1967, MAX_YEAR, 250, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
+	MS(1967, MAX_YEAR, 250, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
 	   TILE_SIZE_2x1,
 	   HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //4C
-	M( 1967, MAX_YEAR,   0, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
+	MS(1967, MAX_YEAR,   0, 140, STR_200F_TALL_OFFICE_BLOCK,      200,  60,   7,   2,   2,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //4D
-	M(    0, MAX_YEAR,  16,  80, STR_203F_HOUSES,                  80,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  16,  80, STR_203F_HOUSES,                  80,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //4E
-	M(    0, MAX_YEAR,  16,  80, STR_203F_HOUSES,                  80,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  16,  80, STR_203F_HOUSES,                  80,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //4F
-	M(    0, MAX_YEAR,  16,  80, STR_203F_HOUSES,                  80,   5,   3,   1,   2,
+	MS(   0, MAX_YEAR,  16,  80, STR_203F_HOUSES,                  80,   5,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //50
-	M(    0, MAX_YEAR,   7,  30, STR_203F_HOUSES,                  30,   4,   3,   1,   1,
+	MS(   0, MAX_YEAR,   7,  30, STR_203F_HOUSES,                  30,   4,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //51
-	M(    0, MAX_YEAR,  45, 130, STR_2038_FLATS,                   95,  15,   6,   2,   1,
+	MS(   0, MAX_YEAR,  45, 130, STR_2038_FLATS,                   95,  15,   6,   2,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //52
-	M(    0, MAX_YEAR,   8,  90, STR_2012_CHURCH,                 200,   3,   2,   0,   0,
+	MS(   0, MAX_YEAR,   8,  90, STR_2012_CHURCH,                 200,   3,   2,   0,   0,
 	   BUILDING_IS_CHURCH | TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //53
-	M(    0, MAX_YEAR,  18,  80, STR_203F_HOUSES,                  80,   7,   3,   1,   2,
+	MS(   0, MAX_YEAR,  18,  80, STR_203F_HOUSES,                  80,   7,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
 	   CT_PASSENGERS, CT_MAIL, CT_FOOD), //54
-	M( 1973, MAX_YEAR,  90, 110, STR_2038_FLATS,                   95,  24,   6,   2,   1,
+	MS(1973, MAX_YEAR,  90, 110, STR_2038_FLATS,                   95,  24,   6,   2,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //55
-	M( 1962, MAX_YEAR, 120, 120, STR_2038_FLATS,                   95,  25,   6,   2,   1,
+	MS(1962, MAX_YEAR, 120, 120, STR_2038_FLATS,                   95,  25,   6,   2,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //56
-	M( 1984, MAX_YEAR, 250, 190, STR_200F_TALL_OFFICE_BLOCK,      140,  80,   8,   3,   4,
+	MS(1984, MAX_YEAR, 250, 190, STR_200F_TALL_OFFICE_BLOCK,      140,  80,   8,   3,   4,
 	   TILE_SIZE_2x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //57
-	M( 1984, MAX_YEAR,   0, 190, STR_200F_TALL_OFFICE_BLOCK,      140,  80,   8,   3,   4,
+	MS(1984, MAX_YEAR,   0, 190, STR_200F_TALL_OFFICE_BLOCK,      140,  80,   8,   3,   4,
 	   TILE_NO_FLAG,
 	   HZ_SUBTROPIC,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //58
-	M(    0, MAX_YEAR,  80, 110, STR_2038_FLATS,                   95,  23,   6,   2,   1,
+	MS(   0, MAX_YEAR,  80, 110, STR_2038_FLATS,                   95,  23,   6,   2,   1,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //59
-	M( 1993, MAX_YEAR, 180, 180, STR_200F_TALL_OFFICE_BLOCK,      150,  90,   8,   3,   4,
+	MS(1993, MAX_YEAR, 180, 180, STR_200F_TALL_OFFICE_BLOCK,      150,  90,   8,   3,   4,
 	   TILE_SIZE_1x1,
 	   HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_GOODS), //5A
-	M(    0, MAX_YEAR,   8,  90, STR_2012_CHURCH,                 200,   3,   2,   0,   0,
+	MS(   0, MAX_YEAR,   8,  90, STR_2012_CHURCH,                 200,   3,   2,   0,   0,
 	   BUILDING_IS_CHURCH | TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //5B
-	M(    0, MAX_YEAR,  18,  90, STR_203F_HOUSES,                  90,   5,   6,   2,   2,
+	MS(   0, MAX_YEAR,  18,  90, STR_203F_HOUSES,                  90,   5,   6,   2,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //5C
-	M(    0, MAX_YEAR,   7,  70, STR_203F_HOUSES,                  50,   3,   3,   1,   1,
+	MS(   0, MAX_YEAR,   7,  70, STR_203F_HOUSES,                  50,   3,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //5D
-	M(    0, MAX_YEAR,  15,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  15,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //5E
-	M(    0, MAX_YEAR,  17,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  17,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //5F
-	M(    0, MAX_YEAR,  19,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  19,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //60
-	M(    0, MAX_YEAR,  21,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
+	MS(   0, MAX_YEAR,  21,  80, STR_203F_HOUSES,                  75,   6,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //61
-	M(    0, MAX_YEAR,  75, 160, STR_200F_TALL_OFFICE_BLOCK,      130,  20,   8,   4,   2,
+	MS(   0, MAX_YEAR,  75, 160, STR_200F_TALL_OFFICE_BLOCK,      130,  20,   8,   4,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //62
-	M(    0, MAX_YEAR,  35,  90, STR_203F_HOUSES,                  80,   9,   4,   1,   2,
+	MS(   0, MAX_YEAR,  35,  90, STR_203F_HOUSES,                  80,   9,   4,   1,   2,
 	   TILE_SIZE_1x2,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //63
-	M(    0, MAX_YEAR,   0,  90, STR_203F_HOUSES,                  80,   0,   4,   1,   2,
+	MS(   0, MAX_YEAR,   0,  90, STR_203F_HOUSES,                  80,   0,   4,   1,   2,
 	   TILE_NO_FLAG,
 	   HZ_NOZNS,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //64
-	M(    0, MAX_YEAR,  85, 150, STR_200F_TALL_OFFICE_BLOCK,      130,  18,   8,   4,   2,
+	MS(   0, MAX_YEAR,  85, 150, STR_200F_TALL_OFFICE_BLOCK,      130,  18,   8,   4,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //65
-	M(    0, MAX_YEAR,  11,  60, STR_2059_IGLOO,                   45,   3,   3,   1,   1,
+	MS(   0, MAX_YEAR,  11,  60, STR_2059_IGLOO,                   45,   3,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //66
-	M(    0, MAX_YEAR,  10,  60, STR_205A_TEPEES,                  45,   3,   3,   1,   1,
+	MS(   0, MAX_YEAR,  10,  60, STR_205A_TEPEES,                  45,   3,   3,   1,   1,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //67
-	M(    0, MAX_YEAR,  67, 140, STR_201A_SHOPS_AND_OFFICES,      130,  22,   8,   4,   4,
+	MS(   0, MAX_YEAR,  67, 140, STR_201A_SHOPS_AND_OFFICES,      130,  22,   8,   4,   4,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), //68
-	M(    0, MAX_YEAR,  86, 145, STR_201A_SHOPS_AND_OFFICES,      130,  23,   8,   4,   4,
+	MS(   0, MAX_YEAR,  86, 145, STR_201A_SHOPS_AND_OFFICES,      130,  23,   8,   4,   4,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), //69
-	M(    0, MAX_YEAR,  95, 165, STR_200F_TALL_OFFICE_BLOCK,      130,  28,   8,   4,   2,
+	MS(   0, MAX_YEAR,  95, 165, STR_200F_TALL_OFFICE_BLOCK,      130,  28,   8,   4,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //6A
-	M(    0, MAX_YEAR,  30,  90, STR_2016_STATUE,                  70,  10,   4,   1,   2,
+	MS(   0, MAX_YEAR,  30,  90, STR_2016_STATUE,                  70,  10,   4,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //6B
-	M(    0, MAX_YEAR,  25,  75, STR_205B_TEAPOT_HOUSE,            65,   8,   3,   1,   2,
+	MS(   0, MAX_YEAR,  25,  75, STR_205B_TEAPOT_HOUSE,            65,   8,   3,   1,   2,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_CANDY), //6C
-	M(    0, MAX_YEAR,  18,  85, STR_205C_PIGGY_BANK,              95,   7,   3,   2,   4,
+	MS(   0, MAX_YEAR,  18,  85, STR_205C_PIGGY_BANK,              95,   7,   3,   2,   4,
 	   TILE_SIZE_1x1,
 	   HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
 	   CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), //6D
 };
-#undef M
+#undef MS
+
+/** Make sure we have the right number of elements: one entry for each house */
 assert_compile(lengthof(_original_house_specs) == NEW_HOUSE_OFFSET);
--- a/src/table/tree_land.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/table/tree_land.h	Sat Apr 21 08:23:57 2007 +0000
@@ -25,7 +25,7 @@
 	{ { 3, 9 }, { 8, 2 }, { 9, 9 }, { 1, 5 } }
 };
 
-static const PalSpriteID _tree_layout_sprite[164+(79-48+1)][4] = {
+static const PalSpriteID _tree_layout_sprite[164 + (79 - 48 + 1)][4] = {
 	{ { 0x652, PAL_NONE }, { 0x659, PAL_NONE }, { 0x660, PAL_NONE }, { 0x667, PAL_NONE } }, /* 0 */
 	{ { 0x652, PAL_NONE }, { 0x667, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x675, PAL_NONE } }, /* 1 */
 	{ { 0x652, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x659, PAL_NONE }, { 0x675, PAL_NONE } }, /* 2 */
--- a/src/terraform_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/terraform_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -273,7 +273,7 @@
 };
 
 static const WindowDesc _terraform_desc = {
-	WDP_ALIGN_TBR, 22+36, 158, 36,
+	WDP_ALIGN_TBR, 22 + 36, 158, 36,
 	WC_SCEN_LAND_GEN, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_terraform_widgets,
--- a/src/texteff.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/texteff.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -246,7 +246,7 @@
 	/* Paint the messages starting with the lowest at the bottom */
 	for (uint y = 13; count-- != 0; y += 13) {
 		DoDrawString(_textmsg_list[count].message, _textmsg_box.x + 3, _screen.height - _textmsg_box.y - y + 1, _textmsg_list[count].color);
- 	}
+	}
 
 	/* Make sure the data is updated next flush */
 	_video_driver->make_dirty(x, y, width, height);
--- a/src/town.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/town.h	Sat Apr 21 08:23:57 2007 +0000
@@ -141,6 +141,9 @@
 	/* Index in town array */
 	TownID index;
 
+	/* If this is a larger town, and should grow more quickly. */
+	bool larger_town;
+
 	/* NOSAVE: UpdateTownRadius updates this given the house count. */
 	uint16 radius[5];
 
@@ -181,6 +184,12 @@
 	const struct GRFFile *grffile;     ///< grf file that introduced this house
 };
 
+enum TownSizeMode {
+	TSM_RANDOM,
+	TSM_FIXED,
+	TSM_CITY
+};
+
 VARDEF HouseSpec _house_specs[HOUSE_MAX];
 
 uint32 GetWorldPopulation();
@@ -189,7 +198,7 @@
 void InitializeTown();
 void ShowTownViewWindow(TownID town);
 void ExpandTown(Town *t);
-Town *CreateRandomTown(uint attempts, uint size_mode);
+Town *CreateRandomTown(uint attempts, TownSizeMode mode, uint size);
 
 enum {
 	ROAD_REMOVE = 0,
@@ -279,7 +288,7 @@
 
 /**
  * Check if a TownID is valid.
- * @param TownID to inquiry
+ * @param index to inquiry in the pool of town
  * @return true if it exists
  */
 static inline bool IsValidTownID(TownID index)
--- a/src/town_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/town_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -246,9 +246,9 @@
 static void MarkTownSignDirty(Town *t)
 {
 	MarkAllViewportsDirty(
-		t->sign.left-6,
-		t->sign.top-3,
-		t->sign.left+t->sign.width_1*4+12,
+		t->sign.left - 6,
+		t->sign.top - 3,
+		t->sign.left + t->sign.width_1 * 4 + 12,
 		t->sign.top + 45
 	);
 }
@@ -530,10 +530,10 @@
 no_slope:
 			/* Tile has no slope
 			 * Disallow the road if any neighboring tile has a road. */
-			if (HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir+1]))), dir^2) ||
-					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir+3]))), dir^2) ||
-					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir+1]) + ToTileIndexDiff(_roadblock_tileadd[dir+2]))), dir) ||
-					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir+3]) + ToTileIndexDiff(_roadblock_tileadd[dir+2]))), dir))
+			if (HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 1]))), dir ^ 2) ||
+					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 3]))), dir ^ 2) ||
+					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 1]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2]))), dir) ||
+					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 3]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2]))), dir))
 				return false;
 
 			/* Otherwise allow */
@@ -644,7 +644,7 @@
 		}
 		rcmd = (RoadBits)((1 << a) + (1 << b));
 
-	} else if (block < 5 && !HASBIT(mask,block^2)) {
+	} else if (block < 5 && !HASBIT(mask, block ^ 2)) {
 		/* Continue building on a partial road.
 		 * Always OK. */
 		_grow_town_result = 0;
@@ -771,7 +771,7 @@
 
 		/* Select a random bit from the blockmask, walk a step
 		 * and continue the search from there. */
-		do block = Random() & 3; while (!HASBIT(mask,block));
+		do block = Random() & 3; while (!HASBIT(mask, block));
 		tile += ToTileIndexDiff(_roadblock_tileadd[block]);
 
 		if (IsTileType(tile, MP_STREET)) {
@@ -954,7 +954,16 @@
 	t->max_mail = t->population >> 4;
 }
 
-static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, uint size_mode)
+/**
+ * Does the actual town creation.
+ *
+ * @param t The town
+ * @param tile Where to put it
+ * @param townnameparts The town name
+ * @param size_mode How the size should be determined
+ * @param size Parameter for size determination
+ */
+static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSizeMode size_mode, uint size)
 {
 	int x, i;
 
@@ -1003,10 +1012,25 @@
 	UpdateTownVirtCoord(t);
 	_town_sort_dirty = true;
 
-	if (size_mode == 0) {
-		x = (Random() & 0xF) + 8;
-	} else {
-		x = (size_mode - 1) * 16 + 3;
+	/* Random town size. */
+	x = (Random() & 0xF) + 8;
+
+	switch (size_mode) {
+		default: NOT_REACHED();
+
+		case TSM_RANDOM:
+			t->larger_town = false;
+			break;
+
+		case TSM_FIXED:
+			x = size * 16 + 3;
+			t->larger_town = false;
+			break;
+
+		case TSM_CITY:
+			x *= _patches.initial_city_size;
+			t->larger_town = true;
+			break;
 	}
 
 	t->num_houses += x;
@@ -1051,8 +1075,8 @@
  * as it might be possible in the future to fund your own town :)
  * @param tile coordinates where town is built
  * @param flags type of operation
- * @param p1 size of the town (0 = random, 1 = small, 2 = medium, 3 = large)
- * @param p2 unused
+ * @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)
 {
@@ -1061,6 +1085,7 @@
 
 	/* Only in the scenario editor */
 	if (_game_mode != GM_EDITOR) return CMD_ERROR;
+	if (p2 > TSM_CITY) return CMD_ERROR;
 
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
 
@@ -1088,13 +1113,13 @@
 	/* Create the town */
 	if (flags & DC_EXEC) {
 		_generating_world = true;
-		DoCreateTown(t, tile, townnameparts, p1);
+		DoCreateTown(t, tile, townnameparts, (TownSizeMode)p2, p1);
 		_generating_world = false;
 	}
 	return 0;
 }
 
-Town *CreateRandomTown(uint attempts, uint size_mode)
+Town *CreateRandomTown(uint attempts, TownSizeMode mode, uint size)
 {
 	TileIndex tile;
 	Town *t;
@@ -1118,7 +1143,7 @@
 		t = AllocateTown();
 		if (t == NULL) break;
 
-		DoCreateTown(t, tile, townnameparts, size_mode);
+		DoCreateTown(t, tile, townnameparts, mode, size);
 		return t;
 	} while (--attempts);
 	return NULL;
@@ -1130,17 +1155,20 @@
 {
 	uint num = 0;
 	uint n = ScaleByMapSize(_num_initial_towns[_opt.diff.number_towns] + (Random() & 7));
+	uint num_cities = _patches.larger_towns == 0 ? 0 : n / _patches.larger_towns;
 
 	SetGeneratingWorldProgress(GWP_TOWN, n);
 
 	do {
 		IncreaseGeneratingWorldProgress(GWP_TOWN);
 		/* try 20 times to create a random-sized town for the first loop. */
-		if (CreateRandomTown(20, 0) != NULL) num++;
+		TownSizeMode mode = num_cities > 0 ? TSM_CITY : TSM_RANDOM;
+		if (CreateRandomTown(20, mode, _patches.initial_city_size) != NULL) num++;
+		if (num_cities > 0) num_cities--;
 	} while (--n);
 
 	/* give it a last try, but now more aggressive */
-	if (num == 0 && CreateRandomTown(10000, 0) == NULL) {
+	if (num == 0 && CreateRandomTown(10000, TSM_RANDOM, 0) == NULL) {
 		if (GetNumTowns() == 0) {
 			/* XXX - can we handle that more gracefully? */
 			if (_game_mode != GM_EDITOR) error("Could not generate any town");
@@ -1543,6 +1571,7 @@
 
 /**
  * Search callback function for TownActionBuildStatue
+ * @param tile on which to perform the search
  * @param town_id The town_id for which we want a statue
  * @return the result of the test
  */
@@ -1717,7 +1746,7 @@
 	uint growth_multiplier = _patches.town_growth_rate != 0 ? _patches.town_growth_rate - 1 : 1;
 
 	m >>= growth_multiplier;
-	if (_patches.larger_towns != 0 && (t->index % _patches.larger_towns) == 0) m /= 2;
+	if (t->larger_town) m /= 2;
 
 	t->growth_rate = m / (t->num_houses / 50 + 1);
 	if (m <= t->grow_counter)
@@ -1976,6 +2005,9 @@
 
 	    SLE_VAR(Town, exclusivity,           SLE_UINT8),
 	    SLE_VAR(Town, exclusive_counter,     SLE_UINT8),
+
+	SLE_CONDVAR(Town, larger_town,           SLE_BOOL,                  56, SL_MAX_VERSION),
+
 	/* reserve extra space in savegame here. (currently 30 bytes) */
 	SLE_CONDNULL(30, 2, SL_MAX_VERSION),
 
--- a/src/train_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/train_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -63,7 +63,7 @@
  */
 void TrainPowerChanged(Vehicle* v)
 {
-	uint32 power = 0;
+	uint32 total_power = 0;
 	uint32 max_te = 0;
 
 	for (const Vehicle *u = v; u != NULL; u = u->next) {
@@ -76,19 +76,22 @@
 
 		const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type);
 
-		if (engine_has_power && rvi_u->power != 0) {
-			power += rvi_u->power;
-			/* Tractive effort in (tonnes * 1000 * 10 =) N */
-			max_te += (u->u.rail.cached_veh_weight * 10000 * rvi_u->tractive_effort) / 256;
+		if (engine_has_power) {
+			uint16 power = GetVehicleProperty(u, 0x0B, rvi_u->power);
+			if (power != 0) {
+				total_power += power;
+				/* Tractive effort in (tonnes * 1000 * 10 =) N */
+				max_te += (u->u.rail.cached_veh_weight * 10000 * GetVehicleProperty(u, 0x1F, rvi_u->tractive_effort)) / 256;
+			}
 		}
 
 		if (HASBIT(u->u.rail.flags, VRF_POWEREDWAGON) && (wagon_has_power)) {
-			power += RailVehInfo(u->u.rail.first_engine)->pow_wag_power;
+			total_power += RailVehInfo(u->u.rail.first_engine)->pow_wag_power;
 		}
 	}
 
-	if (v->u.rail.cached_power != power || v->u.rail.cached_max_te != max_te) {
-		v->u.rail.cached_power = power;
+	if (v->u.rail.cached_power != total_power || v->u.rail.cached_max_te != max_te) {
+		v->u.rail.cached_power = total_power;
 		v->u.rail.cached_max_te = max_te;
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
@@ -208,9 +211,10 @@
 			}
 
 			/* max speed is the minimum of the speed limits of all vehicles in the consist */
-			if ((rvi_u->railveh_type != RAILVEH_WAGON || _patches.wagon_speed_limits) &&
-				rvi_u->max_speed != 0 && !UsesWagonOverride(u))
-				max_speed = min(rvi_u->max_speed, max_speed);
+			if ((rvi_u->railveh_type != RAILVEH_WAGON || _patches.wagon_speed_limits) && !UsesWagonOverride(u)) {
+				uint16 speed = GetVehicleProperty(u, 0x09, rvi_u->max_speed);
+				if (speed != 0) max_speed = min(speed, max_speed);
+			}
 		}
 
 		/* check the vehicle length (callback) */
@@ -1981,6 +1985,8 @@
 	if (tfdd.best_length == (uint)-1) return_cmd_error(STR_883A_UNABLE_TO_FIND_ROUTE_TO);
 
 	if (flags & DC_EXEC) {
+		if (v->current_order.type == OT_LOADING) v->LeaveStation();
+
 		v->dest_tile = tfdd.tile;
 		v->current_order.type = OT_GOTO_DEPOT;
 		v->current_order.flags = OF_NON_STOP;
@@ -1989,8 +1995,7 @@
 		v->current_order.refit_cargo = CT_INVALID;
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		/* If there is no depot in front, reverse automatically */
-		if (tfdd.reverse)
-			DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
+		if (tfdd.reverse) DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
 	}
 
 	return 0;
@@ -2984,7 +2989,7 @@
 						} else if (HasSignalOnTrackdir(gp.new_tile, i)) {
 							v->cur_speed = 0;
 							v->subspeed = 0;
-							v->progress = 255-10;
+							v->progress = 255 - 10;
 							if (++v->load_unload_time_rem < _patches.wait_twoway_signal * 73) {
 								TileIndex o_tile = gp.new_tile + TileOffsByDiagDir(enterdir);
 								VehicleAtSignalData vasd;
@@ -3107,7 +3112,7 @@
  * train, then goes to the last wagon and deletes that. Each call to this function
  * will remove the last wagon of a crashed train. If this wagon was on a crossing,
  * or inside a tunnel, recalculate the signals as they might need updating
- * @param v the @Vehicle of which last wagon is to be removed
+ * @param v the Vehicle of which last wagon is to be removed
  */
 static void DeleteLastWagon(Vehicle *v)
 {
@@ -3473,8 +3478,11 @@
 
 	do {
 		const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
-		if (rvi->running_cost_base > 0)
-			cost += rvi->running_cost_base * _price.running_rail[rvi->running_cost_class];
+
+		byte cost_factor = GetVehicleProperty(v, 0x0D, rvi->running_cost_base);
+		if (cost_factor == 0) continue;
+
+		cost += cost_factor * _price.running_rail[rvi->running_cost_class];
 	} while ((v = GetNextVehicle(v)) != NULL);
 
 	return cost;
--- a/src/train_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/train_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -234,7 +234,7 @@
 		DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[5].top + 1);
 		DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
 		w->DrawViewport();
-	}	break;
+	} break;
 
 	case WE_CLICK: {
 		int wid = e->we.click.widget;
--- a/src/transparency_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/transparency_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -12,6 +12,23 @@
 #include "sound.h"
 #include "variables.h"
 
+enum TransparencyToolbarWidgets{
+	/* Widgets not toggled when pressing the X key */
+	TTW_WIDGET_SIGNS = 3,    ///< Make signs background transparent
+
+	/* Widgets toggled when pressing the X key */
+	TTW_WIDGET_TREES,        ///< Make trees transparent
+	TTW_WIDGET_HOUSES,       ///< Make houses transparent
+	TTW_WIDGET_INDUSTRIES,   ///< Make Industries transparent
+	TTW_WIDGET_BUILDINGS,    ///< Make player buildings and structures transparent
+	TTW_WIDGET_BRIDGES,      ///< Make bridges transparent
+	TTW_WIDGET_STRUCTURES,   ///< Make unmovable structures transparent
+};
+
+/** Toggle the bits of the transparencies variable
+ * when clicking on a widget, and play a sound
+ * @param widget been clicked.
+ */
 static void Transparent_Click(byte widget)
 {
 	TOGGLEBIT(_transparent_opt, widget);
@@ -22,15 +39,17 @@
 {
 	switch (e->event) {
 		case WE_PAINT:
-			for (uint i = 0; i < 7; i++) {
-				w->SetWidgetLoweredState(i + 3, HASBIT(_transparent_opt, i));
+			/* must be sure that the widgets show the transparency variable changes
+			 * also when we use shortcuts */
+			for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_STRUCTURES; i++) {
+				w->SetWidgetLoweredState(i, HASBIT(_transparent_opt, i - TTW_WIDGET_SIGNS));
 			}
 			w->DrawWidgets();
 			break;
 
 		case WE_CLICK:
-			if (e->we.click.widget >= 3) {
-				Transparent_Click(e->we.click.widget - 3);
+			if (e->we.click.widget >= TTW_WIDGET_SIGNS) {
+				Transparent_Click(e->we.click.widget - TTW_WIDGET_SIGNS);
 				MarkWholeScreenDirty();
 			}
 			break;
@@ -42,7 +61,8 @@
 {  WWT_CAPTION,   RESIZE_NONE,  7,  11, 162,   0,  13, STR_TRANSPARENCY_TOOLB,   STR_018C_WINDOW_TITLE_DRAG_THIS},
 {WWT_STICKYBOX,   RESIZE_NONE,  7, 163, 174,   0,  13, STR_NULL,                 STR_STICKY_BUTTON},
 
-/* transparency widgets: transparent signs, trees, houses, industries, player's buildings */
+/* transparency widgets:
+ * transparent signs, trees, houses, industries, player's buildings, bridges and unmovable structures */
 {   WWT_IMGBTN,   RESIZE_NONE,  7,   0,  21,  14,  35, SPR_IMG_PLACE_SIGN,   STR_TRANSPARENT_SIGNS_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  22,  43,  14,  35, SPR_IMG_PLANTTREES,   STR_TRANSPARENT_TREES_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  44,  65,  14,  35, SPR_IMG_TOWN,         STR_TRANSPARENT_HOUSES_DESC},
--- a/src/tree_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/tree_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -317,7 +317,7 @@
 struct TreeListEnt {
 	SpriteID image;
 	SpriteID pal;
-	byte x,y;
+	byte x, y;
 };
 
 static void DrawTile_Trees(TileInfo *ti)
--- a/src/tunnel_map.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/tunnel_map.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -7,6 +7,12 @@
 #include "tile.h"
 #include "tunnel_map.h"
 
+/**
+ * Gets the other end of the tunnel. Where a vehicle would reappear when it
+ * enters at the given tile.
+ * @param tile the tile to search from.
+ * @return the tile of the other end of the tunnel.
+ */
 TileIndex GetOtherTunnelEnd(TileIndex tile)
 {
 	DiagDirection dir = GetTunnelDirection(tile);
@@ -26,6 +32,13 @@
 }
 
 
+/**
+ * Is there a tunnel in the way in the given direction?
+ * @param tile the tile to search from.
+ * @param z    the 'z' to search on.
+ * @param dir  the direction to start searching to.
+ * @return true if and only if there is a tunnel.
+ */
 static bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
 {
 	TileIndexDiff delta = TileOffsByDiagDir(dir);
@@ -42,6 +55,12 @@
 		GetTunnelDirection(tile) == dir;
 }
 
+/**
+ * Is there a tunnel in the way in any direction?
+ * @param tile the tile to search from.
+ * @param z the 'z' to search on.
+ * @return true if and only if there is a tunnel.
+ */
 bool IsTunnelInWay(TileIndex tile, uint z)
 {
 	return
--- a/src/tunnelbridge_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -440,7 +440,7 @@
 
 
 /** Build Tunnel.
- * @param tile start tile of tunnel
+ * @param start_tile start tile of tunnel
  * @param flags type of operation
  * @param p1 railtype, 0x200 for road tunnel
  * @param p2 unused
--- a/src/unmovable_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/unmovable_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -27,8 +27,9 @@
 /** Destroy a HQ.
  * During normal gameplay you can only implicitely destroy a HQ when you are
  * rebuilding it. Otherwise, only water can destroy it.
- * @param tile tile coordinates where HQ is located to destroy
+ * @param pid Player requesting the destruction of his HQ
  * @param flags docommand flags of calling function
+ * @return cost of the operation
  */
 static int32 DestroyCompanyHQ(PlayerID pid, uint32 flags)
 {
--- a/src/unmovable_map.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/unmovable_map.h	Sat Apr 21 08:23:57 2007 +0000
@@ -6,88 +6,152 @@
 #define UNMOVABLE_MAP_H
 
 enum {
-	HQ_NUM_TILE = 4,
-	HQ_NUM_SIZE = 5
+	HQ_NUM_TILE = 4, ///< Number of HQ tiles
+	HQ_NUM_SIZE = 5  ///< Number of stages of an HQ
 };
 
+/** Types of unmovable structure */
 enum UnmovableType {
-	UNMOVABLE_TRANSMITTER = 0,
-	UNMOVABLE_LIGHTHOUSE  = 1,
-	UNMOVABLE_STATUE      = 2,
-	UNMOVABLE_OWNED_LAND  = 3,
-	UNMOVABLE_HQ_NORTH    = 0x80,
-	UNMOVABLE_HQ_WEST     = 0x81,
-	UNMOVABLE_HQ_EAST     = 0x82,
-	UNMOVABLE_HQ_SOUTH    = 0x83,
+	UNMOVABLE_TRANSMITTER = 0,    ///< The large antenna
+	UNMOVABLE_LIGHTHOUSE  = 1,    ///< The nice lighthouse
+	UNMOVABLE_STATUE      = 2,    ///< Statue in towns
+	UNMOVABLE_OWNED_LAND  = 3,    ///< Owned land 'flag'
+	UNMOVABLE_HQ_NORTH    = 0x80, ///< Offset for the northern HQ tile
+	UNMOVABLE_HQ_WEST     = 0x81, ///< Offset for the western HQ tile
+	UNMOVABLE_HQ_EAST     = 0x82, ///< Offset for the eastern HQ tile
+	UNMOVABLE_HQ_SOUTH    = 0x83, ///< Offset for the southern HQ tile
 
+	/** End of the HQ (rather end + 1 for IS_INT_INSIDE) */
 	UNMOVABLE_HQ_END      = UNMOVABLE_HQ_NORTH + HQ_NUM_SIZE * HQ_NUM_TILE
 };
 
 
 
+/**
+ * Gets the UnmovableType of the given unmovable tile
+ * @param t the tile to get the type from.
+ * @pre IsTileType(t, MP_UNMOVABLE)
+ * @return the type.
+ */
 static inline UnmovableType GetUnmovableType(TileIndex t)
 {
 	assert(IsTileType(t, MP_UNMOVABLE));
 	return (UnmovableType)_m[t].m5;
 }
 
-
+/**
+ * Does the given tile have a transmitter?
+ * @param t the tile to inspect.
+ * @return true if and only if the tile has a transmitter.
+ */
 static inline bool IsTransmitterTile(TileIndex t)
 {
-	return
-		IsTileType(t, MP_UNMOVABLE) &&
-		GetUnmovableType(t) == UNMOVABLE_TRANSMITTER;
+	return IsTileType(t, MP_UNMOVABLE) && GetUnmovableType(t) == UNMOVABLE_TRANSMITTER;
 }
 
-
+/**
+ * Is this unmovable tile an 'owned land' tile?
+ * @param t the tile to inspect.
+ * @pre IsTileType(t, MP_UNMOVABLE)
+ * @return true if and only if the tile is an 'owned land' tile.
+ */
 static inline bool IsOwnedLand(TileIndex t)
 {
 	assert(IsTileType(t, MP_UNMOVABLE));
 	return GetUnmovableType(t) == UNMOVABLE_OWNED_LAND;
 }
 
+/**
+ * Is the given tile (pre-)owned by someone (the little flags)?
+ * @param t the tile to inspect.
+ * @return true if and only if the tile is an 'owned land' tile.
+ */
 static inline bool IsOwnedLandTile(TileIndex t)
 {
 	return IsTileType(t, MP_UNMOVABLE) && IsOwnedLand(t);
 }
 
+/**
+ * Is this unmovable tile a HQ tile?
+ * @param t the tile to inspect.
+ * @pre IsTileType(t, MP_UNMOVABLE)
+ * @return true if and only if the tile is a HQ tile.
+ */
 static inline bool IsCompanyHQ(TileIndex t)
 {
+	assert(IsTileType(t, MP_UNMOVABLE));
 	return IS_INT_INSIDE(GetUnmovableType(t), UNMOVABLE_HQ_NORTH, UNMOVABLE_HQ_END);
 }
 
+/**
+ * Is this unmovable tile a statue?
+ * @param t the tile to inspect.
+ * @pre IsTileType(t, MP_UNMOVABLE)
+ * @return true if and only if the tile is a statue.
+ */
 static inline bool IsStatue(TileIndex t)
 {
 	assert(IsTileType(t, MP_UNMOVABLE));
 	return GetUnmovableType(t) == UNMOVABLE_STATUE;
 }
 
+/**
+ * Is the given tile a statue?
+ * @param t the tile to inspect.
+ * @return true if and only if the tile is a statue.
+ */
 static inline bool IsStatueTile(TileIndex t)
 {
 	return IsTileType(t, MP_UNMOVABLE) && IsStatue(t);
 }
 
+/**
+ * Get the town of the given statue tile.
+ * @param t the tile of the statue.
+ * @pre IsStatueTile(t)
+ * @return the town the given statue is in.
+ */
 static inline TownID GetStatueTownID(TileIndex t)
 {
-	assert(IsStatue(t));
+	assert(IsStatueTile(t));
 	return _m[t].m2;
 }
 
+/**
+ * Get the 'stage' of the HQ.
+ * @param t a tile of the HQ.
+ * @pre IsTileType(t, MP_UNMOVABLE) && IsCompanyHQ(t)
+ * @return the 'stage' of the HQ.
+ */
 static inline byte GetCompanyHQSize(TileIndex t)
 {
 	assert(IsTileType(t, MP_UNMOVABLE) && IsCompanyHQ(t));
 	return GB(_m[t].m5, 2, 3);
 }
 
+/**
+ * Get the 'section' (including stage) of the HQ.
+ * @param t a tile of the HQ.
+ * @pre IsTileType(t, MP_UNMOVABLE) && IsCompanyHQ(t)
+ * @return the 'section' of the HQ.
+ */
 static inline byte GetCompanyHQSection(TileIndex t)
 {
 	assert(IsTileType(t, MP_UNMOVABLE) && IsCompanyHQ(t));
 	return GB(_m[t].m5, 0, 5);
 }
 
-
+/**
+ * Enlarge the given HQ to the given size. If the new size
+ * is larger than the current size, nothing happens.
+ * @param t the tile of the HQ.
+ * @param size the new size of the HQ.
+ * @pre t is the northern tile of the HQ
+ */
 static inline void EnlargeCompanyHQ(TileIndex t, byte size)
 {
+	assert(GB(GetCompanyHQSection(t), 0, 2) == 0);
+
 	size *= 4;
 	if (size <= _m[t].m5 - UNMOVABLE_HQ_NORTH) return;
 
@@ -98,6 +162,13 @@
 }
 
 
+/**
+ * Make an Unmovable tile.
+ * @note do not use this function directly. Use one of the other Make* functions.
+ * @param t the tile to make unmovable.
+ * @param u the unmovable type of the tile.
+ * @param o the new owner of the tile.
+ */
 static inline void MakeUnmovable(TileIndex t, UnmovableType u, Owner o)
 {
 	SetTileType(t, MP_UNMOVABLE);
@@ -109,27 +180,51 @@
 }
 
 
+/**
+ * Make a transmitter tile.
+ * @param t the tile to make a transmitter.
+ */
 static inline void MakeTransmitter(TileIndex t)
 {
 	MakeUnmovable(t, UNMOVABLE_TRANSMITTER, OWNER_NONE);
 }
 
+/**
+ * Make a lighthouse tile.
+ * @param t the tile to make a transmitter.
+ */
 static inline void MakeLighthouse(TileIndex t)
 {
 	MakeUnmovable(t, UNMOVABLE_LIGHTHOUSE, OWNER_NONE);
 }
 
+/**
+ * Make a statue tile.
+ * @param t the tile to make a statue.
+ * @param o the owner of the statue.
+ * @param town_id the town the statue was built in.
+ */
 static inline void MakeStatue(TileIndex t, Owner o, TownID town_id)
 {
 	MakeUnmovable(t, UNMOVABLE_STATUE, o);
 	_m[t].m2 = town_id;
 }
 
+/**
+ * Make an 'owned land' tile.
+ * @param t the tile to make an 'owned land' tile.
+ * @param o the owner of the land.
+ */
 static inline void MakeOwnedLand(TileIndex t, Owner o)
 {
 	MakeUnmovable(t, UNMOVABLE_OWNED_LAND, o);
 }
 
+/**
+ * Make an HQ with the give tile as it's northern tile.
+ * @param t the tile to make the northern tile of a HQ.
+ * @param o the owner of the HQ.
+ */
 static inline void MakeCompanyHQ(TileIndex t, Owner o)
 {
 	MakeUnmovable(t + TileDiffXY(0, 0), UNMOVABLE_HQ_NORTH, o);
--- a/src/variables.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/variables.h	Sat Apr 21 08:23:57 2007 +0000
@@ -226,8 +226,9 @@
 	uint8 scrollwheel_scrolling;
 	uint8 scrollwheel_multiplier;
 
-	uint8 town_growth_rate; ///< Town growth rate
-	uint8 larger_towns;     ///< 1 in the specified number of towns will grow twice as fast
+	uint8 town_growth_rate;  ///< Town growth rate
+	uint8 larger_towns;      ///< The number of cities to build. These start off larger and grow twice as fast
+	uint8 initial_city_size; ///< Multiplier for the initial size of the cities compared to towns
 };
 
 VARDEF Patches _patches;
@@ -389,8 +390,8 @@
 StringID BindCString(const char *str);
 
 
-#define COPY_IN_DPARAM(offs,src,num) memcpy(_decode_parameters + offs, src, sizeof(uint32) * (num))
-#define COPY_OUT_DPARAM(dst,offs,num) memcpy(dst,_decode_parameters + offs, sizeof(uint32) * (num))
+#define COPY_IN_DPARAM(offs, src, num) memcpy(_decode_parameters + offs, src, sizeof(uint32) * (num))
+#define COPY_OUT_DPARAM(dst, offs, num) memcpy(dst, _decode_parameters + offs, sizeof(uint32) * (num))
 
 
 #define SET_EXPENSES_TYPE(x) _yearly_expenses_type = x;
--- a/src/vehicle.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/vehicle.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -188,9 +188,9 @@
 	}
 	FOR_ALL_VEHICLES(veh) {
 		if (without_crashed && (veh->vehstatus & VS_CRASHED) != 0) continue;
-		if ((veh->type == VEH_TRAIN || veh->type == VEH_ROAD) && (z==0xFF || veh->z_pos == z)) {
-			if ((veh->x_pos>>4) >= x1 && (veh->x_pos>>4) <= x2 &&
-					(veh->y_pos>>4) >= y1 && (veh->y_pos>>4) <= y2) {
+		if ((veh->type == VEH_TRAIN || veh->type == VEH_ROAD) && (z == 0xFF || veh->z_pos == z)) {
+			if ((veh->x_pos >> 4) >= x1 && (veh->x_pos >> 4) <= x2 &&
+					(veh->y_pos >> 4) >= y1 && (veh->y_pos >> 4) <= y2) {
 				return veh;
 			}
 		}
@@ -251,6 +251,8 @@
 						Vehicle *rotor = shadow->next;
 						rotor->cur_image = GetRotorImage(v);
 					}
+
+					UpdateAircraftCache(v);
 				}
 				break;
 			default: break;
@@ -419,7 +421,7 @@
 	int old_x = v->left_coord;
 	int old_y = v->top_coord;
 
-	new_hash = (x == INVALID_COORD) ? NULL : &_vehicle_position_hash[GEN_HASH(x,y)];
+	new_hash = (x == INVALID_COORD) ? NULL : &_vehicle_position_hash[GEN_HASH(x, y)];
 	old_hash = (old_x == INVALID_COORD) ? NULL : &_vehicle_position_hash[GEN_HASH(old_x, old_y)];
 
 	if (old_hash == new_hash) return;
@@ -568,6 +570,10 @@
 
 void DestroyVehicle(Vehicle *v)
 {
+	if (IsValidStationID(v->last_station_visited)) {
+		GetStation(v->last_station_visited)->loading_vehicles.remove(v);
+	}
+
 	if (IsEngineCountable(v)) {
 		GetPlayer(v->owner)->num_engines[v->engine_type]--;
 		if (v->owner == _local_player) InvalidateAutoreplaceWindow(v->engine_type);
@@ -767,7 +773,7 @@
 }
 
 /** Find the first cargo type that an engine can be refitted to.
- * @param engine Which engine to find cargo for.
+ * @param engine_type Which engine to find cargo for.
  * @return A climate dependent cargo type. CT_INVALID is returned if not refittable.
  */
 CargoID FindFirstRefittableCargo(EngineID engine_type)
@@ -784,7 +790,7 @@
 }
 
 /** Learn the price of refitting a certain engine
-* @param engine Which engine to refit
+* @param engine_type Which engine to refit
 * @return Price for refitting
 */
 int32 GetRefitCost(EngineID engine_type)
@@ -1837,6 +1843,17 @@
 
 	do {
 
+		if (!(flags & DC_EXEC)) {
+			/* Get the refit cost.
+			 * This is only needed when estimating as when the command is executed, the cost from the refit command is used.
+			 * This needs to be done for every single unit, so it should be done before checking if it's a multiheaded engine. */
+			CargoID new_cargo_type = GetEngineCargoType(v->engine_type);
+
+			if (new_cargo_type != v->cargo_type && new_cargo_type != CT_INVALID) {
+				total_cost += GetRefitCost(v->engine_type);
+			}
+		}
+
 		if (IsMultiheaded(v) && !IsTrainEngine(v)) {
 			/* we build the rear ends of multiheaded trains with the front ones */
 			continue;
@@ -1859,7 +1876,7 @@
 					/* We can't pay for refitting because we can't estimate refitting costs for a vehicle before it's build.
 					 * If we pay for it anyway, the cost and the estimated cost will not be the same and we will have an assert.
 					 * We need to check the whole chain if it is a train because some newgrf articulated engines can refit some units only (and not the front) */
-					DoCommand(0, w->index, v2->cargo_type | (v2->cargo_subtype << 8), flags, GetCmdRefitVeh(v));
+					total_cost += DoCommand(0, w->index, v2->cargo_type | (v2->cargo_subtype << 8), flags, GetCmdRefitVeh(v));
 					break; // We learned that the engine in question needed a refit. No need to check anymore
 				}
 			} while (v->type == VEH_TRAIN && (w2 = w2->next) != NULL && (v2 = v2->next) != NULL);
@@ -1904,7 +1921,7 @@
 /** Generates a list of vehicles inside a depot
  * Will enlarge allocated space for the list if they are too small, so it's ok to call with (pointer to NULL array, pointer to uninitised uint16, pointer to 0)
  * If one of the lists is not needed (say wagons when finding ships), all the pointers regarding that list should be set to NULL
- * @param Type type of vehicle
+ * @param type Type of vehicle
  * @param tile The tile the depot is located in
  * @param ***engine_list Pointer to a pointer to an array of vehicles in the depot (old list is freed and a new one is malloced)
  * @param *engine_list_length Allocated size of engine_list. Needs to be set to 0 when engine_list points to a NULL array
@@ -1986,11 +2003,13 @@
 * @param length_of_array informs the length allocated for sort_list. This is not the same as the number of vehicles in the list. Needs to be 0 when sort_list is NULL
 * @param type type of vehicle
 * @param owner PlayerID of owner to generate a list for
-* @param index This parameter got different meanings depending on window_type
-			VLW_STATION_LIST:  index of station to generate a list for
-			VLW_SHARED_ORDERS: index of order to generate a list for
-			VLW_STANDARD: not used
-			VLW_DEPOT_LIST: TileIndex of the depot/hangar to make the list for
+* @param index This parameter has different meanings depending on window_type
+    <ul>
+      <li>VLW_STATION_LIST:  index of station to generate a list for</li>
+      <li>VLW_SHARED_ORDERS: index of order to generate a list for<li>
+      <li>VLW_STANDARD: not used<li>
+      <li>VLW_DEPOT_LIST: TileIndex of the depot/hangar to make the list for</li>
+    </ul>
 * @param window_type tells what kind of window the list is for. Use the VLW flags in vehicle_gui.h
 * @return the number of vehicles added to the list
 */
@@ -2088,7 +2107,7 @@
  * @param flags the flags used for DoCommand()
  * @param service should the vehicles only get service in the depots
  * @param owner PlayerID of owner of the vehicles to send
- * @param VLW_flag tells what kind of list requested the goto depot
+ * @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(byte type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
@@ -2219,7 +2238,7 @@
 				}
 
 				SetDParam(0, v->unitnumber);
-				AddNewsItem(string, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),	v->index, 0);
+				AddNewsItem(string, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), v->index, 0);
 			}
 		}
 	}
@@ -2448,26 +2467,13 @@
 	return unit;
 }
 
-static SpriteID GetEngineColourMap(EngineID engine_type, PlayerID player, EngineID parent_engine_type, const Vehicle *v)
+
+const Livery *GetEngineLivery(EngineID engine_type, PlayerID player, EngineID parent_engine_type, const Vehicle *v)
 {
-	SpriteID map = PAL_NONE;
 	const Player *p = GetPlayer(player);
 	LiveryScheme scheme = LS_DEFAULT;
 	CargoID cargo_type = v == NULL ? (CargoID)CT_INVALID : v->cargo_type;
 
-	/* Check if we should use the colour map callback */
-	if (HASBIT(EngInfo(engine_type)->callbackmask, CBM_COLOUR_REMAP)) {
-		uint16 callback = GetVehicleCallback(CBID_VEHICLE_COLOUR_MAPPING, 0, 0, engine_type, v);
-		/* A return value of 0xC000 is stated to "use the default two-color
-		 * maps" which happens to be the failure action too... */
-		if (callback != CALLBACK_FAILED && callback != 0xC000) {
-			map = GB(callback, 0, 14);
-			/* If bit 14 is set, then the company colours are applied to the
-			 * map else it's returned as-is. */
-			if (!HASBIT(callback, 14)) return map;
-		}
-	}
-
 	/* The default livery is always available for use, but its in_use flag determines
 	 * whether any _other_ liveries are in use. */
 	if (p->livery[LS_DEFAULT].in_use && (_patches.liveries == 2 || (_patches.liveries == 1 && player == _local_player))) {
@@ -2544,12 +2550,35 @@
 		if (!p->livery[scheme].in_use) scheme = LS_DEFAULT;
 	}
 
+	return &p->livery[scheme];
+}
+
+
+static SpriteID GetEngineColourMap(EngineID engine_type, PlayerID player, EngineID parent_engine_type, const Vehicle *v)
+{
+	SpriteID map = PAL_NONE;
+
+	/* Check if we should use the colour map callback */
+	if (HASBIT(EngInfo(engine_type)->callbackmask, CBM_COLOUR_REMAP)) {
+		uint16 callback = GetVehicleCallback(CBID_VEHICLE_COLOUR_MAPPING, 0, 0, engine_type, v);
+		/* A return value of 0xC000 is stated to "use the default two-color
+		 * maps" which happens to be the failure action too... */
+		if (callback != CALLBACK_FAILED && callback != 0xC000) {
+			map = GB(callback, 0, 14);
+			/* If bit 14 is set, then the company colours are applied to the
+			 * map else it's returned as-is. */
+			if (!HASBIT(callback, 14)) return map;
+		}
+	}
+
 	bool twocc = HASBIT(EngInfo(engine_type)->misc_flags, EF_USES_2CC);
 
 	if (map == PAL_NONE) map = twocc ? (SpriteID)SPR_2CCMAP_BASE : (SpriteID)PALETTE_RECOLOR_START;
 
-	map += p->livery[scheme].colour1;
-	if (twocc) map += p->livery[scheme].colour2 * 16;
+	const Livery *livery = GetEngineLivery(engine_type, player, parent_engine_type, v);
+
+	map += livery->colour1;
+	if (twocc) map += livery->colour2 * 16;
 
 	return map;
 }
@@ -2899,6 +2928,7 @@
 {
 	assert(IsTileType(tile, MP_STATION) || type == VEH_SHIP);
 	current_order.type = OT_LOADING;
+	GetStation(this->last_station_visited)->loading_vehicles.push_back(this);
 }
 
 void Vehicle::LeaveStation()
@@ -2907,4 +2937,5 @@
 	assert(current_order.type == OT_LOADING);
 	current_order.type = OT_LEAVESTATION;
 	current_order.flags = 0;
+	GetStation(this->last_station_visited)->loading_vehicles.remove(this);
 }
--- a/src/vehicle.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/vehicle.h	Sat Apr 21 08:23:57 2007 +0000
@@ -166,6 +166,7 @@
 
 struct VehicleAir {
 	uint16 crashed_counter;
+	uint16 cached_max_speed;
 	byte pos;
 	byte previous_pos;
 	StationID targetairport;
@@ -407,7 +408,7 @@
 /* Flags to add to p2 for goto depot commands */
 /* Note: bits 8-10 are used for VLW flags */
 enum {
-	DEPOT_SERVICE       = (1 << 0),	// The vehicle will leave the depot right after arrival (serivce only)
+	DEPOT_SERVICE       = (1 << 0), // The vehicle will leave the depot right after arrival (serivce only)
 	DEPOT_MASS_SEND     = (1 << 1), // Tells that it's a mass send to depot command (type in VLW flag)
 	DEPOT_DONT_CANCEL   = (1 << 2), // Don't cancel current goto depot command if any
 	DEPOT_LOCATE_HANGAR = (1 << 3), // Find another airport if the target one lacks a hangar
@@ -550,6 +551,8 @@
 
 static const VehicleID INVALID_VEHICLE = 0xFFFF;
 
+const struct Livery *GetEngineLivery(EngineID engine_type, PlayerID player, EngineID parent_engine_type, const Vehicle *v);
+
 /**
  * Get the colour map for an engine. This used for unbuilt engines in the user interface.
  * @param engine_type ID of engine
--- a/src/vehicle_gui.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/vehicle_gui.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -276,8 +276,11 @@
 
 /** Draw the list of available refit options for a consist.
  * Draw the list and highlight the selected refit option (if any)
- * @param *v first vehicle in consist to get the refit-options of
+ * @param *list first vehicle in consist to get the refit-options of
  * @param sel selected refit cargo-type in the window
+ * @param pos position of the selected item in caller widow
+ * @param rows number of rows(capacity) in caller window
+ * @param delta step height in caller window
  * @return the refit option that is hightlighted, NULL if none
  */
 static RefitOption *DrawVehicleRefitWindow(const RefitList *list, int sel, uint pos, uint rows, uint delta)
@@ -337,34 +340,34 @@
 			SetDParam(1, v->unitnumber);
 			w->DrawWidgets();
 
-			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);
+			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) {
+			if (WP(w, refit_d).cargo != NULL) {
 				int32 cost;
 
-				cost = DoCommand(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8,
+				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)) {
-					SetDParam(0, WP(w,refit_d).cargo->cargo);
+					SetDParam(0, WP(w, refit_d).cargo->cargo);
 					SetDParam(1, _returned_refit_capacity);
 					SetDParam(2, cost);
 					DrawString(2, w->widget[5].top + 1, STR_9840_NEW_CAPACITY_COST_OF_REFIT, 0);
 				}
 			}
-		}	break;
+		} break;
 
 		case WE_CLICK:
 			switch (e->we.click.widget) {
 				case 3: { // listbox
 					int y = e->we.click.pt.y - w->widget[3].top;
 					if (y >= 0) {
-						WP(w,refit_d).sel = (y / (int)w->resize.step_height) + w->vscroll.pos;
+						WP(w, refit_d).sel = (y / (int)w->resize.step_height) + w->vscroll.pos;
 						w->SetDirty();
 					}
 				} break;
 				case 6: // refit button
-					if (WP(w,refit_d).cargo != NULL) {
+					if (WP(w, refit_d).cargo != NULL) {
 						const Vehicle *v = GetVehicle(w->window_number);
 
 						if (WP(w, refit_d).order == INVALID_VEH_ORDER_ID) {
@@ -376,9 +379,9 @@
 								case VEH_SHIP:     command = CMD_REFIT_SHIP         | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP);     break;
 								case VEH_AIRCRAFT: command = CMD_REFIT_AIRCRAFT     | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break;
 							}
-							if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8, NULL, command)) w->Close();
+							if (DoCommandP(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8, NULL, command)) w->Close();
 						} else {
-							if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8 | WP(w, refit_d).order << 16, NULL, CMD_ORDER_REFIT)) w->Close();
+							if (DoCommandP(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8 | WP(w, refit_d).order << 16, NULL, CMD_ORDER_REFIT)) w->Close();
 						}
 					}
 					break;
@@ -412,7 +415,7 @@
 
 static const WindowDesc _vehicle_refit_desc = {
 	WDP_AUTO, WDP_AUTO, 240, 174,
-	WC_VEHICLE_REFIT,WC_VEHICLE_VIEW,
+	WC_VEHICLE_REFIT, WC_VEHICLE_VIEW,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
 	_vehicle_refit_widgets,
 	VehicleRefitWndProc,
@@ -420,7 +423,7 @@
 
 /** Show the refit window for a vehicle
 * @param *v The vehicle to show the refit window for
-* @param order of the vehicle (?)
+* @param order of the vehicle ( ? )
 */
 void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order)
 {
@@ -916,7 +919,7 @@
 	vl->l.flags = VL_REBUILD | (vl->_sorting->order ? VL_DESC : VL_NONE);
 	vl->l.sort_type = vl->_sorting->criteria;
 	vl->sort_list = NULL;
-	vl->l.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;	// Set up resort timer
+	vl->l.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; // Set up resort timer
 }
 
 static void DrawSmallOrderList(const Vehicle *v, int x, int y)
@@ -1134,7 +1137,7 @@
 					DoCommandP(0, GB(w->window_number, 16, 16), (w->window_number & VLW_MASK) | (1 << 6) | (e->we.click.widget == VLW_WIDGET_START_ALL ? (1 << 5) : 0) | vl->vehicle_type, NULL, CMD_MASS_START_STOP);
 					break;
 			}
-		}	break;
+		} break;
 
 		case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
 			switch (e->we.dropdown.button) {
--- a/src/video/win32_v.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/video/win32_v.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -45,7 +45,7 @@
 	LOGPALETTE *pal;
 	uint i;
 
-	pal = (LOGPALETTE*)alloca(sizeof(LOGPALETTE) + (256-1) * sizeof(PALETTEENTRY));
+	pal = (LOGPALETTE*)alloca(sizeof(LOGPALETTE) + (256 - 1) * sizeof(PALETTEENTRY));
 
 	pal->palVersion = 0x300;
 	pal->palNumEntries = 256;
@@ -653,8 +653,8 @@
 		_wnd.alloced_bits = NULL;
 	}
 
-	bi = (BITMAPINFO*)alloca(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
-	memset(bi, 0, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
+	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) {
--- a/src/viewport.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/viewport.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -2025,8 +2025,9 @@
  * north-south (DIR_S) to obtain the same results with less code. This is what
  * the return value signifies.
  * @param style HighLightStyle dragging style
- * @param start_tile, end_tile start and end tile of drag
- * @param boolean value which when true means start/end should be swapped */
+ * @param start_tile start tile of drag
+ * @param end_tile end tile of drag
+ * @return boolean value which when true means start/end should be swapped */
 static bool SwapDirection(HighLightStyle style, TileIndex start_tile, TileIndex end_tile)
 {
 	uint start_x = TileX(start_tile);
@@ -2051,7 +2052,7 @@
 * To correctly get the height difference we need the direction we are dragging
 * in, as well as with what kind of tool we are dragging. For example a horizontal
 * autorail tool that starts in bottom and ends at the top of a tile will need the
-* maximum of SW,S and SE,N corners respectively. This is handled by the lookup table below
+* maximum of SW, S and SE, N corners respectively. This is handled by the lookup table below
 * See _tileoffs_by_dir in map.c for the direction enums if you can't figure out
 * the values yourself.
 * @param style HightlightStyle of drag. This includes direction and style (autorail, rect, etc.)
@@ -2396,7 +2397,7 @@
 	e.we.place.userdata = _thd.userdata;
 
 	/* stop drag mode if the window has been closed */
-	w = BaseWindow::FindById(_thd.window_class,_thd.window_number);
+	w = BaseWindow::FindById(_thd.window_class, _thd.window_number);
 	if (w == NULL) {
 		ResetObjectToPlace();
 		return false;
--- a/src/void_map.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/void_map.h	Sat Apr 21 08:23:57 2007 +0000
@@ -5,6 +5,10 @@
 #ifndef VOID_MAP_H
 #define VOID_MAP_H
 
+/**
+ * Make a nice void tile ;)
+ * @param t the tile to make void
+ */
 static inline void MakeVoid(TileIndex t)
 {
 	SetTileType(t, MP_VOID);
--- a/src/water_cmd.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/water_cmd.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -651,7 +651,7 @@
 
 		SetDParam(0, pass);
 		AddNewsItem(STR_B006_FLOOD_VEHICLE_DESTROYED,
-			NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
+			NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0),
 			v->index,
 			0);
 		CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE);
--- a/src/widget.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/widget.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -36,16 +36,13 @@
 	return pt;
 }
 
-/*****************************************************
- * Special handling for the scrollbar widget type.
+/** Special handling for the scrollbar widget type.
  * Handles the special scrolling buttons and other
  * scrolling.
- * Parameters:
- *   wi  - Pointer to the scrollbar widget.
- *   x   - The X coordinate of the mouse click.
- *   y   - The Y coordinate of the mouse click.
- */
-
+ * @param w Window on which a scroll was performed.
+ * @param wi Pointer to the scrollbar widget.
+ * @param x The X coordinate of the mouse click.
+ * @param y The Y coordinate of the mouse click. */
 void BaseWindow::ScrollbarClickHandler(const OldWidget *wi, int x, int y)
 {
 	int mi, ma, pos;
@@ -126,8 +123,8 @@
 
 /** Returns the index for the widget located at the given position
  * relative to the window. It includes all widget-corner pixels as well.
- * @param  x
- * @param  y Window client coordinates
+ * @param  x The Window client X coordinate
+ * @param  y The Window client y coordinate
  * @return A widget index, or -1 if no widget was found.
  */
 int BaseWindow::GetWidgetFromPos(int x, int y) const
@@ -735,6 +732,10 @@
 
 /** Evenly distribute some widgets when resizing horizontally (often a button row)
  *  When only two arguments are given, the widgets are presumed to be on a line and only the ends are given
+<<<<<<< .working
+=======
+ * @param w Window to modify
+>>>>>>> .merge-right.r9707
  * @param left The leftmost widget to resize
  * @param right The rightmost widget to resize. Since right side of it is used, remember to set it to RESIZE_RIGHT
  */
--- a/src/win32.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/win32.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -335,7 +335,7 @@
 
 static void SetWndSize(HWND wnd, int mode)
 {
-	RECT r,r2;
+	RECT r, r2;
 	int offs;
 
 	GetWindowRect(wnd, &r);
@@ -368,7 +368,7 @@
 	return b;
 }
 
-static INT_PTR CALLBACK CrashDialogFunc(HWND wnd,UINT msg,WPARAM wParam,LPARAM lParam)
+static INT_PTR CALLBACK CrashDialogFunc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
 	switch (msg) {
 		case WM_INITDIALOG: {
@@ -418,7 +418,7 @@
 					EnableWindow(GetDlgItem(wnd, 14), FALSE);
 					SetCursor(LoadCursor(NULL, IDC_ARROW));
 					MessageBox(wnd, _T("Crash report submitted. Thank you."), _T("Crash Report"), MB_ICONINFORMATION);
-				}	break;
+				} break;
 #endif /* Disabled crash-submit procedures */
 				case 15: /* Expand window to show crash-message */
 					_expanded ^= 1;
@@ -549,7 +549,7 @@
 	}
 
 	{
-		int i,j;
+		int i, j;
 #ifdef _M_AMD64
 		uint32 *b = (uint32*)ep->ContextRecord->Rsp;
 #else
@@ -557,7 +557,7 @@
 #endif
 		for (j = 0; j != 24; j++) {
 			for (i = 0; i != 8; i++) {
-				if (IsBadReadPtr(b,sizeof(uint32))) {
+				if (IsBadReadPtr(b, sizeof(uint32))) {
 					output += sprintf(output, " ????????"); //OCR: WAS - , 0);
 				} else {
 					output += sprintf(output, " %.8X", *b);
--- a/src/window.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/window.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -986,7 +986,7 @@
 		const BaseWindow *v = (*vit).w;
 		int x;
 
-		if (right  > v->Left() &&
+		if (right > v->Left() &&
 				bottom > v->Top() &&
 				left < v->Left() + v->Width() &&
 				top  < v->Top() + v->Height()) {
@@ -996,19 +996,19 @@
 				return;
 			}
 
-			if (right > (x=v->Left() + v->Width())) {
+			if (right > (x = v->Left() + v->Width())) {
 				DrawOverlappedWindow(wit, left, top, x, bottom);
 				DrawOverlappedWindow(wit, x, top, right, bottom);
 				return;
 			}
 
-			if (top < (x=v->Top())) {
+			if (top < (x = v->Top())) {
 				DrawOverlappedWindow(wit, left, top, right, x);
 				DrawOverlappedWindow(wit, left, x, right, bottom);
 				return;
 			}
 
-			if (bottom > (x=v->Top() + v->Height())) {
+			if (bottom > (x = v->Top() + v->Height())) {
 				DrawOverlappedWindow(wit, left, top, right, x);
 				DrawOverlappedWindow(wit, left, x, right, bottom);
 				return;
@@ -1606,7 +1606,7 @@
 /** Update all the widgets of a window based on their resize flags
  * Both the areas of the old window and the new sized window are set dirty
  * ensuring proper redrawal.
- * @param x delta x-size of changed window (positive if larger, etc.(
+ * @param x delta x-size of changed window (positive if larger, etc.)
  * @param y delta y-size of changed window */
 void BaseWindow::Resize(int x, int y)
 {
--- a/src/yapf/yapf.h	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/yapf/yapf.h	Sat Apr 21 08:23:57 2007 +0000
@@ -20,7 +20,6 @@
  * @param v        the RV that needs to find a path
  * @param tile     the tile to find the path from (should be next tile the RV is about to enter)
  * @param enterdir diagonal direction which the RV will enter this new tile from
- * @param tracks   available tracks on the new tile (to choose from)
  * @return         the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found
  */
 Trackdir YapfChooseRoadTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir);
@@ -29,8 +28,8 @@
  * @param v        the train that needs to find a path
  * @param tile     the tile to find the path from (should be next tile the train is about to enter)
  * @param enterdir diagonal direction which the RV will enter this new tile from
- * @param trackdirs available trackdirs on the new tile (to choose from)
- * @param no_path_found [out] true is returned if no path can be found (returned Trackdir is only a 'guess')
+ * @param tracks   available trackdirs on the new tile (to choose from)
+ * @param path_not_found [out] true is returned if no path can be found (returned Trackdir is only a 'guess')
  * @return         the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found
  */
 Trackdir YapfChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool *path_not_found);
@@ -48,13 +47,13 @@
 Depot* YapfFindNearestRoadDepot(const Vehicle *v);
 
 /** Used when user sends train to the nearest depot or if train needs servicing.
- * @v            train that needs to go to some depot
- * @max_distance max distance (number of track tiles) from the current train position
+ * @param v            train that needs to go to some depot
+ * @param max_distance max distance (number of track tiles) from the current train position
  *                  (used also as optimization - the pathfinder can stop path finding if max_distance
  *                  was reached and no depot was seen)
- * @reverse_penalty penalty that should be added for the path that requires reversing the train first
- * @depot_tile   receives the depot tile if depot was found
- * @reversed     receives true if train needs to reversed first
+ * @param reverse_penalty penalty that should be added for the path that requires reversing the train first
+ * @param depot_tile   receives the depot tile if depot was found
+ * @param reversed     receives true if train needs to reversed first
  * @return       the true if depot was found.
  */
 bool YapfFindNearestRailDepotTwoWay(Vehicle *v, int max_distance, int reverse_penalty, TileIndex* depot_tile, bool* reversed);
--- a/src/yapf/yapf_base.hpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/yapf/yapf_base.hpp	Sat Apr 21 08:23:57 2007 +0000
@@ -117,7 +117,8 @@
 		while (true) {
 			m_num_steps++;
 			Node *n = m_nodes.GetBestOpenNode();
-			if (n == NULL) break;
+			if (n == NULL)
+				break;
 
 			// if the best open node was worse than the best path found, we can finish
 			if (m_pBestDestNode != NULL && m_pBestDestNode->GetCost() < n->GetCostEstimate())
@@ -160,9 +161,9 @@
 	/** If path was found return the best node that has reached the destination. Otherwise
 	 *  return the best visited node (which was nearest to the destination).
 	 */
-	FORCEINLINE Node& GetBestNode()
+	FORCEINLINE Node* GetBestNode()
 	{
-		return (m_pBestDestNode != NULL) ? *m_pBestDestNode : *m_pBestIntermediateNode;
+		return (m_pBestDestNode != NULL) ? m_pBestDestNode : m_pBestIntermediateNode;
 	}
 
 	/** Calls NodeList::CreateNewNode() - allocates new node that can be filled and used
--- a/src/yapf/yapf_rail.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/yapf/yapf_rail.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -61,11 +61,11 @@
 
 		// some path found
 		// get found depot tile
-		Node& n = Yapf().GetBestNode();
-		*depot_tile = n.GetLastTile();
+		Node *n = Yapf().GetBestNode();
+		*depot_tile = n->GetLastTile();
 
 		// walk through the path back to the origin
-		Node* pNode = &n;
+		Node *pNode = n;
 		while (pNode->m_parent != NULL) {
 			pNode = pNode->m_parent;
 		}
@@ -128,7 +128,7 @@
 
 		// if path not found - return INVALID_TRACKDIR
 		Trackdir next_trackdir = INVALID_TRACKDIR;
-		Node* pNode = &Yapf().GetBestNode();
+		Node *pNode = Yapf().GetBestNode();
 		if (pNode != NULL) {
 			// path was found or at least suggested
 			// walk through the path back to the origin
@@ -165,7 +165,7 @@
 
 		// path was found
 		// walk through the path back to the origin
-		Node* pNode = &Yapf().GetBestNode();
+		Node *pNode = Yapf().GetBestNode();
 		while (pNode->m_parent != NULL) {
 			pNode = pNode->m_parent;
 		}
--- a/src/yapf/yapf_road.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/yapf/yapf_road.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -287,7 +287,7 @@
 
 		// if path not found - return INVALID_TRACKDIR
 		Trackdir next_trackdir = INVALID_TRACKDIR;
-		Node* pNode = &Yapf().GetBestNode();
+		Node *pNode = Yapf().GetBestNode();
 		if (pNode != NULL) {
 			// path was found or at least suggested
 			// walk through the path back to its origin
@@ -329,7 +329,7 @@
 
 		// if path not found - return distance = UINT_MAX
 		uint dist = UINT_MAX;
-		Node* pNode = &Yapf().GetBestNode();
+		Node *pNode = Yapf().GetBestNode();
 		if (pNode != NULL) {
 			// path was found or at least suggested
 			// get the path cost estimate
@@ -371,8 +371,8 @@
 
 		// some path found
 		// get found depot tile
-		Node& n = Yapf().GetBestNode();
-		TileIndex depot_tile = n.m_segment_last_tile;
+		Node *n = Yapf().GetBestNode();
+		TileIndex depot_tile = n->m_segment_last_tile;
 		assert(IsTileDepotType(depot_tile, TRANSPORT_ROAD));
 		Depot* ret = GetDepotByTile(depot_tile);
 		return ret;
--- a/src/yapf/yapf_ship.cpp	Sun Apr 15 17:04:44 2007 +0000
+++ b/src/yapf/yapf_ship.cpp	Sat Apr 21 08:23:57 2007 +0000
@@ -61,13 +61,13 @@
 		pf.SetOrigin(src_tile, trackdirs);
 		pf.SetDestination(v->dest_tile, dest_trackdirs);
 		// find best path
-		bool bFound = pf.FindPath(v);
+		pf.FindPath(v);
 
 		Trackdir next_trackdir = INVALID_TRACKDIR; // this would mean "path not found"
-		if (bFound) {
-			// path was found
+
+		Node* pNode = pf.GetBestNode();
+		if (pNode != NULL) {
 			// walk through the path back to the origin
-			Node* pNode = &pf.GetBestNode();
 			Node* pPrevNode = NULL;
 			while (pNode->m_parent != NULL) {
 				pPrevNode = pNode;