(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk gamebalance
authorcelestar
Tue, 12 Jun 2007 11:56:35 +0000
branchgamebalance
changeset 9908 0fa543611bbe
parent 9907 3b068c3a1c74
child 9909 dce9a6923bb7
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
projects/openttd.vcproj
projects/openttd_vs80.vcproj
source.list
src/ai/default/default.cpp
src/aircraft.h
src/aircraft_cmd.cpp
src/aircraft_gui.cpp
src/airport.cpp
src/airport.h
src/airport_movement.h
src/autoreplace_gui.cpp
src/bridge_map.cpp
src/bridge_map.h
src/cargotype.cpp
src/cargotype.h
src/clear_map.h
src/command.cpp
src/console.cpp
src/console_cmds.cpp
src/dedicated.cpp
src/depot.cpp
src/depot_gui.cpp
src/direction.h
src/disaster_cmd.cpp
src/economy.cpp
src/elrail.cpp
src/endian_check.cpp
src/fileio.cpp
src/functions.h
src/genworld.cpp
src/industry.h
src/industry_cmd.cpp
src/industry_map.h
src/landscape.h
src/lang/american.txt
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/galician.txt
src/lang/german.txt
src/lang/hungarian.txt
src/lang/icelandic.txt
src/lang/italian.txt
src/lang/japanese.txt
src/lang/korean.txt
src/lang/lithuanian.txt
src/lang/norwegian_bokmal.txt
src/lang/norwegian_nynorsk.txt
src/lang/polish.txt
src/lang/portuguese.txt
src/lang/romanian.txt
src/lang/russian.txt
src/lang/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/lang/unfinished/afrikaans.txt
src/lang/unfinished/croatian.txt
src/lang/unfinished/frisian.txt
src/main_gui.cpp
src/misc.cpp
src/misc_gui.cpp
src/namegen.h
src/network/network_udp.cpp
src/newgrf.cpp
src/newgrf_callbacks.h
src/newgrf_cargo.cpp
src/newgrf_cargo.h
src/newgrf_config.cpp
src/newgrf_config.h
src/newgrf_house.cpp
src/newgrf_station.cpp
src/newgrf_station.h
src/news_gui.cpp
src/npf.cpp
src/openttd.cpp
src/openttd.h
src/pathfind.cpp
src/players.cpp
src/rail.cpp
src/rail.h
src/rail_cmd.cpp
src/rail_gui.cpp
src/rail_map.h
src/railtypes.h
src/resource.h
src/road.h
src/road_cmd.cpp
src/road_cmd.h
src/road_gui.cpp
src/road_map.cpp
src/road_map.h
src/roadveh.h
src/roadveh_cmd.cpp
src/roadveh_gui.cpp
src/saveload.cpp
src/saveload.h
src/screenshot.cpp
src/screenshot.h
src/sdl.cpp
src/sdl.h
src/settings.cpp
src/settings.h
src/settings_gui.cpp
src/ship.h
src/ship_cmd.cpp
src/ship_gui.cpp
src/signs.cpp
src/signs.h
src/signs_gui.cpp
src/slope.h
src/smallmap_gui.cpp
src/sound.cpp
src/sound.h
src/sprite.h
src/spritecache.cpp
src/spritecache.h
src/station.cpp
src/station.h
src/station_cmd.cpp
src/station_gui.cpp
src/station_map.cpp
src/station_map.h
src/stdafx.h
src/string.cpp
src/string.h
src/strings.cpp
src/strings.h
src/subsidy_gui.cpp
src/table/build_industry.h
src/table/industry_land.h
src/table/namegen.h
src/table/roadveh.h
src/table/town_land.h
src/terraform_gui.cpp
src/texteff.cpp
src/tgp.cpp
src/tgp.h
src/thread.cpp
src/thread.h
src/tile.cpp
src/tile.h
src/town.h
src/town_cmd.cpp
src/town_gui.cpp
src/town_map.h
src/train.h
src/train_cmd.cpp
src/train_gui.cpp
src/transparency_gui.cpp
src/transparency_gui.h
src/tree_cmd.cpp
src/tree_map.h
src/tunnel_map.cpp
src/tunnel_map.h
src/tunnelbridge_cmd.cpp
src/unix.cpp
src/unmovable.h
src/unmovable_cmd.cpp
src/unmovable_map.h
src/variables.h
src/vehicle.cpp
src/vehicle.h
src/vehicle_gui.cpp
src/vehicle_gui.h
src/viewport.cpp
src/viewport.h
src/void_map.h
src/water_cmd.cpp
src/water_map.h
src/waypoint.cpp
src/waypoint.h
src/widget.cpp
src/win32.cpp
src/window.cpp
src/window.h
src/yapf/yapf.hpp
--- a/projects/openttd.vcproj	Thu Apr 19 14:48:10 2007 +0000
+++ b/projects/openttd.vcproj	Tue Jun 12 11:56:35 2007 +0000
@@ -164,10 +164,10 @@
 				RelativePath=".\..\src\airport.cpp">
 			</File>
 			<File
-				RelativePath=".\..\src\aystar.cpp">
+				RelativePath=".\..\src\autoreplace_cmd.cpp">
 			</File>
 			<File
-				RelativePath=".\..\src\autoreplace_cmd.cpp">
+				RelativePath=".\..\src\aystar.cpp">
 			</File>
 			<File
 				RelativePath=".\..\src\bmp.cpp">
@@ -423,6 +423,9 @@
 				RelativePath=".\..\src\depot.h">
 			</File>
 			<File
+				RelativePath=".\..\src\direction.h">
+			</File>
+			<File
 				RelativePath=".\..\src\music\dmusic.h">
 			</File>
 			<File
@@ -633,6 +636,9 @@
 				RelativePath=".\..\src\train.h">
 			</File>
 			<File
+				RelativePath=".\..\src\transparency_gui.h">
+			</File>
+			<File
 				RelativePath=".\..\src\variables.h">
 			</File>
 			<File
@@ -760,6 +766,9 @@
 				RelativePath=".\..\src\train_gui.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\transparency_gui.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\vehicle_gui.cpp">
 			</File>
 		</Filter>
--- a/projects/openttd_vs80.vcproj	Thu Apr 19 14:48:10 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Tue Jun 12 11:56:35 2007 +0000
@@ -308,7 +308,7 @@
 				AdditionalDependencies="winmm.lib ws2_32.lib libpng.lib zlibstat.lib dxguid.lib libfreetype2.lib"
 				LinkIncremental="0"
 				SuppressStartupBanner="true"
-				IgnoreDefaultLibraryNames="LIBCMT.lib;LIBC.lib"
+				IgnoreDefaultLibraryNames="LIBCMT.lib"
 				GenerateDebugInformation="true"
 				SubSystem="2"
 				TargetMachine="1"
@@ -792,6 +792,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\direction.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\music\dmusic.h"
 				>
 			</File>
@@ -1072,6 +1076,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\transparency_gui.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\variables.h"
 				>
 			</File>
@@ -1240,6 +1248,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\transparency_gui.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\vehicle_gui.cpp"
 				>
 			</File>
--- a/source.list	Thu Apr 19 14:48:10 2007 +0000
+++ b/source.list	Tue Jun 12 11:56:35 2007 +0000
@@ -1,7 +1,7 @@
 # Source Files
 airport.cpp
+autoreplace_cmd.cpp
 aystar.cpp
-autoreplace_cmd.cpp
 bmp.cpp
 callback_table.cpp
 cargotype.cpp
@@ -108,6 +108,7 @@
 debug.h
 video/dedicated_v.h
 depot.h
+direction.h
 music/dmusic.h
 driver.h
 economy.h
@@ -178,6 +179,7 @@
 tile.h
 town.h
 train.h
+transparency_gui.h
 variables.h
 vehicle.h
 vehicle_gui.h
@@ -221,6 +223,7 @@
 terraform_gui.cpp
 town_gui.cpp
 train_gui.cpp
+transparency_gui.cpp
 vehicle_gui.cpp
 
 # Landscape
--- a/src/ai/default/default.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/ai/default/default.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -5,6 +5,7 @@
 #include "../../aircraft.h"
 #include "../../bridge_map.h"
 #include "../../functions.h"
+#include "../../landscape.h"
 #include "../../map.h"
 #include "../../rail_map.h"
 #include "../../road_map.h"
@@ -1424,7 +1425,7 @@
 		if (t != NULL) {
 			// Find a random oil rig industry
 			in = AiFindRandomIndustry();
-			if (in != NULL && in->type == IT_OIL_RIG) {
+			if (in != NULL && GetIndustrySpec(in->type)->behaviour & INDUSTRYBEH_AI_AIRSHIP_ROUTES) {
 				if (DistanceManhattan(t->xy, in->xy) < 60)
 					break;
 			}
@@ -3822,7 +3823,7 @@
 		if (best_pl->player_money >> 1 >= p->bankrupt_value) {
 			// Computer wants to buy it.
 			PlayerID old_p = _current_player;
-			_current_player = p->index;
+			_current_player = best_pl->index;
 			DoCommand(0, old_p, 0, DC_EXEC, CMD_BUY_COMPANY);
 			_current_player = old_p;
 		}
--- a/src/aircraft.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/aircraft.h	Tue Jun 12 11:56:35 2007 +0000
@@ -8,11 +8,12 @@
 #include "station_map.h"
 #include "vehicle.h"
 
+/** An aircraft can be one ot those types */
 enum AircraftSubType {
-	AIR_HELICOPTER = 0,
-	AIR_AIRCRAFT   = 2,
-	AIR_SHADOW     = 4,
-	AIR_ROTOR      = 6
+	AIR_HELICOPTER = 0, ///< an helicopter
+	AIR_AIRCRAFT   = 2, ///< an airplane
+	AIR_SHADOW     = 4, ///< shadow of the aircraft
+	AIR_ROTOR      = 6  ///< rotor of an helicopter
 };
 
 
@@ -30,13 +31,20 @@
 	return v->subtype <= AIR_AIRCRAFT;
 }
 
-
+/** Check if this aircraft is in a hangar
+ * @param v vehicle to check
+ * @return true if in hangar
+ */
 static inline bool IsAircraftInHangar(const Vehicle* v)
 {
 	assert(v->type == VEH_AIRCRAFT);
 	return v->vehstatus & VS_HIDDEN && IsHangarTile(v->tile);
 }
 
+/** Check if this aircraft is in a hangar and stopped
+ * @param v vehicle to check
+ * @return true if in hangar and stopped
+ */
 static inline bool IsAircraftInHangarStopped(const Vehicle* v)
 {
 	return IsAircraftInHangar(v) && v->vehstatus & VS_STOPPED;
@@ -56,13 +64,49 @@
 	return (apc->flags & (avi->subtype & AIR_CTOL ? AirportFTAClass::AIRPLANES : AirportFTAClass::HELICOPTERS)) != 0;
 }
 
-uint16 AircraftDefaultCargoCapacity(CargoID cid, const AircraftVehicleInfo*);
+/**
+ * Calculates cargo capacity based on an aircraft's passenger
+ * and mail capacities.
+ * @param cid Which cargo type to calculate a capacity for.
+ * @param avi Which engine to find a cargo capacity for.
+ * @return New cargo capacity value.
+ */
+uint16 AircraftDefaultCargoCapacity(CargoID cid, const AircraftVehicleInfo *avi);
 
+/**
+ * This is the Callback method after the construction attempt of an aircraft
+ * @param success indicates completion (or not) of the operation
+ * @param tile of depot where aircraft is built
+ * @param p1 unused
+ * @param p2 unused
+ */
 void CcBuildAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2);
+
+/**
+ * This is the Callback method after the cloning attempt of an aircraft
+ * @param success indicates completion (or not) of the operation
+ * @param tile unused
+ * @param p1 unused
+ * @param p2 unused
+ */
 void CcCloneAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2);
+
+/** Handle Aircraft specific tasks when a an Aircraft enters a hangar
+ * @param *v Vehicle that enters the hangar
+ */
 void HandleAircraftEnterHangar(Vehicle *v);
+
+/** Get the size of the sprite of an aircraft sprite heading west (used for lists)
+ * @param engine The engine to get the sprite from
+ * @param width The width of the sprite
+ * @param height The height of the sprite
+ */
 void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height);
 
+/**
+ * Updates the status of the Aircraft heading or in the station
+ * @param st Station been updated
+ */
 void UpdateAirplanesOnNewStation(const Station *st);
 
 #endif /* AIRCRAFT_H */
--- a/src/aircraft_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/aircraft_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -8,6 +8,7 @@
 #include "aircraft.h"
 #include "debug.h"
 #include "functions.h"
+#include "landscape.h"
 #include "station_map.h"
 #include "table/strings.h"
 #include "map.h"
@@ -174,8 +175,8 @@
 
 /** Get the size of the sprite of an aircraft sprite heading west (used for lists)
  * @param engine The engine to get the sprite from
- * @param &width The width of the sprite
- * @param &height The height of the sprite
+ * @param width The width of the sprite
+ * @param height The height of the sprite
  */
 void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height)
 {
@@ -207,7 +208,7 @@
  * Calculates cargo capacity based on an aircraft's passenger
  * and mail capacities.
  * @param cid Which cargo type to calculate a capacity for.
- * @param engine Which engine to find a cargo capacity for.
+ * @param avi Which engine to find a cargo capacity for.
  * @return New cargo capacity value.
  */
 uint16 AircraftDefaultCargoCapacity(CargoID cid, const AircraftVehicleInfo *avi)
@@ -237,7 +238,7 @@
  */
 int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
+	if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_player)) return_cmd_error(STR_AIRCRAFT_NOT_AVAILABLE);
 
 	const AircraftVehicleInfo *avi = AircraftVehInfo(p1);
 	int32 value = EstimateAircraftCost(avi);
@@ -944,6 +945,42 @@
 }
 
 /**
+ * Find the entry point to an airport depending on direction which
+ * the airport is being approached from. Each airport can have up to
+ * four entry points for its approach system so that approaching
+ * aircraft do not fly through each other or are forced to do 180
+ * degree turns during the approach. The arrivals are grouped into
+ * four sectors dependent on the DiagDirection from which the airport
+ * is approached.
+ *
+ * @param v   The vehicle that is approaching the airport
+ * @param apc The Airport Class being approached.
+ * @returns   The index of the entry point
+ */
+static byte AircraftGetEntryPoint(const Vehicle *v, const AirportFTAClass *apc)
+{
+	assert(v != NULL);
+	assert(apc != NULL);
+
+	const Station *st = GetStation(v->u.air.targetairport);
+	/* Make sure we don't go to 0,0 if the airport has been removed. */
+	TileIndex tile = (st->airport_tile != 0) ? st->airport_tile : st->xy;
+
+	int delta_x = v->x_pos - TileX(tile) * TILE_SIZE;
+	int delta_y = v->y_pos - TileY(tile) * TILE_SIZE;
+
+	DiagDirection dir;
+	if (abs(delta_y) < abs(delta_x)) {
+		/* We are northeast or southwest of the airport */
+		dir = delta_x < 0 ? DIAGDIR_NE : DIAGDIR_SW;
+	} else {
+		/* We are northwest or southeast of the airport */
+		dir = delta_y < 0 ? DIAGDIR_NW : DIAGDIR_SE;
+	}
+	return apc->entry_points[dir];
+}
+
+/**
  * Controls the movement of an aircraft. This function actually moves the vehicle
  * on the map and takes care of minor things like sound playback.
  * @todo    De-mystify the cur_speed values for helicopter rotors.
@@ -954,17 +991,24 @@
 {
 	int count;
 	const Station *st = GetStation(v->u.air.targetairport);
+	const AirportFTAClass *afc = st->Airport();
+	const AirportMovingData *amd;
 
 	/* prevent going to 0,0 if airport is deleted. */
 	TileIndex tile = st->airport_tile;
-	if (tile == 0) tile = st->xy;
+	if (tile == 0) {
+		tile = st->xy;
+
+		/* Jump into our "holding pattern" state machine if possible */
+	if (v->u.air.pos >= afc->nofelements) v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, afc);
+	}
+
+	/*  get airport moving data */
+	amd = afc->MovingData(v->u.air.pos);
+
 	int x = TileX(tile) * TILE_SIZE;
 	int y = TileY(tile) * TILE_SIZE;
 
-	/*  get airport moving data */
-	const AirportFTAClass *afc = st->Airport();
-	const AirportMovingData *amd = afc->MovingData(v->u.air.pos);
-
 	/* Helicopter raise */
 	if (amd->flag & AMED_HELI_RAISE) {
 		Vehicle *u = v->next->next;
@@ -1470,42 +1514,6 @@
 	MaybeCrashAirplane(v);
 }
 
-/**
- * Find the entry point to an airport depending on direction which
- * the airport is being approached from. Each airport can have up to
- * four entry points for its approach system so that approaching
- * aircraft do not fly through each other or are forced to do 180
- * degree turns during the approach. The arrivals are grouped into
- * four sectors dependent on the DiagDirection from which the airport
- * is approached.
- *
- * @param v   The vehicle that is approaching the airport
- * @param apc The Airport Class being approached.
- * @returns   The index of the entry point
- */
-static byte AircraftGetEntryPoint(const Vehicle *v, const AirportFTAClass *apc)
-{
-	assert(v != NULL);
-	assert(apc != NULL);
-
-	const Station *st = GetStation(v->u.air.targetairport);
-	/* Make sure we don't go to 0,0 if the airport has been removed. */
-	TileIndex tile = (st->airport_tile != 0) ? st->airport_tile : st->xy;
-
-	int delta_x = v->x_pos - TileX(tile) * TILE_SIZE;
-	int delta_y = v->y_pos - TileY(tile) * TILE_SIZE;
-
-	DiagDirection dir;
-	if (abs(delta_y) < abs(delta_x)) {
-		/* We are northeast or southwest of the airport */
-		dir = delta_x < 0 ? DIAGDIR_NE : DIAGDIR_SW;
-	} else {
-		/* We are northwest or southeast of the airport */
-		dir = delta_y < 0 ? DIAGDIR_NW : DIAGDIR_SE;
-	}
-	return apc->entry_points[dir];
-}
-
 
 /** set the right pos when heading to other airports after takeoff */
 static void AircraftNextAirportPos_and_Order(Vehicle *v)
@@ -1906,9 +1914,9 @@
 }
 
 /**
- * ...
+ * "reserve" a block for the plane
  * @param v airplane that requires the operation
- * @param currentpos of the vehicle in the list of blocks
+ * @param current_pos of the vehicle in the list of blocks
  * @param apc airport on which block is requsted to be set
  * @returns true on success. Eg, next block was free and we have occupied it
  */
@@ -2155,6 +2163,10 @@
 	}
 }
 
+/**
+ * Updates the status of the Aircraft heading or in the station
+ * @param st Station been updated
+ */
 void UpdateAirplanesOnNewStation(const Station *st)
 {
 	/* only 1 station is updated per function call, so it is enough to get entry_point once */
@@ -2165,7 +2177,7 @@
 		if (v->type == VEH_AIRCRAFT && IsNormalAircraft(v)) {
 			if (v->u.air.targetairport == st->index) { // if heading to this airport
 				/* update position of airplane. If plane is not flying, landing, or taking off
-				 *you cannot delete airport, so it doesn't matter */
+				 * you cannot delete airport, so it doesn't matter */
 				if (v->u.air.state >= FLYING) { // circle around
 					v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, ap);
 					v->u.air.state = FLYING;
--- a/src/aircraft_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/aircraft_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -36,6 +36,13 @@
 	}
 }
 
+/**
+ * This is the Callback method after the construction attempt of an aircraft
+ * @param success indicates completion (or not) of the operation
+ * @param tile of depot where aircraft is built
+ * @param p1 unused
+ * @param p2 unused
+ */
 void CcBuildAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2)
 {
 	if (success) {
@@ -49,6 +56,13 @@
 	}
 }
 
+/**
+ * This is the Callback method after the cloning attempt of an aircraft
+ * @param success indicates completion (or not) of the operation
+ * @param tile unused
+ * @param p1 unused
+ * @param p2 unused
+ */
 void CcCloneAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2)
 {
 	if (success) ShowAircraftViewWindow(GetVehicle(_new_vehicle_id));
--- a/src/airport.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/airport.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -20,6 +20,7 @@
  * - false: give a summarized report which only shows current and next position */
 //#define DEBUG_AIRPORT false
 
+static AirportFTAClass *DummyAirport;
 static AirportFTAClass *CountryAirport;
 static AirportFTAClass *CityAirport;
 static AirportFTAClass *Oilrig;
@@ -34,6 +35,20 @@
 
 void InitializeAirports()
 {
+	DummyAirport = new AirportFTAClass(
+		_airport_moving_data_dummy,
+		NULL,
+		NULL,
+		_airport_entries_dummy,
+		AirportFTAClass::ALL,
+		_airport_fta_dummy,
+		NULL,
+		0,
+		0, 0,
+		0,
+		0
+	);
+
 	CountryAirport = new AirportFTAClass(
 		_airport_moving_data_country,
 		_airport_terminal_country,
@@ -463,6 +478,7 @@
 		case AT_HELIDEPOT:     return HeliDepot;
 		case AT_INTERCON:      return IntercontinentalAirport;
 		case AT_HELISTATION:   return HeliStation;
+		case AT_DUMMY:         return DummyAirport;
 	}
 }
 
--- a/src/airport.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/airport.h	Tue Jun 12 11:56:35 2007 +0000
@@ -14,16 +14,17 @@
 
 // Airport types
 enum {
-	AT_SMALL         =  0,
-	AT_LARGE         =  1,
-	AT_HELIPORT      =  2,
-	AT_METROPOLITAN  =  3,
-	AT_INTERNATIONAL =  4,
-	AT_COMMUTER      =  5,
-	AT_HELIDEPOT     =  6,
-	AT_INTERCON      =  7,
-	AT_HELISTATION   =  8,
-	AT_OILRIG        = 15
+	AT_SMALL         =   0,
+	AT_LARGE         =   1,
+	AT_HELIPORT      =   2,
+	AT_METROPOLITAN  =   3,
+	AT_INTERNATIONAL =   4,
+	AT_COMMUTER      =   5,
+	AT_HELIDEPOT     =   6,
+	AT_INTERCON      =   7,
+	AT_HELISTATION   =   8,
+	AT_OILRIG        =  15,
+	AT_DUMMY         = 255
 };
 
 
--- a/src/airport_movement.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/airport_movement.h	Tue Jun 12 11:56:35 2007 +0000
@@ -17,6 +17,14 @@
 
 ///////////////////////////////////////////////////////////////////////
 /////*********Movement Positions on Airports********************///////
+
+static const AirportMovingData _airport_moving_data_dummy[] = {
+	{    0,    0, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
+	{    0,   96, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
+	{   96,   96, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
+	{   96,    0, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
+};
+
 // Country Airfield (small) 4x3
 static const AirportMovingData _airport_moving_data_country[22] = {
 	{   53,    3, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar
@@ -376,6 +384,15 @@
 
 ///////////////////////////////////////////////////////////////////////
 /////**********Movement Machine on Airports*********************///////
+static const byte _airport_entries_dummy[] = {0, 1, 2, 3};
+static const AirportFTAbuildup _airport_fta_dummy[] = {
+	{ 0, 0, 0, 3},
+	{ 1, 0, 0, 0},
+	{ 2, 0, 0, 1},
+	{ 3, 0, 0, 2},
+	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
+};
+
 /* First element of terminals array tells us how many depots there are (to know size of array)
  * this may be changed later when airports are moved to external file  */
 static const TileIndexDiffC _airport_depots_country[] = {{3, 0}};
--- a/src/autoreplace_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/autoreplace_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -261,14 +261,14 @@
 
 				/* set wagon/engine button */
 				SetDParam(2, WP(w, replaceveh_d).wagon_btnstate ? STR_ENGINES : STR_WAGONS);
+
+				/* sets the colour of that art thing */
+				w->widget[13].color = _player_colors[_local_player];
+				w->widget[16].color = _player_colors[_local_player];
 			}
 
-			w->widget[13].color = _player_colors[_local_player]; // sets the colour of that art thing
-			w->widget[16].color = _player_colors[_local_player]; // sets the colour of that art thing
-
 			DrawWindowWidgets(w);
 
-
 			if (w->window_number == VEH_TRAIN) {
 				/* Draw the selected railtype in the pulldown menu */
 				RailType railtype = _railtype_selected_in_replace_gui;
--- a/src/bridge_map.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/bridge_map.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,10 +1,11 @@
 /* $Id$ */
 
-/** @file bridge_map.cpp */
+/** @file bridge_map.cpp Map accessor functions for bridges. */
 
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
+#include "bridge.h"
 #include "variables.h"
 
 
--- a/src/bridge_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/bridge_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file bridge_map.h */
+/** @file bridge_map.h Map accessor functions for bridges. */
 
 #ifndef BRIDGE_MAP_H
 #define BRIDGE_MAP_H
@@ -13,18 +13,34 @@
 #include "tile.h"
 
 
+/**
+ * Checks if this is a bridge, instead of a tunnel
+ * @param t The tile to analyze
+ * @pre IsTileType(t, MP_TUNNELBRIDGE)
+ * @return true if the structure is a bridge one
+ */
 static inline bool IsBridge(TileIndex t)
 {
 	assert(IsTileType(t, MP_TUNNELBRIDGE));
 	return HASBIT(_m[t].m5, 7);
 }
 
+/**
+ * checks if there is a bridge on this tile
+ * @param t The tile to analyze
+ * @return true if a bridge is present
+ */
 static inline bool IsBridgeTile(TileIndex t)
 {
 	return IsTileType(t, MP_TUNNELBRIDGE) && IsBridge(t);
 }
 
-
+/**
+ * checks for the possibility that a bridge may be on this tile
+ * These are in fact all the tile types on which a bridge can be found
+ * @param t The tile to analyze
+ * @return true if a bridge migh be present
+ */
 static inline bool MayHaveBridgeAbove(TileIndex t)
 {
 	return
@@ -36,7 +52,12 @@
 		IsTileType(t, MP_UNMOVABLE);
 }
 
-
+/**
+ * checks if a bridge is set above the ground of this tile
+ * @param t The tile to analyze
+ * @pre MayHaveBridgeAbove(t)
+ * @return true if a bridge is detected above
+ */
 static inline bool IsBridgeAbove(TileIndex t)
 {
 	assert(MayHaveBridgeAbove(t));
@@ -46,7 +67,8 @@
 
 /**
  * Determines the type of bridge on a tile
- * @param tile The tile to analyze
+ * @param t The tile to analyze
+ * @pre IsBridgeTile(t)
  * @return The bridge type
  */
 static inline uint GetBridgeType(TileIndex t)
@@ -58,7 +80,8 @@
 
 /**
  * Get the direction pointing onto the bridge
- * @param tile The tile to analyze
+ * @param t The tile to analyze
+ * @pre IsBridgeTile(t)
  * @return the above mentionned direction
  */
 static inline DiagDirection GetBridgeRampDirection(TileIndex t)
@@ -68,6 +91,12 @@
 }
 
 
+/**
+ * Get the axis of the bridge that goes over the tile. Not the axis or the ramp.
+ * @param t The tile to analyze
+ * @pre IsBridgeAbove(t)
+ * @return the above mentioned axis
+ */
 static inline Axis GetBridgeAxis(TileIndex t)
 {
 	assert(IsBridgeAbove(t));
@@ -75,6 +104,12 @@
 }
 
 
+/**
+ * Get the transport type of the bridge's ramp.
+ * @param t The ramp tile to analyze
+ * @pre IsBridgeTile(t)
+ * @return the transport type of the bridge
+ */
 static inline TransportType GetBridgeTransportType(TileIndex t)
 {
 	assert(IsBridgeTile(t));
@@ -82,6 +117,12 @@
 }
 
 
+/**
+ * Does the bridge ramp lie in a snow or desert area?
+ * @param t The ramp tile to analyze
+ * @pre IsBridgeTile(t)
+ * @return true if and only if in a snow or desert area
+ */
 static inline bool HasBridgeSnowOrDesert(TileIndex t)
 {
 	assert(IsBridgeTile(t));
@@ -89,6 +130,12 @@
 }
 
 
+/**
+ * Sets whether the bridge ramp lies in a snow or desert area.
+ * @param t              The ramp tile to set (un)make a snow/desert area
+ * @param snow_or_desert Make (true) or unmake the tile a snow/desert area
+ * @pre IsBridgeTile(t)
+ */
 static inline void SetBridgeSnowOrDesert(TileIndex t, bool snow_or_desert)
 {
 	assert(IsBridgeTile(t));
@@ -97,28 +144,43 @@
 
 /**
  * Finds the end of a bridge in the specified direction starting at a middle tile
+ * @param t the bridge tile to find the bridge ramp for
+ * @param d the direction to search in
  */
-TileIndex GetBridgeEnd(TileIndex, DiagDirection);
+TileIndex GetBridgeEnd(TileIndex t, DiagDirection d);
 
 /**
  * Finds the northern end of a bridge starting at a middle tile
+ * @param t the bridge tile to find the bridge ramp for
  */
 TileIndex GetNorthernBridgeEnd(TileIndex t);
 
 /**
  * Finds the southern end of a bridge starting at a middle tile
+ * @param t the bridge tile to find the bridge ramp for
  */
 TileIndex GetSouthernBridgeEnd(TileIndex t);
 
 
 /**
  * Starting at one bridge end finds the other bridge end
+ * @param t the bridge ramp tile to find the other bridge ramp for
  */
-TileIndex GetOtherBridgeEnd(TileIndex);
+TileIndex GetOtherBridgeEnd(TileIndex t);
 
+/**
+ * Get the height ('z') of a bridge in pixels.
+ * @param tile the bridge ramp tile to get the bridge height from
+ * @return the height of the bridge in pixels
+ */
 uint GetBridgeHeight(TileIndex tile);
-uint GetBridgeFoundation(Slope tileh, Axis axis);
 
+/**
+ * Remove the bridge over the given axis.
+ * @param t the tile to remove the bridge from
+ * @param a the axis of the bridge to remove
+ * @pre MayHaveBridgeAbove(t)
+ */
 static inline void ClearSingleBridgeMiddle(TileIndex t, Axis a)
 {
 	assert(MayHaveBridgeAbove(t));
@@ -126,12 +188,23 @@
 }
 
 
+/**
+ * Removes bridges from the given, that is bridges along the X and Y axis.
+ * @param t the tile to remove the bridge from
+ * @pre MayHaveBridgeAbove(t)
+ */
 static inline void ClearBridgeMiddle(TileIndex t)
 {
 	ClearSingleBridgeMiddle(t, AXIS_X);
 	ClearSingleBridgeMiddle(t, AXIS_Y);
 }
 
+/**
+ * Set that there is a bridge over the given axis.
+ * @param t the tile to add the bridge to
+ * @param a the axis of the bridge to add
+ * @pre MayHaveBridgeAbove(t)
+ */
 static inline void SetBridgeMiddle(TileIndex t, Axis a)
 {
 	assert(MayHaveBridgeAbove(t));
@@ -139,6 +212,15 @@
 }
 
 
+/**
+ * Generic part to make a bridge ramp for both roads and rails.
+ * @param t          the tile to make a bridge ramp
+ * @param o          the new owner of the bridge ramp
+ * @param bridgetype the type of bridge this bridge ramp belongs to
+ * @param d          the direction this ramp must be facing
+ * @param tt         the transport type of the bridge
+ * @note this function should not be called directly.
+ */
 static inline void MakeBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, TransportType tt)
 {
 	SetTileType(t, MP_TUNNELBRIDGE);
@@ -148,12 +230,27 @@
 	_m[t].m5 = 1 << 7 | tt << 2 | d;
 }
 
+/**
+ * Make a bridge ramp for roads.
+ * @param t          the tile to make a bridge ramp
+ * @param o          the new owner of the bridge ramp
+ * @param bridgetype the type of bridge this bridge ramp belongs to
+ * @param d          the direction this ramp must be facing
+ */
 static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d)
 {
 	MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD);
 	_m[t].m3 = 0;
 }
 
+/**
+ * Make a bridge ramp for rails.
+ * @param t          the tile to make a bridge ramp
+ * @param o          the new owner of the bridge ramp
+ * @param bridgetype the type of bridge this bridge ramp belongs to
+ * @param d          the direction this ramp must be facing
+ * @param r          the rail type of the bridge
+ */
 static inline void MakeRailBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, RailType r)
 {
 	MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL);
--- a/src/cargotype.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/cargotype.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -71,3 +71,21 @@
 	/* No matching label was found, so it is invalid */
 	return CT_INVALID;
 }
+
+
+/** Find the CargoID of a 'bitnum' value.
+ * @param bitnum 'bitnum' to find.
+ * @return First CargoID with the given bitnum, or CT_INVALID if not found.
+ */
+CargoID GetCargoIDByBitnum(uint8 bitnum)
+{
+	if (bitnum == INVALID_CARGO) return CT_INVALID;
+
+	for (CargoID c = 0; c < lengthof(_cargo); c++) {
+		if (_cargo[c].bitnum == bitnum) return c;
+	}
+
+	/* No matching label was found, so it is invalid */
+	return CT_INVALID;
+}
+
--- a/src/cargotype.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/cargotype.h	Tue Jun 12 11:56:35 2007 +0000
@@ -58,6 +58,7 @@
 const CargoSpec *GetCargo(CargoID c);
 /* Get the cargo ID with the cargo label */
 CargoID GetCargoIDByLabel(CargoLabel cl);
+CargoID GetCargoIDByBitnum(uint8 bitnum);
 
 static inline bool IsCargoInClass(CargoID c, uint16 cc)
 {
--- a/src/clear_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/clear_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file clear_map.h */
+/** @file clear_map.h Map accessors for 'clear' tiles */
 
 #ifndef CLEAR_MAP_H
 #define CLEAR_MAP_H
@@ -9,8 +9,8 @@
 #include "tile.h"
 #include "bridge_map.h"
 
-/* ground type, m5 bits 2...4
- * valid densities (bits 0...1) in comments after the enum
+/**
+ * Ground types. Valid densities in comments after the enum.
  */
 enum ClearGround {
 	CLEAR_GRASS  = 0, ///< 0-3
@@ -22,24 +22,48 @@
 };
 
 
+/**
+ * Get the type of clear tile.
+ * @param t the tile to get the clear ground type of
+ * @pre IsTileType(t, MP_CLEAR)
+ * @return the ground type
+ */
 static inline ClearGround GetClearGround(TileIndex t)
 {
 	assert(IsTileType(t, MP_CLEAR));
 	return (ClearGround)GB(_m[t].m5, 2, 3);
 }
 
+/**
+ * Set the type of clear tile.
+ * @param t  the tile to set the clear ground type of
+ * @param ct the ground type
+ * @pre IsTileType(t, MP_CLEAR)
+ */
 static inline bool IsClearGround(TileIndex t, ClearGround ct)
 {
 	return GetClearGround(t) == ct;
 }
 
 
+/**
+ * Get the density of a non-field clear tile.
+ * @param t the tile to get the density of
+ * @pre IsTileType(t, MP_CLEAR)
+ * @return the density
+ */
 static inline uint GetClearDensity(TileIndex t)
 {
 	assert(IsTileType(t, MP_CLEAR));
 	return GB(_m[t].m5, 0, 2);
 }
 
+/**
+ * Increment the density of a non-field clear tile.
+ * @param t the tile to increment the density of
+ * @param d the amount to increment the density with
+ * @pre IsTileType(t, MP_CLEAR)
+ */
 static inline void AddClearDensity(TileIndex t, int d)
 {
 	assert(IsTileType(t, MP_CLEAR)); // XXX incomplete
@@ -47,18 +71,36 @@
 }
 
 
+/**
+ * Get the counter used to advance to the next clear density/field type.
+ * @param t the tile to get the counter of
+ * @pre IsTileType(t, MP_CLEAR)
+ * @return the value of the counter
+ */
 static inline uint GetClearCounter(TileIndex t)
 {
 	assert(IsTileType(t, MP_CLEAR));
 	return GB(_m[t].m5, 5, 3);
 }
 
+/**
+ * Increments the counter used to advance to the next clear density/field type.
+ * @param t the tile to increment the counter of
+ * @param c the amount to increment the counter with
+ * @pre IsTileType(t, MP_CLEAR)
+ */
 static inline void AddClearCounter(TileIndex t, int c)
 {
 	assert(IsTileType(t, MP_CLEAR)); // XXX incomplete
 	_m[t].m5 += c << 5;
 }
 
+/**
+ * Sets the counter used to advance to the next clear density/field type.
+ * @param t the tile to set the counter of
+ * @param c the amount to set the counter to
+ * @pre IsTileType(t, MP_CLEAR)
+ */
 static inline void SetClearCounter(TileIndex t, uint c)
 {
 	assert(IsTileType(t, MP_CLEAR)); // XXX incomplete
@@ -66,7 +108,13 @@
 }
 
 
-/* Sets type and density in one go, also sets the counter to 0 */
+/**
+ * Sets ground type and density in one go, also sets the counter to 0
+ * @param t       the tile to set the ground type and density for
+ * @param type    the new ground type of the tile
+ * @param density the density of the ground tile
+ * @pre IsTileType(t, MP_CLEAR)
+ */
 static inline void SetClearGroundDensity(TileIndex t, ClearGround type, uint density)
 {
 	assert(IsTileType(t, MP_CLEAR)); // XXX incomplete
@@ -74,49 +122,99 @@
 }
 
 
+/**
+ * Get the field type (production stage) of the field
+ * @param t the field to get the type of
+ * @pre GetClearGround(t) == CLEAR_FIELDS
+ * @return the field type
+ */
 static inline uint GetFieldType(TileIndex t)
 {
 	assert(GetClearGround(t) == CLEAR_FIELDS);
 	return GB(_m[t].m3, 0, 4);
 }
 
+/**
+ * Set the field type (production stage) of the field
+ * @param t the field to get the type of
+ * @param f the field type
+ * @pre GetClearGround(t) == CLEAR_FIELDS
+ */
 static inline void SetFieldType(TileIndex t, uint f)
 {
 	assert(GetClearGround(t) == CLEAR_FIELDS); // XXX incomplete
 	SB(_m[t].m3, 0, 4, f);
 }
 
-static inline uint16 GetIndustryIndexOfField(TileIndex t)
+/**
+ * Get the industry (farm) that made the field
+ * @param t the field to get creating industry of
+ * @pre GetClearGround(t) == CLEAR_FIELDS
+ * @return the industry that made the field
+ */
+static inline IndustryID GetIndustryIndexOfField(TileIndex t)
 {
 	assert(GetClearGround(t) == CLEAR_FIELDS);
-	return _m[t].m2;
+	return(IndustryID) _m[t].m2;
 }
 
-static inline void SetIndustryIndexOfField(TileIndex t, uint16 i)
+/**
+ * Set the industry (farm) that made the field
+ * @param t the field to get creating industry of
+ * @param i the industry that made the field
+ * @pre GetClearGround(t) == CLEAR_FIELDS
+ */
+static inline void SetIndustryIndexOfField(TileIndex t, IndustryID i)
 {
 	assert(GetClearGround(t) == CLEAR_FIELDS);
 	_m[t].m2 = i;
 }
 
-/* Is used by tree tiles, too */
+
+/**
+ * Is there a fence at the south eastern border?
+ * @param t the tile to check for fences
+ * @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)
+ * @return 0 if there is no fence, otherwise the fence type
+ */
 static inline uint GetFenceSE(TileIndex t)
 {
 	assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES));
 	return GB(_m[t].m4, 2, 3);
 }
 
+/**
+ * Sets the type of fence (and whether there is one) for the south
+ * eastern border.
+ * @param t the tile to check for fences
+ * @param h 0 if there is no fence, otherwise the fence type
+ * @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)
+ */
 static inline void SetFenceSE(TileIndex t, uint h)
 {
 	assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)); // XXX incomplete
 	SB(_m[t].m4, 2, 3, h);
 }
 
+/**
+ * Is there a fence at the south western border?
+ * @param t the tile to check for fences
+ * @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)
+ * @return 0 if there is no fence, otherwise the fence type
+ */
 static inline uint GetFenceSW(TileIndex t)
 {
 	assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES));
 	return GB(_m[t].m4, 5, 3);
 }
 
+/**
+ * Sets the type of fence (and whether there is one) for the south
+ * western border.
+ * @param t the tile to check for fences
+ * @param h 0 if there is no fence, otherwise the fence type
+ * @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)
+ */
 static inline void SetFenceSW(TileIndex t, uint h)
 {
 	assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)); // XXX incomplete
@@ -124,6 +222,12 @@
 }
 
 
+/**
+ * Make a clear tile.
+ * @param t       the tile to make a clear tile
+ * @param g       the type of ground
+ * @param density the density of the grass/snow/desert etc
+ */
 static inline void MakeClear(TileIndex t, ClearGround g, uint density)
 {
 	/* If this is a non-bridgeable tile, clear the bridge bits while the rest
@@ -140,7 +244,13 @@
 }
 
 
-static inline void MakeField(TileIndex t, uint field_type, uint16 industry)
+/**
+ * Make a (farm) field tile.
+ * @param t          the tile to make a farm field
+ * @param field_type the 'growth' level of the field
+ * @param industry   the industry this tile belongs to
+ */
+static inline void MakeField(TileIndex t, uint field_type, IndustryID industry)
 {
 	SetTileType(t, MP_CLEAR);
 	SetTileOwner(t, OWNER_NONE);
--- a/src/command.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/command.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -6,6 +6,7 @@
 #include "openttd.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "gui.h"
 #include "command.h"
--- a/src/console.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/console.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -411,7 +411,7 @@
 /**
  * Handle the printing of text entered into the console or redirected there
  * by any other means. Uses printf() style format, for more information look
- * at @IConsolePrint()
+ * at IConsolePrint()
  */
 void CDECL IConsolePrintF(uint16 color_code, const char *s, ...)
 {
@@ -428,7 +428,7 @@
 /**
  * It is possible to print debugging information to the console,
  * which is achieved by using this function. Can only be used by
- * @debug() in debug.c. You need at least a level 2 (developer) for debugging
+ * debug() in debug.cpp. You need at least a level 2 (developer) for debugging
  * messages to show up
  * @param dbg debugging category
  * @param string debugging message
@@ -489,7 +489,7 @@
 
 /**
  * General internal hooking code that is the same for both commands and variables
- * @param hooks @IConsoleHooks structure that will be set according to
+ * @param hooks IConsoleHooks structure that will be set according to
  * @param type type access trigger
  * @param proc function called when the hook criteria is met
  */
@@ -514,7 +514,7 @@
 /**
  * Handle any special hook triggers. If the hook type is met check if
  * there is a function associated with that and if so, execute it
- * @param hooks @IConsoleHooks structure that will be checked
+ * @param hooks IConsoleHooks structure that will be checked
  * @param type type of hook, trigger that needs to be activated
  * @return true on a successfull execution of the hook command or if there
  * is no hook/trigger present at all. False otherwise
@@ -767,8 +767,11 @@
 /**
  * Special function for adding string-type variables. They in addition
  * also need a 'size' value saying how long their string buffer is.
+ * @param name name of the variable that will be used
+ * @param addr memory location the variable will point to
  * @param size the length of the string buffer
- * For more information see @IConsoleVarRegister()
+ * @param help the help string shown for the variable
+ * For more information see IConsoleVarRegister()
  */
 void IConsoleVarStringRegister(const char *name, void *addr, uint32 size, const char *help)
 {
--- a/src/console_cmds.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/console_cmds.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -8,6 +8,7 @@
 #include "debug.h"
 #include "engine.h"
 #include "functions.h"
+#include "landscape.h"
 #include "saveload.h"
 #include "string.h"
 #include "variables.h"
@@ -1416,6 +1417,19 @@
 	return true;
 }
 
+DEF_CONSOLE_CMD(ConListPatches)
+{
+	if (argc == 0) {
+		IConsoleHelp("List patch options. Usage: 'list_patches'");
+		return true;
+	}
+
+	if (argc != 1) return false;
+
+	IConsoleListPatches();
+	return true;
+}
+
 DEF_CONSOLE_CMD(ConListDumpVariables)
 {
 	const IConsoleVar *var;
@@ -1497,6 +1511,7 @@
 	IConsoleCmdRegister("pwd",          ConPrintWorkingDirectory);
 	IConsoleCmdRegister("clear",        ConClearBuffer);
 	IConsoleCmdRegister("patch",        ConPatch);
+	IConsoleCmdRegister("list_patches", ConListPatches);
 
 	IConsoleAliasRegister("dir",      "ls");
 	IConsoleAliasRegister("del",      "rm %+");
--- a/src/dedicated.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/dedicated.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -63,6 +63,7 @@
 
 #else
 
+/** Empty helper function call for NOT(UNIX and not MORPHOS) systems */
 void DedicatedFork() {}
 
 #endif /* ENABLE_NETWORK */
--- a/src/depot.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/depot.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -6,6 +6,7 @@
 #include "openttd.h"
 #include "depot.h"
 #include "functions.h"
+#include "landscape.h"
 #include "tile.h"
 #include "map.h"
 #include "table/strings.h"
--- a/src/depot_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/depot_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -176,7 +176,7 @@
 
 	switch (v->type) {
 		case VEH_TRAIN:
-			DrawTrainImage(v, x + 21, sprite_y, w->widget[DEPOT_WIDGET_MATRIX].right - 32, w->hscroll.pos, WP(w,depot_d).sel);
+			DrawTrainImage(v, x + 21, sprite_y, w->hscroll.cap + 4, w->hscroll.pos, WP(w,depot_d).sel);
 
 			/* Number of wagons relative to a standard length wagon (rounded up) */
 			SetDParam(0, (v->u.rail.cached_total_length + 7) / 8);
@@ -638,7 +638,7 @@
 /* Array to hold the default resize capacities
 * First part is the vehicle type, while the last is 0 = x, 1 = y */
 const uint _resize_cap[][2] = {
-/* VEH_TRAIN */    {6, 10 * 29 + 36}, ///< flags, unitnumber and unit count uses a total of 36 pixels and we set default to 10 units
+/* VEH_TRAIN */    {6, 10 * 29},
 /* VEH_ROAD */     {5, 5},
 /* VEH_SHIP */     {3, 3},
 /* VEH_AIRCRAFT */ {3, 4},
@@ -719,8 +719,9 @@
 				 _block_sizes[type][1] * w->vscroll.cap);
 
 	if (type == VEH_TRAIN) {
-		/* The train depot has a horizontal scroller so we should make room for it */
-		ResizeWindow(w, 0, 12);
+		/* Make space for the horizontal scrollbar vertically, and the unit
+		 * number, flag, and length counter horizontally. */
+		ResizeWindow(w, 36, 12);
 		/* substract the newly added space from the matrix since it was meant for the scrollbar */
 		w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12;
 	}
--- a/src/direction.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/direction.h	Tue Jun 12 11:56:35 2007 +0000
@@ -24,7 +24,7 @@
 
 /** Define basic enum properties */
 template <> struct EnumPropsT<Direction> : MakeEnumPropsT<Direction, byte, DIR_BEGIN, DIR_END, INVALID_DIR> {};
-typedef TinyEnumT<Direction> DirectionByte;
+typedef TinyEnumT<Direction> DirectionByte; //typedefing-enumification of Direction
 
 static inline Direction ReverseDir(Direction d)
 {
@@ -73,7 +73,7 @@
 
 /** Define basic enum properties */
 template <> struct EnumPropsT<DiagDirection> : MakeEnumPropsT<DiagDirection, byte, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_DIAGDIR> {};
-typedef TinyEnumT<DiagDirection> DiagDirectionByte;
+typedef TinyEnumT<DiagDirection> DiagDirectionByte; //typedefing-enumification of DiagDirection
 
 static inline DiagDirection ReverseDiagDir(DiagDirection d)
 {
@@ -137,7 +137,9 @@
 
 /**
  * Convert an axis and a flag for north/south into a DiagDirection
+ * @param xy axis to convert
  * @param ns north -> 0, south -> 1
+ * @return the desired DiagDirection
  */
 static inline DiagDirection XYNSToDiagDir(Axis xy, uint ns)
 {
--- a/src/disaster_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/disaster_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -19,6 +19,7 @@
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
+#include "landscape.h"
 #include "industry_map.h"
 #include "station_map.h"
 #include "table/strings.h"
--- a/src/economy.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/economy.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -6,6 +6,7 @@
 #include "openttd.h"
 #include "currency.h"
 #include "functions.h"
+#include "landscape.h"
 #include "strings.h" // XXX InjectDParam()
 #include "table/strings.h"
 #include "table/sprites.h"
@@ -254,6 +255,41 @@
 {
 	Town *t;
 	PlayerID old = _current_player;
+
+	assert(old_player != new_player);
+
+	{
+		Player *p;
+		uint i;
+
+		/* See if the old_player had shares in other companies */
+		_current_player = old_player;
+		FOR_ALL_PLAYERS(p) {
+			for (i = 0; i < 4; i++) {
+				if (p->share_owners[i] == old_player) {
+					/* Sell his shares */
+					int32 res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+					/* Because we are in a DoCommand, we can't just execute an other one and
+					 *  expect the money to be removed. We need to do it ourself! */
+					SubtractMoneyFromPlayer(res);
+				}
+			}
+		}
+
+		/* Sell all the shares that people have on this company */
+		p = GetPlayer(old_player);
+		for (i = 0; i < 4; i++) {
+			_current_player = p->share_owners[i];
+			if (_current_player != PLAYER_SPECTATOR) {
+				/* Sell the shares */
+				int32 res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+				/* Because we are in a DoCommand, we can't just execute an other one and
+				 *  expect the money to be removed. We need to do it ourself! */
+				SubtractMoneyFromPlayer(res);
+			}
+		}
+	}
+
 	_current_player = old_player;
 
 	/* Temporarily increase the player's money, to be sure that
@@ -346,25 +382,6 @@
 	/* Change color of existing windows */
 	if (new_player != PLAYER_SPECTATOR) ChangeWindowOwner(old_player, new_player);
 
-	{
-		Player *p;
-		uint i;
-
-		/* Check for shares */
-		FOR_ALL_PLAYERS(p) {
-			for (i = 0; i < 4; i++) {
-				/* 'Sell' the share if this player has any */
-				if (p->share_owners[i] == _current_player) {
-					p->share_owners[i] = PLAYER_SPECTATOR;
-				}
-			}
-		}
-		p = GetPlayer(_current_player);
-		/* Sell all the shares that people have on this company */
-		for (i = 0; i < 4; i++)
-			p->share_owners[i] = PLAYER_SPECTATOR;
-	}
-
 	_current_player = old;
 
 	MarkWholeScreenDirty();
@@ -965,6 +982,23 @@
 	const CargoSpec *cs = GetCargo(cargo_type);
 	byte f;
 
+	/* Use callback to calculate cargo profit, if available */
+	if (HASBIT(cs->callback_mask, CBM_CARGO_PROFIT_CALC)) {
+		uint32 var18 = min(dist, 0xFFFF) | (min(num_pieces, 0xFF) << 16) | (transit_days << 24);
+		uint16 callback = GetCargoCallback(CBID_CARGO_PROFIT_CALC, 0, var18, cs);
+		if (callback != CALLBACK_FAILED) {
+			int result = GB(callback, 0, 14);
+
+			/* Simulate a 15 bit signed value */
+			if (HASBIT(callback, 14)) result = 0x4000 - result;
+
+			/* "The result should be a signed multiplier that gets multiplied
+			 * by the amount of cargo moved and the price factor, then gets
+			 * divided by 8192." */
+			return result * num_pieces * _cargo_payment_rates[cargo_type] / 8192;
+		}
+	}
+
 	/* zero the distance if it's the bank and very short transport. */
 	if (_opt.landscape == LT_TEMPERATE && cs->label == 'VALU' && dist < 10)
 		dist = 0;
@@ -1520,6 +1554,7 @@
 
 /** Acquire shares in an opposing company.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 player to buy the shares from
  * @param p2 unused
  */
@@ -1565,6 +1600,7 @@
 
 /** Sell shares in an opposing company.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 player to sell the shares from
  * @param p2 unused
  */
@@ -1600,18 +1636,23 @@
  * that company.
  * @todo currently this only works for AI players
  * @param tile unused
+ * @param flags type of operation
  * @param p1 player/company to buy up
  * @param p2 unused
  */
 int32 CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
+	PlayerID pid = (PlayerID)p1;
 
 	/* Disable takeovers in multiplayer games */
-	if (!IsValidPlayer((PlayerID)p1) || _networking) return CMD_ERROR;
+	if (!IsValidPlayer(pid) || _networking) return CMD_ERROR;
+
+	/* Do not allow players to take over themselves */
+	if (pid == _current_player) return CMD_ERROR;
 
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
-	p = GetPlayer((PlayerID)p1);
+	p = GetPlayer(pid);
 
 	if (!p->is_ai) return CMD_ERROR;
 
--- a/src/elrail.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/elrail.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -52,6 +52,7 @@
 #include "viewport.h"
 #include "functions.h" /* We should REALLY get rid of this goddamn file, as it is butt-ugly */
 #include "variables.h" /* ... same here */
+#include "landscape.h"
 #include "rail.h"
 #include "debug.h"
 #include "tunnel_map.h"
@@ -269,7 +270,14 @@
 						continue; /* No neighbour, go looking for a better position */
 					}
 
-					AddSortableSpriteToDraw(pylons_normal[temp], PAL_NONE, x, y, 1, 1, 10,
+					SpriteID img = pylons_normal[temp];
+					SpriteID pal = PAL_NONE;
+					if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
+						SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+						pal = PALETTE_TO_TRANSPARENT;
+					}
+
+					AddSortableSpriteToDraw(img, pal, x, y, 1, 1, 10,
 							GetSlopeZ(ti->x + x_pcp_offsets[i], ti->y + y_pcp_offsets[i]));
 					break; /* We already have drawn a pylon, bail out */
 				}
@@ -278,7 +286,7 @@
 	}
 
 	/* Don't draw a wire under a low bridge */
-	if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !(_display_opt & DO_TRANS_BUILDINGS)) {
+	if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !HASBIT(_transparent_opt, TO_BUILDINGS)) {
 		uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
 
 		if (height <= TilePixelHeight(ti->tile) + TILE_HEIGHT) return;
@@ -307,7 +315,14 @@
 			assert(!IsSteepSlope(tileh[TS_HOME]));
 			sss = &CatenarySpriteData[Wires[tileh_selector][t][PCPconfig]];
 
-			AddSortableSpriteToDraw( sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
+			SpriteID img = sss->image;
+			SpriteID pal = PAL_NONE;
+			if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
+				SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+				pal = PALETTE_TO_TRANSPARENT;
+			}
+
+			AddSortableSpriteToDraw(img, pal, ti->x + sss->x_offset, ti->y + sss->y_offset,
 				sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + min(sss->x_offset, TILE_SIZE - 1), ti->y + min(sss->y_offset, TILE_SIZE - 1)) + sss->z_offset);
 		}
 	}
@@ -339,7 +354,14 @@
 
 	height = GetBridgeHeight(end);
 
-	AddSortableSpriteToDraw( sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
+	SpriteID img = sss->image;
+	SpriteID pal = PAL_NONE;
+	if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
+		SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+		pal = PALETTE_TO_TRANSPARENT;
+	}
+
+	AddSortableSpriteToDraw(img, pal, ti->x + sss->x_offset, ti->y + sss->y_offset,
 		sss->x_size, sss->y_size, sss->z_size, height + sss->z_offset
 	);
 
@@ -347,18 +369,26 @@
 	/* every other tile needs a pylon on the northern end */
 	if (num % 2) {
 		if (axis == AXIS_X) {
-			AddSortableSpriteToDraw(pylons_bridge[0 + HASBIT(tlg, 0)], PAL_NONE, ti->x, ti->y + 4 + 8 * HASBIT(tlg, 0), 1, 1, 10, height);
+			img = pylons_bridge[0 + HASBIT(tlg, 0)];
+			if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+			AddSortableSpriteToDraw(img, pal, ti->x, ti->y + 4 + 8 * HASBIT(tlg, 0), 1, 1, 10, height);
 		} else {
-			AddSortableSpriteToDraw(pylons_bridge[2 + HASBIT(tlg, 1)], PAL_NONE, ti->x + 4 + 8 * HASBIT(tlg, 1), ti->y, 1, 1, 10, height);
+			img = pylons_bridge[2 + HASBIT(tlg, 1)];
+			if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+			AddSortableSpriteToDraw(img, pal, ti->x + 4 + 8 * HASBIT(tlg, 1), ti->y, 1, 1, 10, height);
 		}
 	}
 
 	/* need a pylon on the southern end of the bridge */
 	if (DistanceMax(ti->tile, start) == length) {
 		if (axis == AXIS_X) {
-			AddSortableSpriteToDraw(pylons_bridge[0 + HASBIT(tlg, 0)], PAL_NONE, ti->x + 16, ti->y + 4 + 8 * HASBIT(tlg, 0), 1, 1, 10, height);
+			img = pylons_bridge[0 + HASBIT(tlg, 0)];
+			if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+			AddSortableSpriteToDraw(img, pal, ti->x + 16, ti->y + 4 + 8 * HASBIT(tlg, 0), 1, 1, 10, height);
 		} else {
-			AddSortableSpriteToDraw(pylons_bridge[2 + HASBIT(tlg, 1)], PAL_NONE, ti->x + 4 + 8 * HASBIT(tlg, 1), ti->y + 16, 1, 1, 10, height);
+			img = pylons_bridge[2 + HASBIT(tlg, 1)];
+			if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+			AddSortableSpriteToDraw(img, pal, ti->x + 4 + 8 * HASBIT(tlg, 1), ti->y + 16, 1, 1, 10, height);
 		}
 	}
 }
@@ -379,8 +409,15 @@
 			if (IsRailDepot(ti->tile)) {
 				const SortableSpriteStruct *sss = &CatenarySpriteData_Depot[GetRailDepotDirection(ti->tile)];
 
+				SpriteID img = sss->image;
+				SpriteID pal = PAL_NONE;
+				if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
+					SETBIT(img, PALETTE_MODIFIER_TRANSPARENT);
+					pal = PALETTE_TO_TRANSPARENT;
+				}
+
 				AddSortableSpriteToDraw(
-					sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
+					img, pal, ti->x + sss->x_offset, ti->y + sss->y_offset,
 					sss->x_size, sss->y_size, sss->z_size,
 					GetTileMaxZ(ti->tile) + sss->z_offset
 				);
--- a/src/endian_check.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/endian_check.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -12,6 +12,10 @@
 #include <stdio.h>
 #include <string.h>
 
+/** Main call of the endian_check program
+ * @param argc argument count
+ * @param argv arguments themselves
+ * @return exit code */
 int main (int argc, char *argv[]) {
 	unsigned char EndianTest[2] = { 1, 0 };
 	int force_BE = 0, force_LE = 0, force_PREPROCESSOR = 0;
--- a/src/fileio.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/fileio.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -170,7 +170,7 @@
 	FioFreeHandle();
 #endif /* LIMITED_FDS */
 	f = FioFOpenFile(filename);
-	if (f == NULL) error("Cannot open file '%s%s'", _paths.data_dir, filename);
+	if (f == NULL) error("Cannot open file '%s'", filename);
 
 	FioCloseFile(slot); // if file was opened before, close it
 	_fio.handles[slot] = f;
@@ -206,12 +206,16 @@
 	FILE *f;
 	char buf[MAX_PATH];
 
-	snprintf(buf, lengthof(buf), "%s%s", _paths.data_dir, filename);
+	if (strrchr(filename, PATHSEPCHAR) == NULL) {
+		snprintf(buf, lengthof(buf), "%s%s", _paths.data_dir, filename);
+	} else {
+		ttd_strlcpy(buf, filename, lengthof(buf));
+	}
 
 	f = fopen(buf, "rb");
 #if !defined(WIN32)
 	if (f == NULL) {
-		strtolower(buf + strlen(_paths.data_dir) - 1);
+		strtolower(strrchr(buf, PATHSEPCHAR));
 		f = fopen(buf, "rb");
 
 #if defined SECOND_DATA_DIR
@@ -308,6 +312,8 @@
 #if defined(SECOND_DATA_DIR)
 	_paths.second_data_dir = MallocT<char>(MAX_PATH);
 	ttd_strlcpy(_paths.second_data_dir, SECOND_DATA_DIR, MAX_PATH);
+#else
+	_paths.second_data_dir = NULL;
 #endif
 
 #if defined(USE_HOMEDIR)
--- a/src/functions.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/functions.h	Tue Jun 12 11:56:35 2007 +0000
@@ -7,35 +7,8 @@
 
 #include "gfx.h"
 
-void DoClearSquare(TileIndex tile);
-void RunTileLoop();
-
-uint GetPartialZ(int x, int y, Slope corners);
-uint GetSlopeZ(int x, int y);
-uint32 GetTileTrackStatus(TileIndex tile, TransportType mode);
-void GetAcceptedCargo(TileIndex tile, AcceptedCargo ac);
-void ChangeTileOwner(TileIndex tile, PlayerID old_player, PlayerID new_player);
-void AnimateTile(TileIndex tile);
-void ClickTile(TileIndex tile);
-void GetTileDesc(TileIndex tile, TileDesc *td);
 void UpdateTownMaxPass(Town *t);
 
-bool IsValidTile(TileIndex tile);
-
-static inline Point RemapCoords(int x, int y, int z)
-{
-	Point pt;
-	pt.x = (y - x) * 2;
-	pt.y = y + x - z;
-	return pt;
-}
-
-static inline Point RemapCoords2(int x, int y)
-{
-	return RemapCoords(x, y, GetSlopeZ(x, y));
-}
-
-
 /* clear_land.cpp */
 void DrawHillyLandTile(const TileInfo *ti);
 void DrawClearLandTile(const TileInfo *ti, byte set);
@@ -170,8 +143,6 @@
 void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost);
 void ShowFeederIncomeAnimation(int x, int y, int z, int32 cost);
 
-void DrawFoundation(TileInfo *ti, uint f);
-
 bool CheckIfAuthorityAllows(TileIndex tile);
 Town *ClosestTownFromTile(TileIndex tile, uint threshold);
 void ChangeTownRating(Town *t, int add, int max);
@@ -179,7 +150,6 @@
 uint GetTownRadiusGroup(const Town* t, TileIndex tile);
 int FindFirstBit(uint32 x);
 void ShowHighscoreTable(int difficulty, int8 rank);
-TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng);
 
 void AfterLoadTown();
 void UpdatePatches();
--- a/src/genworld.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/genworld.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -5,6 +5,7 @@
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
+#include "landscape.h"
 #include "player.h"
 #include "table/sprites.h"
 #include "variables.h"
@@ -19,7 +20,6 @@
 #include "heightmap.h"
 #include "date.h"
 
-void GenerateLandscape(byte mode);
 void GenerateClearTile();
 void GenerateIndustries();
 void GenerateUnmovables();
@@ -32,8 +32,6 @@
 
 void InitializeGame(int mode, uint size_x, uint size_y);
 
-void ConvertGroundTilesIntoWaterTiles();
-
 /* Please only use this variable in genworld.h and genworld.c and
  *  nowhere else. For speed improvements we need it to be global, but
  *  in no way the meaning of it is to use it anywhere else besides
--- a/src/industry.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/industry.h	Tue Jun 12 11:56:35 2007 +0000
@@ -22,6 +22,21 @@
 	INDUSTRYLIFE_CLOSABLE,         ///< Industry can only close (no production change)
 };
 
+/* Procedures that can be run to check whether an industry may
+ * build at location the given to the procedure */
+enum CheckProc {
+	CHECK_NOTHING    = 0,
+	CHECK_FOREST     = 1,
+	CHECK_REFINERY   = 2,
+	CHECK_FARM       = 3,
+	CHECK_PLANTATION = 4,
+	CHECK_WATER      = 5,
+	CHECK_LUMBERMILL = 6,
+	CHECK_BUBBLEGEN  = 7,
+	CHECK_OIL_RIG    = 8,
+	CHECK_END,
+};
+
 enum IndustyBehaviour {
 	INDUSTRYBEH_NONE                  =      0,
 	INDUSTRYBEH_PLANT_FIELDS          = 1 << 0,  ///< periodically plants fileds around itself (temp and artic farms)
@@ -83,7 +98,7 @@
 struct IndustrySpec {
 	const IndustryTileTable *const *table;///< List of the tiles composing the industry
 	byte num_table;                       ///< Number of elements in the table
-	byte cost_multiplier;                 ///< Base cost multiplier*/
+	byte cost_multiplier;                 ///< Base cost multiplier. Watch out for this one, << 5  VS << 8
 	IndustryType conflicting[3];          ///< Industries this industry cannot be close to
 	byte check_proc;                      ///< Index to a procedure to check for conflicting circumstances
 	CargoID produced_cargo[2];
@@ -94,11 +109,19 @@
 	IndustryLifeType life_type;           ///< This is also known as Industry production flag, in newgrf specs
 	byte climate_availability;            ///< Bitmask, giving landscape enums as bit position
 	IndustyBehaviour behaviour;           ///< How this industry will behave, and how others entities can use it
+	byte map_colour;                      ///< colour used for the small map
 	StringID name;                        ///< Displayed name of the industry
 	StringID new_industry_text;           ///< Message appearing when the industry is built
 	StringID closure_text;                ///< Message appearing when the industry closes
 	StringID production_up_text;          ///< Message appearing when the industry's production is increasing
 	StringID production_down_text;        ///< Message appearing when the industry's production is decreasing
+	byte appear_ingame[NUM_LANDSCAPE];    ///< Probability of appearance in game
+	byte appear_creation[NUM_LANDSCAPE];  ///< Probability of appearance during map creation
+	/* Newgrf stuff coming in */
+	uint16 callback_flags;                ///< Flags telling which grf callback is set
+	byte subst_id;
+	uint32 grfid;
+	byte override;
 };
 
 /**
--- a/src/industry_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/industry_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -259,7 +259,7 @@
 	/* Add industry on top of the ground? */
 	image = dits->building.sprite;
 	if (image != 0) {
-		if (_display_opt & DO_TRANS_BUILDINGS) {
+		if (HASBIT(_transparent_opt, TO_INDUSTRIES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else {
@@ -274,7 +274,7 @@
 			dits->dz,
 			z);
 
-		if (_display_opt & DO_TRANS_BUILDINGS) return;
+		if (HASBIT(_transparent_opt, TO_INDUSTRIES)) return;
 	}
 
 	{
@@ -1161,7 +1161,10 @@
 			IndustyBehaviour ind_behav = GetIndustrySpec(type)->behaviour;
 
 			if (ind_behav & INDUSTRYBEH_BUILT_ONWATER) {
-				return IsClearWaterTile(cur_tile);
+				/* As soon as the tile is not water, bail out.
+				 * But that does not mean the search is over.  You have
+				 * to make sure every tile of the industry will be only water*/
+				if (!IsClearWaterTile(cur_tile)) return false;
 			} else {
 				Slope tileh;
 
@@ -1548,16 +1551,16 @@
 	{0, 2, 3, 4, 6, 7, 8, 9, 10, 10, 10},   //high
 };
 
+/** This function is the one who really do the creation work
+ * of random industries during game creation
+ * @param type IndustryType of the desired industry
+ * @param amount of industries that need to be built */
 static void PlaceInitialIndustry(IndustryType type, int amount)
 {
 	int num = _numof_industry_table[_opt.diff.number_industries][amount];
 
-	if (type == IT_OIL_REFINERY || type == IT_OIL_RIG) {
-		/* These are always placed next to the coastline, so we scale by the perimeter instead. */
-		num = ScaleByMapSize1D(num);
-	} else {
-		num = ScaleByMapSize(num);
-	}
+	/* These are always placed next to the coastline, so we scale by the perimeter instead. */
+	num = (type == IT_OIL_REFINERY || type == IT_OIL_RIG) ? ScaleByMapSize1D(num) : ScaleByMapSize(num);
 
 	if (_opt.diff.number_industries != 0) {
 		PlayerID old_player = _current_player;
@@ -1578,31 +1581,45 @@
 	}
 }
 
+/** This function will create ramdon industries during game creation.
+ * It will scale the amount of industries by map size as well as difficulty level */
 void GenerateIndustries()
 {
-	const byte *b;
 	uint i = 0;
+	uint8 chance;
+	IndustryType it;
+	const IndustrySpec *ind_spc;
 
 	/* Find the total amount of industries */
-	b = _industry_create_table[_opt.landscape];
-	do {
-		int num = _numof_industry_table[_opt.diff.number_industries][b[0]];
+	for (it = IT_COAL_MINE; it < IT_END; it++) {
+		int num;
 
-		if (b[1] == IT_OIL_REFINERY || b[1] == IT_OIL_RIG) {
+		ind_spc = GetIndustrySpec(it);
+		chance = ind_spc->appear_creation[_opt.landscape];
+
+		if (chance > 0) {
+			/* once the chance of appearance is determind, it have to be scaled by
+			 * the difficulty level. The "chance" in question is more an index into
+			 * the _numof_industry_table,in fact */
+			num = _numof_industry_table[_opt.diff.number_industries][chance];
+
 			/* These are always placed next to the coastline, so we scale by the perimeter instead. */
-			num = ScaleByMapSize1D(num);
-		} else {
-			num = ScaleByMapSize(num);
+			num = (it == IT_OIL_REFINERY || it == IT_OIL_RIG) ? ScaleByMapSize1D(num) : ScaleByMapSize(num);
+			i += num;
 		}
+	}
 
-		i += num;
-	} while ( (b+=2)[0] != 0);
 	SetGeneratingWorldProgress(GWP_INDUSTRY, i);
 
-	b = _industry_create_table[_opt.landscape];
-	do {
-		PlaceInitialIndustry(b[1], b[0]);
-	} while ( (b+=2)[0] != 0);
+	for (it = IT_COAL_MINE; it < IT_END; 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.
+		 * @todo :  Do we really have to pass chance as un-scaled value, since we've already
+		 *          processed that scaling above? No, don't think so.  Will find a way. */
+		chance = GetIndustrySpec(it)->appear_creation[_opt.landscape];
+		if (chance > 0) PlaceInitialIndustry(it, chance);
+	};
 }
 
 /* Change industry production or do closure */
@@ -1718,34 +1735,61 @@
 	}
 }
 
-static const byte _new_industry_rand[4][32] = {
-	{12, 12, 12, 12, 12, 12, 12,  0,  0,  6,  6,  9,  9,  3,  3,  3, 18, 18,  4,  4,  2,  2,  5,  5,  5,  5,  5,  5,  1,  1,  8,  8},
-	{16, 16, 16,  0,  0,  0,  9,  9,  9,  9, 13, 13,  3,  3,  3,  3, 15, 15, 15,  4,  4, 11, 11, 11, 11, 11, 14, 14,  1,  1,  7,  7},
-	{21, 21, 21, 24, 22, 22, 22, 22, 23, 23, 16, 16, 16,  4,  4, 19, 19, 19, 13, 13, 20, 20, 20, 11, 11, 11, 17, 17, 17, 10, 10, 10},
-	{30, 30, 30, 36, 36, 31, 31, 31, 27, 27, 27, 28, 28, 28, 26, 26, 26, 34, 34, 34, 35, 35, 35, 29, 29, 29, 32, 32, 32, 33, 33, 33},
+/** Simple helper that will collect data for the generation of industries */
+struct ProbabilityHelper {
+	uint16 prob;      ///< probability
+	IndustryType ind; ///< industry id correcponding
 };
 
-static void MaybeNewIndustry(uint32 r)
+/**
+ * Try to create a random industry, during gameplay
+ */
+static void MaybeNewIndustry(void)
 {
-	int type =_new_industry_rand[_opt.landscape][GB(r, 16, 5)];
-	int j;
-	Industry *i;
-	const IndustrySpec *ind_spc = GetIndustrySpec(type);;
+	Industry *ind;               //will receive the industry's creation pointer
+	IndustryType rndtype, j;     // Loop controlers
+	const IndustrySpec *ind_spc;
+	uint num = 0;
+	ProbabilityHelper cumulative_probs[IT_END]; // probability collector
+	uint16 probability_max = 0;
 
+	/* Generate a list of all possible industries that can be built. */
+	for (j = 0; j < IT_END; j++) {
+		byte chance = GetIndustrySpec(j)->appear_ingame[_opt.landscape];
+
+		/* if appearing chance for this landscape is above 0, this industry can be chosen */
+		if (chance != 0) {
+			probability_max += chance;
+			/* adds the result for this industry */
+			cumulative_probs[num].ind = j;
+			cumulative_probs[num++].prob = probability_max;
+		}
+	}
+
+	/* Find a random type, with maximum being what has been evaluate above*/
+	rndtype = RandomRange(probability_max);
+	for (j = 0; j < IT_END; j++) {
+		/* and choose the index of the industry that matches as close as possible this random type */
+		if (cumulative_probs[j].prob >= rndtype) break;
+	}
+
+	ind_spc = GetIndustrySpec(cumulative_probs[j].ind);
+	/*  Check if it is allowed */
 	if ((ind_spc->behaviour & INDUSTRYBEH_BEFORE_1950) && _cur_year > 1950) return;
 	if ((ind_spc->behaviour & INDUSTRYBEH_AFTER_1960) && _cur_year < 1960) return;
 
-	j = 2000;
+	/* try to create 2000 times this industry */
+	num = 2000;
 	for (;;) {
-		i = CreateNewIndustry(RandomTile(), type);
-		if (i != NULL) break;
-		if (--j == 0) return;
+		ind = CreateNewIndustry(RandomTile(), cumulative_probs[j].ind);
+		if (ind != NULL) break;
+		if (--num == 0) return;
 	}
 
 	SetDParam(0, ind_spc->name);
-	SetDParam(1, i->town->index);
+	SetDParam(1, ind->town->index);
 	AddNewsItem(ind_spc->new_industry_text,
-		NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_OPENCLOSE, 0), i->xy, 0);
+		NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0);
 }
 
 static void ChangeIndustryProduction(Industry *i)
@@ -1828,7 +1872,7 @@
 
 	/* 3% chance that we start a new industry */
 	if (CHANCE16(3, 100)) {
-		MaybeNewIndustry(Random());
+		MaybeNewIndustry();
 	} else if (!_patches.smooth_economy) {
 		i = GetRandomIndustry();
 		if (i != NULL) ChangeIndustryProduction(i);
--- a/src/industry_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/industry_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -51,17 +51,35 @@
 	NUM_INDUSTRY_GFXES                 = 175,
 };
 
+/**
+ * Get the industry ID of the given tile
+ * @param t the tile to get the industry ID from
+ * @pre IsTileType(t, MP_INDUSTRY)
+ * @return the industry ID
+ */
 static inline IndustryID GetIndustryIndex(TileIndex t)
 {
 	assert(IsTileType(t, MP_INDUSTRY));
 	return _m[t].m2;
 }
 
+/**
+ * Get the industry of the given tile
+ * @param t the tile to get the industry from
+ * @pre IsTileType(t, MP_INDUSTRY)
+ * @return the industry
+ */
 static inline Industry* GetIndustryByTile(TileIndex t)
 {
 	return GetIndustry(GetIndustryIndex(t));
 }
 
+/**
+ * Is this industry tile fully built?
+ * @param t the tile to analyze
+ * @pre IsTileType(t, MP_INDUSTRY)
+ * @return true if and only if the industry tile is fully built
+ */
 static inline bool IsIndustryCompleted(TileIndex t)
 {
 	assert(IsTileType(t, MP_INDUSTRY));
@@ -106,18 +124,36 @@
 	SB(_m[tile].m1, 0, 2, value);
 }
 
+/**
+ * Get the industry graphics ID for the given industry tile
+ * @param t the tile to get the gfx for
+ * @pre IsTileType(t, MP_INDUSTRY)
+ * @return the gfx ID
+ */
 static inline IndustryGfx GetIndustryGfx(TileIndex t)
 {
 	assert(IsTileType(t, MP_INDUSTRY));
 	return _m[t].m5;
 }
 
+/**
+ * Set the industry graphics ID for the given industry tile
+ * @param t   the tile to set the gfx for
+ * @pre IsTileType(t, MP_INDUSTRY)
+ * @param gfx the graphics ID
+ */
 static inline void SetIndustryGfx(TileIndex t, IndustryGfx gfx)
 {
 	assert(IsTileType(t, MP_INDUSTRY));
 	_m[t].m5 = gfx;
 }
 
+/**
+ * Make the given tile an industry tile
+ * @param t     the tile to make an industry tile
+ * @param index the industry this tile belongs to
+ * @param gfx   the graphics to use for the tile
+ */
 static inline void MakeIndustry(TileIndex t, IndustryID index, IndustryGfx gfx)
 {
 	SetTileType(t, MP_INDUSTRY);
@@ -157,7 +193,6 @@
  * as well as the completion bit.
  * In fact, it is the same as restarting construction frmo ground up
  * @param tile the tile to query
- * @param generating_world whether generating a world or not
  * @pre IsTileType(tile, MP_INDUSTRY)
  */
 static inline void ResetIndustryConstructionStage(TileIndex tile)
@@ -166,12 +201,14 @@
 	_m[tile].m1 = 0;
 }
 
+/** Structure used to make a mapping from industry gfx to industry type */
 struct IndustryTypeSolver {
-	IndustryGfx MinGfx;
-	IndustryGfx MaxGfx;
+	IndustryGfx MinGfx; ///< The first gfx index for the industry type
+	IndustryGfx MaxGfx; ///< The last gfx index for the industry type
 };
 
-static const IndustryTypeSolver industry_gfx_Solver [IT_END] = {
+/** Mapping of industry gfx to industry type */
+static const IndustryTypeSolver industry_gfx_Solver[IT_END] = {
 	{  0,   6}, ///< IT_COAL_MINE
 	{  7,  10}, ///< IT_POWER_STATION,
 	{ 11,  15}, ///< IT_SAWMILL,
@@ -247,7 +284,7 @@
 /**
  * Set the animation state
  * @param tile the tile to set the animation state of
- * @param count the new animation state
+ * @param state the new animation state
  * @pre IsTileType(tile, MP_INDUSTRY)
  */
 static inline void SetIndustryAnimationState(TileIndex tile, byte state)
--- a/src/landscape.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/landscape.h	Tue Jun 12 11:56:35 2007 +0000
@@ -2,6 +2,9 @@
 
 /** @file landscape.h */
 
+#ifndef LANDSCAPE_H
+#define LANDSCAPE_H
+
 enum {
 	SNOW_LINE_MONTHS = 12,
 	SNOW_LINE_DAYS   = 32,
@@ -17,3 +20,42 @@
 byte GetSnowLine(void);
 byte HighestSnowLine(void);
 void ClearSnowLine(void);
+
+bool IsValidTile(TileIndex tile);
+
+uint GetPartialZ(int x, int y, Slope corners);
+uint GetSlopeZ(int x, int y);
+
+static inline Point RemapCoords(int x, int y, int z)
+{
+	Point pt;
+	pt.x = (y - x) * 2;
+	pt.y = y + x - z;
+	return pt;
+}
+
+static inline Point RemapCoords2(int x, int y)
+{
+	return RemapCoords(x, y, GetSlopeZ(x, y));
+}
+
+void DrawFoundation(TileInfo *ti, uint f);
+
+void DoClearSquare(TileIndex tile);
+void RunTileLoop();
+
+uint32 GetTileTrackStatus(TileIndex tile, TransportType mode);
+void GetAcceptedCargo(TileIndex tile, AcceptedCargo ac);
+void ChangeTileOwner(TileIndex tile, PlayerID old_player, PlayerID new_player);
+void AnimateTile(TileIndex tile);
+void ClickTile(TileIndex tile);
+void GetTileDesc(TileIndex tile, TileDesc *td);
+
+void InitializeLandscape();
+void GenerateLandscape(byte mode);
+
+void ConvertGroundTilesIntoWaterTiles();
+
+TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng);
+
+#endif /* LANDSCAPE_H */
--- a/src/lang/american.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/american.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Map of world
 STR_EXTRA_VIEW_PORT                                             :Extra viewport
 STR_SIGN_LIST                                                   :Sign list
+STR_TRANSPARENCY_OPTIONS                                        :Transparency options
 STR_02DF_TOWN_DIRECTORY                                         :Town directory
 STR_TOWN_POPULATION                                             :{BLACK}World population: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Viewport {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Make autoreplace keep the length of a train the same by removing cars (starting at the front), if replacing the engine would make the train longer.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Replacing: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTAL FEATURE {}Switch between engine and car replacement windows.{}Car replacement will only be done if the new car can be refitted into carrying the same type of cargo as the old one. This is checked for each car when the actual replacement takes place.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Engine is not buildable
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehicle is not available
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehicle is not available
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Ship is not available
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aircraft is not available
 
 STR_ENGINES                                                     :Engines
 STR_WAGONS                                                      :Cars
@@ -3148,3 +3152,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transfer Credits: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...this is a town owned road
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...road facing in the wrong direction
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Transparency Options
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Toggle transparency for station signs
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Toggle transparency for trees
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Toggle transparency for houses
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Toggle transparency for industries
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Toggle transparency for buildables like stations, depots, waypoints and catenary
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Toggle transparency for bridges
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
--- a/src/lang/brazilian_portuguese.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -729,6 +729,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Colocar farol
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Colocar transmissor
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Define área desértica.{} Pressione e segure CTRL para removê-la
+STR_CREATE_LAKE                                                 :{BLACK}Define área com água.{} Faz um canal, a menos se CTRL for pressionado ao nível do mar, neste caso inundará ao redor
 STR_0290_DELETE                                                 :{BLACK}Remover
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Remover esta cidade completamente
 STR_0292_SAVE_SCENARIO                                          :Salvar cenário
@@ -803,6 +804,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa mundi
 STR_EXTRA_VIEW_PORT                                             :Visualizador extra
 STR_SIGN_LIST                                                   :Lista de placas
+STR_TRANSPARENCY_OPTIONS                                        :Opções de Transparência
 STR_02DF_TOWN_DIRECTORY                                         :Lista de cidades
 STR_TOWN_POPULATION                                             :{BLACK}População mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Visualizador {COMMA}
@@ -3014,7 +3016,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Faz autosubstituição manter o tamanho do trem removendo vagões (começando pela frente), se ao substituir a locomotiva o trem ficar maior.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Substituindo: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTAL {}Troca entre substituir máquinas e substituir vagões.{} Só haverá a substituição se puder haver o reacondicionamento para carregar o mesmo tipo de carga. Essa checagem ocorre para cada vagão enquanto a substituição ocorre.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}A locomotiva não pode ser construída
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Trem não disponível
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Automóvel não disponível
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Embarcação não disponível
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aeronave não disponível
 
 STR_ENGINES                                                     :Motores
 STR_WAGONS                                                      :Vagões
@@ -3151,3 +3156,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transferir Dinheiro: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...é uma rua local
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...rua na direção errada
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opções de Transparência
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Alternar transparência para sinais de estação
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Alternar transparência para árvores
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Alternar transparência para casas
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Alternar transparência para indústrias
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Alternar transparência para construções como estações, depósitos, pontos de controle e eletrificação da ferrovia
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Alternar transparência para pontes
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Alternar transparência para estruturas como faróis e antenas, talvez no futuro para efeitos visuais
--- a/src/lang/bulgarian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/bulgarian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -804,6 +804,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта на света
 STR_EXTRA_VIEW_PORT                                             :Допълнителна камера
 STR_SIGN_LIST                                                   :Списък с табели
+STR_TRANSPARENCY_OPTIONS                                        :Опций на прозрачност
 STR_02DF_TOWN_DIRECTORY                                         :Списък със селищата
 STR_TOWN_POPULATION                                             :{BLACK}Световна популация: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Камера {COMMA}
@@ -3013,7 +3014,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Автоматичната замяна ще запази дължината на влака като премахне вагони (започвайки от предните), ако замяната довежда до по-дълъг влак.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Замяна: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} ЕКСПЕРИМЕНТАЛНА ВЪЗМОЖНОСТ {}Превключване между замяна на локомотиви и вагони.{}Замяната на вагони ще бъде направена само ако новия тип вагони може да се преустрои да превозва същия тип товар като старите. Това се проверява за всеки вагон когато замяната се случва.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Двигателя не е строим
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Превозното средство не е на разположение
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Превозното средство не е на разположение
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Корабът не е на разположение
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Самолетът не е на разположение
 
 STR_ENGINES                                                     :Двигатели
 STR_WAGONS                                                      :Вагони
@@ -3150,3 +3154,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Сума за преместване: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...този път принадлежи на градът
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...пътят е насочен в погрешната посока
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Опций на прозрачност
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Използвай прозрачност за знаци на гара
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Използвай прозрачност за дървета
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Използвай прозрачност за къщи
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Използвай прозрачност за промишленост
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Използвай прозрачност за сгради като гари, депа, пътни точки и висящи жици
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Използвай прозрачност за мостове
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Използвай прозрачност за сгради като фарове и антени, може би в бъдеще за украси
--- a/src/lang/catalan.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/catalan.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa del món
 STR_EXTRA_VIEW_PORT                                             :Vista extra
 STR_SIGN_LIST                                                   :Llista de senyals
+STR_TRANSPARENCY_OPTIONS                                        :Opcions de transparència
 STR_02DF_TOWN_DIRECTORY                                         :Directori de Poblacions
 STR_TOWN_POPULATION                                             :{BLACK}Població mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vista {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Fer que la sustitució automàtica mantingui la llargària del tren eliminant vagons (començant pel front), si substituint la màquina el tren es fa més llarg
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Sustituint: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} CARACTERÍSTICA EXPERIMENTAL {}Alterna entre finestres de sustitució de vagons i de motors{}La sustitució del vagó només tindrà lloc si el nou vagó pot ser remodelat per admetre el mateix tipus de càrrega que el vell. Això es comprova per a cada vagó quan el reemplaçament es produeix.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}El motor no es pot construir
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}El tren no està disponible
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}El vehicle no està disponible
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}El vaixell no està disponible
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}L'avió no està disponible
 
 STR_ENGINES                                                     :Motors
 STR_WAGONS                                                      :Vagons
@@ -3148,3 +3152,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transferir Crèdits: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...aquesta carretera es propietat del poble
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...sentit de la carretera en la direcció incorrecta
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opcions de transparència
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Activa/Desactiva transparència dels rètols d'estació
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Activa/Desactiva transparència dels arbres
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Activa/Desactiva transparència de les cases
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Activa/Desactiva transparència de les indústries
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Activa/Desactiva transparència dels edificis com ara estacions, cotxeres, punts de trobada i catenàries
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Activa/Desactiva transparència dels ponts
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Activa/Desactiva transparència de les estructures com ara fars i antenes
--- a/src/lang/czech.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/czech.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -860,6 +860,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa světa
 STR_EXTRA_VIEW_PORT                                             :Další pohled
 STR_SIGN_LIST                                                   :Seznam popisků
+STR_TRANSPARENCY_OPTIONS                                        :Nastavení průhlednosti
 STR_02DF_TOWN_DIRECTORY                                         :Seznam měst
 STR_TOWN_POPULATION                                             :{BLACK}Populace světa: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pohled {COMMA}
@@ -3075,7 +3076,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Funkce automatického vylepšování vlaků může udržovat stejnou délku vlaku odstraňovaním vagonů (od začátku vlaku), pokud by změna mašiny vlak prodloužila.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Vyměňování: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTÁLNÍ VLASTNOST {}Přepne mezi okny na výměnu lokomotiv a vagonů.{}Vagon se vymění, jen když je nový vagon schopen vozit stejnou komoditu, jako ten starý. Toto se ověřuje pro každý vagon.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Stroj nelze postavit
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozidlo není dostupné
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vůz není dostupné
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Loď není dostupná
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Letadlo není dostupné
 
 STR_ENGINES                                                     :lokomotivy
 STR_WAGONS                                                      :vagony
@@ -3212,3 +3216,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Podíl za převoz: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}... tato silnice je ve vlastnictví obce
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}... silnice je otočena jiným směrem
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Nastavení průhlednosti
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Změna průhlednosti jmen stanic
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Změna průhlednosti stromů
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Změna průhlednosti domů
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Změna průhlednosti továren
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Změna průhlednosti postavitelných objektů, jako stanic, kontrolních bodů a vedení
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Změna průhlednosti mostů
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Změna průhlednosti staveb jako majáků, vysílačů a doplňků (v budoucnosti)
--- a/src/lang/danish.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/danish.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Kort over verden
 STR_EXTRA_VIEW_PORT                                             :Flere lokalitetsvinduer
 STR_SIGN_LIST                                                   :Liste over skilte
+STR_TRANSPARENCY_OPTIONS                                        :Gennemsigtighedsvalg
 STR_02DF_TOWN_DIRECTORY                                         :Byoversigt
 STR_TOWN_POPULATION                                             :{BLACK}Verdens befolkning: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Lokalitetsvinduer {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Få autoudskift til at bevare længden af tog ved at fjerne vogne (startende fra fronten), hvis autoudskiftningen gør toget længere.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Udskifter: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EKSPERIMENTEL EGENSKAB {}Skift imellem lokomotiv- og vogn-udskiftningsvindue.{}Vognudskiftning vil kun finde sted hvis den nye vogn kan ændres til at transportere samme godstype some den gamle vogn. Dette bliver checket for hver vogn, når udskiftningen finder sted.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Køretøjet kan ikke bygges
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Tog er ikke tilgængelig
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vejkøretøj er ikke tilgængelig
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Skib er ikke tilgængelig
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Fly er ikke tilgængelig
 
 STR_ENGINES                                                     :Lokomotiver
 STR_WAGONS                                                      :Vogne
@@ -3148,3 +3152,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Værdi af overført gods: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...denne vej er ejet af en by
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...vejen peger i den forkerte retning
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Gennemsigtighedsvalg
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Skift gennemsigtighed for stationsskilte
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Skift gennemsigtighed for træer
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Skift gennemsigtighed for huse
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Skift gennemsigtighed for industrier
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Skift gennemsigtighed for konstruktioner som stationer, værksteder, kontrolsteder og køreledninger
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Skift gennemsigtighed for broer
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Skift gennemsigtighed for strukturer som fyrtårne og antenner, og måske i fremtiden for øjeguf
--- a/src/lang/dutch.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/dutch.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Kaart
 STR_EXTRA_VIEW_PORT                                             :Extra kijkvenster
 STR_SIGN_LIST                                                   :Bordenlijst
+STR_TRANSPARENCY_OPTIONS                                        :Doorzichtigheidsopties
 STR_02DF_TOWN_DIRECTORY                                         :Stedenlijst
 STR_TOWN_POPULATION                                             :{BLACK}Wereldbevolking: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Kijkvenster {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}De te vervangen trein behoudt zijn lengte door wagons weg te halen (startend aan de voorkant), als het vervangen de trein langer zou maken
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Aan het vervangen: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTEEL {}Wissel tussen motor- en wagonvervangvensters.{}Wagonvervanging wordt alleen uitgevoerd als de nieuwe wagon omgebouwd kan worden om hetzelfde ladingtype te dragen als de oude wagon. Dit wordt gecontroleerd voor elke wagon wanneer de daadwerkelijke vervanging plaats vindt.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Locomotief kan niet gebouwd worden
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Trein is niet beschikbaar
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Voertuig is niet beschikbaar
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Schip is niet beschikbaar
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Vliegtuig is niet beschikbaar
 
 STR_ENGINES                                                     :Motoren
 STR_WAGONS                                                      :Wagons
@@ -3148,3 +3152,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Geldoverdracht: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...deze weg is van een stad
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...weg is in de verkeerde richting
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Doorzichtigheidsopties
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Wissel doorzichtigheid voor stationsnamen
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Wissel doorzichtigheid voor bomen
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Wissel doorzichtigheid voor huizen
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Wissel doorzichtigheid voor industriën
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Wissel doorzichtigheid voor gebouwen zoals stations, depots, waypoints en bovenleiding
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Wissel doorzichtigheid voor bruggen
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Wissel doorzichtigheid voor structuren zoals vuurtoren en antennes, in de toekomst misschien voor eyecandy
--- a/src/lang/english.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/english.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -804,6 +804,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Map of world
 STR_EXTRA_VIEW_PORT                                             :Extra viewport
 STR_SIGN_LIST                                                   :Sign list
+STR_TRANSPARENCY_OPTIONS                                        :Transparency options
 STR_02DF_TOWN_DIRECTORY                                         :Town directory
 STR_TOWN_POPULATION                                             :{BLACK}World population: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Viewport {COMMA}
@@ -1136,6 +1137,14 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Right
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Window snap radius: {ORANGE}{STRING1} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Window snap radius: {ORANGE}disabled
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Town growth speed: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :None
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Slow
+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_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construction
@@ -3027,7 +3036,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Make autoreplace keep the length of a train the same by removing wagons (starting at the front), if replacing the engine would make the train longer.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Replacing: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTAL FEATURE {}Switch between engine and wagon replacement windows.{}Wagon replacement will only be done if the new wagon can be refitted into carrying the same type of cargo as the old one. This is checked for each wagon when the actual replacement takes place.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Engine is not buildable
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehicle is not available
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehicle is not available
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Ship is not available
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aircraft is not available
 
 STR_ENGINES                                                     :Engines
 STR_WAGONS                                                      :Wagons
@@ -3164,3 +3176,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transfer Credits: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...this is a town owned road
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...road facing in the wrong direction
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Transparency Options
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Toggle transparency for station signs
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Toggle transparency for trees
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Toggle transparency for houses
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Toggle transparency for industries
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Toggle transparency for buildables like stations, depots, waypoints and catenary
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Toggle transparency for bridges
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
--- a/src/lang/esperanto.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/esperanto.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -803,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mondomapo
 STR_EXTRA_VIEW_PORT                                             :Plia videjo
 STR_SIGN_LIST                                                   :Afiŝa listo
+STR_TRANSPARENCY_OPTIONS                                        :Ebloj por travidebleco
 STR_02DF_TOWN_DIRECTORY                                         :Urbaro
 STR_TOWN_POPULATION                                             :{BLACK}Monda enloĝantaro: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Videjo {COMMA}
@@ -989,7 +990,7 @@
 STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Trajno {COMMA} havas maltro da ordenoj enplane
 STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Trajno {COMMA} havas malplenan ordenon
 STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Trajno {COMMA} havas duoblajn ordenojn
-STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Trajnno {COMMA} havas nevalidan stacion en la ordenoj
+STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Trajno {COMMA} havas nevalidan stacion en la ordenoj
 STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Vojveturilo {COMMA} havas maltro da ordenoj enplane
 STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Vojveturilo {COMMA} havas malplenan ordenon
 STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Vojveturilo {COMMA} havas duoblajn ordenojn
@@ -3012,7 +3013,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Ĉe aŭtomata anstataŭigo tenu saman longecon de la trajno per forigo de vagonoj (defronte), se per nova maŝino la trajno plilongiĝas
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Anstataŭante: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EKSPERIMENTA AĴO {}Ŝaltu inter maŝina kaj vagona anstataŭigo.{}Vagona anstataŭigo nur okazos se la nova vagono povas transformiĝi por porti saman ŝarĝon kiel la malnova. Por ĉiu vagono tio kontroliĝos dum anstataŭado.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Maŝino ne kreeblas
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Trajno ne haveblas
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Veturilo ne haveblas
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Ŝipo ne haveblas
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aviadilo ne haveblas
 
 STR_ENGINES                                                     :Maŝinoj
 STR_WAGONS                                                      :Vagonoj
@@ -3149,3 +3153,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transigaj Kreditoj: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...ĉi tiun vojon posedas la urbo
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...vojo direktiĝas malĝuste
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Ebloj por travidebleco
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}(Ne)travideblu la staciaj afiŝoj
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}(Ne)travideblu la arboj
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}(Ne)travideblu la domoj
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}(Ne)travideblu la industrioj
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}(Ne)travideblu konstrueblaĵoj kiel stacidomoj, deponejoj, trairejoj kaj kondukdratoj
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}(Ne)travideblu la pontoj
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}(Ne)travideblu aĵoj kiel lumturoj kaj antenoj, kaj eble estonte vidĝuaĵoj
--- a/src/lang/estonian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/estonian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -691,6 +691,7 @@
 STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Konkurendi jaama saabus esimene veovahend
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Õnnetused / katastroofid
 STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Ettevõtte teave
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Ava / sulge tööstuseid
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Muutused majanduses
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Soovitused ja teated mängija veovahendite kohta
 STR_020C_NEW_VEHICLES                                           :{YELLOW}Uued veovahendid
@@ -730,7 +731,7 @@
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Maastiku loomine
 STR_022F_TOWN_GENERATION                                        :{BLACK}Linnade loomine
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Tööstuste loomine
-STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Teede ehitamine
+STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Teeehitus
 STR_0233_TOWN_GENERATION                                        :{WHITE}Linnade loomine
 STR_0234_NEW_TOWN                                               :{BLACK}Uus linn
 STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Ehita uus linn
@@ -791,12 +792,12 @@
 STR_026A_CONSTRUCT_FARM                                         :{BLACK}Raja farm
 STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Ehita rauamaagikaevandus
 STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Ehita naftapuuraugud
-STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Ehita pank (seda saab ehitada vaid linnadesse, mille rahvastikuarv ületab 1200)
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Ehita pank (saab ehitada vaid linnadesse, mille rahvastikuarv ületab 1200)
 STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Ehita paberitehas
 STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Ehita toidutööstus
 STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Ehita trükikoda
 STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Ehita kullakaevandus
-STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Ehita pank (seda saab vaid linnadesse ehitada)
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Ehita pank (saab vaid linnadesse ehitada)
 STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Ehita saeveski (vihmametsade puhustamiseks ja puidu tootmiseks)
 STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Istuta puuviljaistandus
 STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Istuta kummipuuistandus
@@ -826,6 +827,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Ehita tuletorn
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Paigalda saatjamast
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Loo kõrbealad.{}Eemaldamiseks klõpsa hoides all CTRL nuppu
+STR_CREATE_LAKE                                                 :{BLACK}Määratle veealad.{}Ehita kanal. CTRL-klahvi all hoides ujutab ümbruskonna üle.
 STR_0290_DELETE                                                 :{BLACK}Kustuta
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Hävita see linn täielikult
 STR_0292_SAVE_SCENARIO                                          :Salvesta kaart
@@ -1141,6 +1143,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Luba suvalise kujuga jaamad: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Uus teeotsimise algoritm(NPF asendab NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Raskete rongide simuleerimiseks kasutatav raskuse korrutaja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Luba läbisõidupeatused linnateedel: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Luba väikesed lennujaamad kuni mängu lõpuni: {ORANGE}{STRING}
 
@@ -2623,7 +2626,7 @@
 
 STR_UNKNOWN_DESTINATION                                         :tundmatu sihtpunkt
 STR_8812_EMPTY                                                  :{LTBLUE}Tühi
-STR_8813_FROM                                                   :{LTBLUE}{CARGO} {STATION}'st
+STR_8813_FROM                                                   :{LTBLUE}{CARGO} jaamast {STATION}
 STR_FROM_MULT                                                   :{LTBLUE}{CARGO} jaamast {STATION} (x{NUM})
 STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}Rong {COMMA} ootab depoos
 STR_8815_NEW_VEHICLES                                           :{BLACK}Uus rong
@@ -3108,7 +3111,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Sunni automaatvahetus hoidma rongi pikkust samaks eemaldades vaguneid (alustades eestpoolt), kui vahetatav mootor muudaks rongi pikemaks.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Vahetamisel: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} TESTIMISEL! {}Vaheta aken mootori ja vaguni vahetamise aknate vahel.{}Vaguni vahetus tehakse ainult siis kui uus vagun suudetakse muuta kandmaks sama tüüpi kaupa kui vana vagun. See valitakse igale vagunile kui tegelik vahetus käib
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Vedurit ei saa ehitada
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Sõiduk pole saadaval
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Sõiduk pole saadaval
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Laev pole saadaval
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Lennuk pole saadaval
 
 STR_ENGINES                                                     :Vedurid
 STR_WAGONS                                                      :Vaguneid
--- a/src/lang/finnish.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/finnish.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Maailmankartta
 STR_EXTRA_VIEW_PORT                                             :Lisänäkymä
 STR_SIGN_LIST                                                   :Kylttilista
+STR_TRANSPARENCY_OPTIONS                                        :Läpinäkyvyysvalinnat
 STR_02DF_TOWN_DIRECTORY                                         :Kaupunkihakemisto
 STR_TOWN_POPULATION                                             :{BLACK}Maailman asukasluku: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Näkymä {COMMA}
@@ -2198,6 +2199,7 @@
 STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}Yhtiön {COMPANY} on ottanut haltuun {COMPANY}!
 STR_7080_PROTECTED                                              :{WHITE}Tällä yhtiöllä ei ole vielä osakkeita...
 
+STR_LIVERY_DEFAULT                                              :Normaalit tunnusvärit
 STR_LIVERY_STEAM                                                :Höyryveturi
 STR_LIVERY_DIESEL                                               :Dieselveturi
 STR_LIVERY_ELECTRIC                                             :Sähköveturi
@@ -3010,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Automaattikorvaus pitäköön junan vakiopituisena poistamalla vaunuja (edestä) jos veturi pidentäisi junaa.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Korvataan: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} ERIKOIS OMINAISUUS {} Vaihda toiseen korvausikkunaan. {} Vaunu vaihdetaan ainoastaan jos uusi vaunu kuljettaa samaa rahtia. Tämä tarkistetaan, joka kerta kun vaunu korvataan.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Veturi ei ole rakennettavissa
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Juna tai vaunu ei ole saatavilla
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Ajoneuvo ei ole saatavilla
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Laiva ei ole saatavilla
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Lentokone ei ole saatavilla
 
 STR_ENGINES                                                     :Veturit
 STR_WAGONS                                                      :Vaunut
@@ -3146,3 +3151,15 @@
 
 ########
 
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Siirrä rahaa: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...kaupunki omistaa tien
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...tie on väärin päin
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Läpinäkyvyysvalinnat
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Läpinäkyvät kyltit
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Läpinäkyvät puut
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Läpinäkyvät talot
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Läpinäkyvät tehtaat
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Läpinäkyvät asemat, varikot, rastit ja sähkölinjat
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Läpinäkyvät sillat
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Läpinäkyvät rakenteet kuten majakat ja antennit
--- a/src/lang/french.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/french.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -803,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Carte du monde
 STR_EXTRA_VIEW_PORT                                             :Vue supplémentaire
 STR_SIGN_LIST                                                   :Liste des panneaux
+STR_TRANSPARENCY_OPTIONS                                        :Options de transparence
 STR_02DF_TOWN_DIRECTORY                                         :Annuaire des villes
 STR_TOWN_POPULATION                                             :{BLACK}Population mondiale : {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vue {COMMA}
@@ -3012,7 +3013,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}L'autoremplacement conserve la même longueur du train en retirant des wagons (d'abord par la tête), si le remplacement fait en sorte que le train ne devienne plus long.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}En Remplacement: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} FONCTION EXPERIMENTALE {}Passer à la fenêtre de remplacement de locomotives/wagons.{}Le remplacement de wagon ne se fera que si le nouveau wagon peut être réaménagé pour le même type de cargaison que l'ancien. Ceci est vérifié pour chaque wagon lors du remplacement.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Ce véhicule ne peut pas être construit
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Véhicule non disponible
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Véhicule non disponible
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Navire non disponible
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aéronef non disponible
 
 STR_ENGINES                                                     :Locomotives
 STR_WAGONS                                                      :Wagons
@@ -3149,3 +3153,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Crédits de transfert: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...cette route appartient à une ville
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...mauvaise orientation de la route
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Options de transparence
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Transparence des noms de station
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Transparence des arbres
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Transparence des maisons
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Transparence des industries
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Transparence des éléments constructibles tels que stations, dépôts, points de contrôle et caténaire
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Transparence des ponts
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Transparence des structures telles que phares et antennes
--- a/src/lang/galician.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/galician.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -2549,6 +2549,7 @@
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parando, {VELOCITY}
 STR_TRAIN_NO_POWER                                              :{RED}Sen enerxía
 
+
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Haí un vehículo de estrada no camiño
 STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} Vehículos de Estrada
@@ -2802,6 +2803,7 @@
 STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
 STR_NEWGRF_MD5SUM                                               :{BLACK}Suma MD5: {SILVER}{STRING}
 
+
 STR_NEWGRF_ADD                                                  :{BLACK}Engadir
 STR_NEWGRF_REMOVE                                               :{BLACK}Eliminar
 STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Elimina-lo arquivo NewGRF seleccionado da lista
@@ -2814,6 +2816,7 @@
 
 STR_NEWGRF_DISABLED                                             :{RED}Desactivado
 
+
 STR_CURRENCY_WINDOW                                             :{WHITE}Moeda persoalizada
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Taxa de cambio: {ORANGE}{CURRENCY} = £ {COMMA}
 STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Separador:
@@ -2918,6 +2921,7 @@
 STR_RANDOM_SEED                                                 :{BLACK}Semilla Aleatoria:
 STR_RANDOM_SEED_HELP                                            :{BLACK}Pincha para introducir unha semilla
 STR_LAND_GENERATOR                                              :{BLACK}Xerador de terreo:
+STR_TREE_PLACER                                                 :{BLACK}Algoritmo para árbores:
 STR_TERRAIN_TYPE                                                :{BLACK}Tipo de terreo:
 STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Nivel do mar:
 STR_SMOOTHNESS                                                  :{BLACK}Suavidade:
@@ -2938,7 +2942,9 @@
 STR_WORLD_GENERATION                                            :{BLACK}Xeración do mundo
 STR_SETTINGUP_GAME                                              :{BLACK}Configurando partida
 STR_PREPARING_GAME                                              :{BLACK}Preparando partida
+STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Esta acción cambiou o nivel de dificultade a Personalizado
 STR_SE_FLAT_WORLD                                               :{WHITE}Terreo Chan
+STR_SE_RANDOM_LAND                                              :{WHITE}Terreo aleatorio
 STR_SE_NEW_WORLD                                                :{BLACK}Crear novo escenario
 STR_SE_CAPTION                                                  :{WHITE}Tipo de escenario
 STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
@@ -2967,4 +2973,19 @@
 STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Lonxitude: {NUM}{}Diferencia de altura: {NUM} m
 STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Área: {NUM} x {NUM}{}Diferencia de altura: {NUM} m
 
+############ Date formatting
+STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
+STR_DATE_SHORT                                                  :{STRING} {NUM}
+STR_DATE_LONG                                                   :{STRING} {STRING} {NUM}
+
 ########
+
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transferir Créditos: {LTBLUE}{CURRENCY}
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opcións de Transparencia
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Habilitar transparencia para as sinais das estacións
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Habilitar transparencia para árbores
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Habilitar transparencia para casas
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Habilitar transparencia para industrias
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Habilitar transparencia para construibles como estacións, depósitos, puntos de ruta e catenaria
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Habilitar transparencia para pontes
--- a/src/lang/german.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/german.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -803,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Weltkarte
 STR_EXTRA_VIEW_PORT                                             :Zusatzansicht
 STR_SIGN_LIST                                                   :Schilderliste
+STR_TRANSPARENCY_OPTIONS                                        :Transparenzeinstellungen
 STR_02DF_TOWN_DIRECTORY                                         :Städteverzeichnis
 STR_TOWN_POPULATION                                             :{BLACK}Weltbevölkerung: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Ansicht {COMMA}
@@ -3009,7 +3010,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Zwinge das automatische Ersetzen die Länge eines Zuges beizubehalten, indem (vorne beginnend) Waggons entfernt werden, falls das Ersetzen der Lokomotive den Zug verlängern würde.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Ersetze: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTELLE FUNKTION {}Umschalter für Lok- oder Waggonersetzung{}Waggons werden nur ersetzt, wenn der neue Waggon den selben Warentyp transportieren kann wie der alte. Dies wird beim Ersetzen eines jeden Waggons einzeln geprüft.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Lokomotive ist nicht baubar
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Fahrzeug nicht verfügbar
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Fahrzeug nicht verfügbar
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Schiff nicht verfügbar
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Flugzeug nicht verfügbar
 
 STR_ENGINES                                                     :Loks
 STR_WAGONS                                                      :Waggons
@@ -3146,3 +3150,5 @@
 ########
 
 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
+
--- a/src/lang/hungarian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/hungarian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -868,6 +868,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Világtérkép
 STR_EXTRA_VIEW_PORT                                             :Extra látkép
 STR_SIGN_LIST                                                   :Feliratok listája
+STR_TRANSPARENCY_OPTIONS                                        :Átlátszósági beállítások
 STR_02DF_TOWN_DIRECTORY                                         :Városlista
 STR_TOWN_POPULATION                                             :{BLACK}Világnépesség: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}{COMMA}. látkép
@@ -1200,6 +1201,14 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Jobbra
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Ablakigazítás kiterjedése: {ORANGE}{STRING} képpont
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Ablakigazítás kiterjedése: {ORANGE}letiltva
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Város növekedési sebesség: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Nincs
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Lassú
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normális
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Gyors
+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_GUI                                          :{BLACK}Megjelenítés
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Építkezés
@@ -3114,7 +3123,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Az automatikus cserénél a szerelvény hosszának a megtartása kocsik lekapcsolásával (előröl kezdve), ha a csere után a mozdony hosszabb lenne.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Lecserél: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} KISÉRLETI TULAJDONSÁG {}Váltás a mozdony és a vasúti-kocsi cserélő ablak között.{}A vagonok cseréje csak akkor történik meg, ha az új vagon átalakítható ugyanolyan típusú teher szállítására. Ez minden vagoncserénél ellenőrződik.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}A mozdony így nem építhető meg
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}A jármű nem elérhető.
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}A jármű nem elérhető.
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}A hajó nem elérhető.
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}A repülő nem elérhető.
 
 STR_ENGINES                                                     :Mozdonyok
 STR_WAGONS                                                      :Vagonok
@@ -3250,3 +3262,15 @@
 
 ########
 
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Szállítási díj: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...ez egy városi tulajdonú út
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...az út másik irányba vezet
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Átlátszósági beállítások
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Átkapcsolni az állomásjelzésekre
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Átkapcsolni a fákra
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Átkapcsolni az épületekre
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Átkapcsolni az ipari létesítményekre
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Átkapcsolni az építhető elemekre (állomások, depók, útipontok és felsővezeték)
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Átkapcsolni a hidakra
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Átkapcsolni egyéb épületekre, mint világítótorony és antennák (esetleg egyéb jövőbeni díszek)
--- a/src/lang/icelandic.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/icelandic.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -2988,7 +2988,6 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Heldur lengd lestar með því að fjarlægja vagna (framan frá) ef útskipting dráttarvagna myndi lengja hana.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Skipti út: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} TILRAUNAEIGINLEIKI {}Skipta á milli útskiptiglugga dráttar- og flutningavagna.{}Útskipting vagna fer aðeins fram ef hægt er að breyta nýju vögnunum til að flytja sama farm og þeir gömlu. Það er kannað fyrir hvern vagn þegar útskipting á honum fer fram.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Ekki hægt að smíða dráttarvagn
 
 STR_ENGINES                                                     :Dráttarvagnar
 STR_WAGONS                                                      :Vagnar
--- a/src/lang/italian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/italian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -2,38 +2,39 @@
 ##ownname Italiano
 ##isocode it
 ##plural 0
+##case ms mp fs fp
 ##gender m f
 
 ##id 0x0000
 STR_NULL                                                        :
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fuori dal bordo della mappa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Troppo vicino al bordo della mappa
-STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Denaro insufficiente - richiesto {CURRENCY}
+STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Denaro insufficiente - servono {CURRENCY}
 STR_0004                                                        :{WHITE}{CURRENCY64}
 STR_0005                                                        :{RED}{CURRENCY64}
 STR_EMPTY                                                       :
-STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Richiesto terreno piano
+STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Richiesto terreno pianeggiante
 STR_0008_WAITING                                                :{BLACK}In attesa: {WHITE}{STRING}
 STR_0009                                                        :{WHITE}{CARGO}
 STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (in viaggio da
 STR_000B                                                        :{YELLOW}{STATION})
-STR_000C_ACCEPTS                                                :{BLACK}Accettati: {WHITE}
-STR_000D_ACCEPTS                                                :{BLACK}Accettati: {GOLD}
+STR_000C_ACCEPTS                                                :{BLACK}Accetta: {WHITE}
+STR_000D_ACCEPTS                                                :{BLACK}Accetta: {GOLD}
 STR_000E                                                        :
-STR_000F_PASSENGERS                                             :Passeggeri
-STR_0010_COAL                                                   :Carbone
-STR_0011_MAIL                                                   :Posta
-STR_0012_OIL                                                    :Petrolio
-STR_0013_LIVESTOCK                                              :Bestiame
-STR_0014_GOODS                                                  :Beni
-STR_0015_GRAIN                                                  :Grano
-STR_0016_WOOD                                                   :Legname
-STR_0017_IRON_ORE                                               :Minerali Ferrosi
-STR_0018_STEEL                                                  :Acciaio
-STR_0019_VALUABLES                                              :Valori
-STR_001A_COPPER_ORE                                             :Minerali di Rame
-STR_001B_MAIZE                                                  :Mais
-STR_001C_FRUIT                                                  :Frutta
+STR_000F_PASSENGERS                                             :{G=m}Passeggeri
+STR_0010_COAL                                                   :{G=m}Carbone
+STR_0011_MAIL                                                   :{G=f}Posta
+STR_0012_OIL                                                    :{G=m}Petrolio
+STR_0013_LIVESTOCK                                              :{G=m}Bestiame
+STR_0014_GOODS                                                  :{G=m}Beni
+STR_0015_GRAIN                                                  :{G=m}Grano
+STR_0016_WOOD                                                   :{G=m}Legname
+STR_0017_IRON_ORE                                               :{G=m}Ferro
+STR_0018_STEEL                                                  :{G=m}Acciaio
+STR_0019_VALUABLES                                              :{G=m}Valori
+STR_001A_COPPER_ORE                                             :{G=m}Rame
+STR_001B_MAIZE                                                  :{G=m}Mais
+STR_001C_FRUIT                                                  :{G=f}Frutta
 STR_001D_DIAMONDS                                               :{G=m}Diamanti
 STR_001E_FOOD                                                   :{G=m}Cibo
 STR_001F_PAPER                                                  :{G=f}Carta
@@ -45,12 +46,12 @@
 STR_0025_TOYS                                                   :{G=m}Giocattoli
 STR_0026_CANDY                                                  :{G=f}Caramelle
 STR_0027_COLA                                                   :{G=f}Cola
-STR_0028_COTTON_CANDY                                           :{G=m}Cotone Candito
-STR_0029_BUBBLES                                                :{G=f}Bolle
+STR_0028_COTTON_CANDY                                           :{G=m}Zucchero filato
+STR_0029_BUBBLES                                                :{G=f}Bollicine
 STR_002A_TOFFEE                                                 :{G=m}Toffee
 STR_002B_BATTERIES                                              :{G=f}Batterie
 STR_002C_PLASTIC                                                :{G=f}Plastica
-STR_002D_FIZZY_DRINKS                                           :{G=f}Bibite Frizzanti
+STR_002D_FIZZY_DRINKS                                           :{G=f}Bibite frizzanti
 STR_002E                                                        :
 STR_002F_PASSENGER                                              :{G=m}Passeggero
 STR_0030_COAL                                                   :{G=m}Carbone
@@ -60,10 +61,10 @@
 STR_0034_GOODS                                                  :{G=m}Beni
 STR_0035_GRAIN                                                  :{G=m}Grano
 STR_0036_WOOD                                                   :{G=m}Legname
-STR_0037_IRON_ORE                                               :{G=m}Minerale Ferroso
+STR_0037_IRON_ORE                                               :{G=m}Ferro
 STR_0038_STEEL                                                  :{G=m}Acciaio
 STR_0039_VALUABLES                                              :{G=m}Valori
-STR_003A_COPPER_ORE                                             :{G=m}Minerale di Rame
+STR_003A_COPPER_ORE                                             :{G=m}Rame
 STR_003B_MAIZE                                                  :{G=m}Mais
 STR_003C_FRUIT                                                  :{G=f}Frutta
 STR_003D_DIAMOND                                                :{G=m}Diamante
@@ -77,12 +78,12 @@
 STR_0045_TOY                                                    :{G=m}Giocattolo
 STR_0046_CANDY                                                  :{G=f}Caramella
 STR_0047_COLA                                                   :{G=f}Cola
-STR_0048_COTTON_CANDY                                           :{G=m}Cotone Candito
-STR_0049_BUBBLE                                                 :{G=f}Bolla
+STR_0048_COTTON_CANDY                                           :{G=m}Zucchero filato
+STR_0049_BUBBLE                                                 :{G=f}Bollicina
 STR_004A_TOFFEE                                                 :{G=m}Toffee
 STR_004B_BATTERY                                                :{G=f}Batteria
 STR_004C_PLASTIC                                                :{G=f}Plastica
-STR_004D_FIZZY_DRINK                                            :{G=f}Bevanda Frizzante
+STR_004D_FIZZY_DRINK                                            :{G=f}Bevanda frizzante
 STR_QUANTITY_NOTHING                                            :
 STR_QUANTITY_PASSENGERS                                         :{COMMA} passegger{P o i}
 STR_QUANTITY_COAL                                               :{WEIGHT} di carbone
@@ -156,9 +157,9 @@
 STR_00B2_MESSAGE                                                :{YELLOW}Messaggio
 STR_00B3_MESSAGE_FROM                                           :{YELLOW}Messaggio da {STRING}
 STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Attenzione!
-STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Non puoi fare questo....
-STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Non puoi ripulire l'area....
-STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Copyright Originale{COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati
+STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Non è possibile farlo....
+STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Impossibile ripulire l'area....
+STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Copyright originale {COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati
 STR_00B7_VERSION                                                :{BLACK}OpenTTD versione {REV}
 STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTD {COPYRIGHT}2002-2007 Il team OpenTTD
 STR_TRANSLATED_BY                                               :{BLACK}  Traduttore/i - Sidew e altri, senza nome,  che mi hanno preceduto.
@@ -168,7 +169,7 @@
 STR_00C7_QUIT                                                   :{WHITE}Esci
 STR_00C8_YES                                                    :{BLACK}Sì
 STR_00C9_NO                                                     :{BLACK}No
-STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Sei sicuro di voler uscire dal gioco e tornare a {STRING}?
+STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Si è sicuri di voler uscire dal gioco e tornare a {STRING}?
 STR_00CB_1                                                      :{BLACK}1
 STR_00CC_2                                                      :{BLACK}2
 STR_00CD_3                                                      :{BLACK}3
@@ -186,16 +187,16 @@
 STR_00D9_BLUE                                                   :Blu
 STR_00DA_CREAM                                                  :Crema
 STR_00DB_MAUVE                                                  :Malva
-STR_00DC_PURPLE                                                 :Porpora
-STR_00DD_ORANGE                                                 :Arancione
+STR_00DC_PURPLE                                                 :Viola
+STR_00DD_ORANGE                                                 :Arancio
 STR_00DE_BROWN                                                  :Marrone
 STR_00DF_GREY                                                   :Grigio
 STR_00E0_WHITE                                                  :Bianco
 STR_00E1_TOO_MANY_VEHICLES_IN_GAME                              :{WHITE}Troppi veicoli nel gioco
 STR_00E2                                                        :{BLACK}{COMMA}
 STR_00E3                                                        :{RED}{COMMA}
-STR_00E4_LOCATION                                               :{BLACK}Locazione
-STR_00E5_CONTOURS                                               :Contorni
+STR_00E4_LOCATION                                               :{BLACK}Posizione
+STR_00E5_CONTOURS                                               :Territorio
 STR_00E6_VEHICLES                                               :Veicoli
 STR_00E7_INDUSTRIES                                             :Industrie
 STR_00E8_ROUTES                                                 :Percorsi
@@ -212,56 +213,56 @@
 STR_00F3_400M                                                   :{BLACK}{TINYFONT}400m
 STR_00F4_500M                                                   :{BLACK}{TINYFONT}500m
 STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Treni
-STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Veicoli Stradali
+STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Automezzi
 STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Navi
-STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Aereo
+STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Aeromobili
 STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Percorsi di trasporto
-STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Miniera di Carbone
-STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Centrale Elettrica
+STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Miniera di carbone
+STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Centrale elettrica
 STR_00FC_FOREST                                                 :{BLACK}{TINYFONT}Foresta
 STR_00FD_SAWMILL                                                :{BLACK}{TINYFONT}Segheria
 STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Raffineria
 STR_00FF_FARM                                                   :{BLACK}{TINYFONT}Fattoria
 STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Fabbrica
-STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Stamperia
-STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Pozzi Petroliferi
-STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Miniera di Ferro
+STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Tipografia
+STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Pozzo petrolifero
+STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Miniera di ferro
 STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Acciaieria
 STR_0105_BANK                                                   :{BLACK}{TINYFONT}Banca
 STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Cartiera
-STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Miniera d'Oro
-STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Azienda Alimentare
-STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Miniera di Diamanti
-STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Miniera di Rame
-STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Piantagione di Frutta
-STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Piantagione di Gomma
-STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Falda Acquifera
-STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Cisterna d'Acqua
+STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Miniera d'oro
+STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Azienda alimentare
+STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Miniera di diamanti
+STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Miniera di rame
+STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Piantagione di frutta
+STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Piantagione di gomma
+STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Falda acquifera
+STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Cisterna idrica
 STR_010F_LUMBER_MILL                                            :{BLACK}{TINYFONT}Falegnameria
-STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Foresta di Cotone Candito
-STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Fabbrica di Caramelle
-STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Fattoria delle Batterie
-STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Pozzi di Cola
-STR_0114_TOY_SHOP                                               :{BLACK}{TINYFONT}Negozio di Giocattoli
-STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}Fabbrica di Giocattoli
-STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}Sorgenti di Plastica
-STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}Fabbrica di Bevande Friz.
-STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}Generatore di Bolle
-STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}Estrattore di Toffee
-STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}Miniera di Zucchero
-STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Stazione Ferroviaria
-STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Area di carico per Camion
-STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Stazione Bus
+STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Foresta di zucchero filato
+STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Fabbrica di caramelle
+STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Fattoria delle batterie
+STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Pozzo di Cola
+STR_0114_TOY_SHOP                                               :{BLACK}{TINYFONT}Negozio di giocattoli
+STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}Fabbrica di giocattoli
+STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}Sorgente di plastica
+STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}Fabbrica di bibite friz.
+STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}Generatore di bollicine
+STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}Cava di toffee
+STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}Miniera di zucchero
+STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Stazione ferroviaria
+STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Area di carico camion
+STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Stazione autobus
 STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Aeroporto/Eliporto
 STR_011F_DOCK                                                   :{BLACK}{TINYFONT}Molo
-STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Terreno Accidentato
-STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Terreno Erboso
-STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Terreno Spoglio
+STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Terreno accidentato
+STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Terreno erboso
+STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Terreno spoglio
 STR_0123_FIELDS                                                 :{BLACK}{TINYFONT}Campi
 STR_0124_TREES                                                  :{BLACK}{TINYFONT}Alberi
 STR_0125_ROCKS                                                  :{BLACK}{TINYFONT}Roccie
 STR_0126_WATER                                                  :{BLACK}{TINYFONT}Acqua
-STR_0127_NO_OWNER                                               :{BLACK}{TINYFONT}Senza Proprietario
+STR_0127_NO_OWNER                                               :{BLACK}{TINYFONT}Senza proprietario
 STR_0128_TOWNS                                                  :{BLACK}{TINYFONT}Città
 STR_0129_INDUSTRIES                                             :{BLACK}{TINYFONT}Industrie
 STR_012A_DESERT                                                 :{BLACK}{TINYFONT}Deserto
@@ -285,16 +286,16 @@
 
 STR_013B_OWNED_BY                                               :{WHITE}...posseduto da {STRING}
 STR_013C_CARGO                                                  :{BLACK}Carico
-STR_013D_INFORMATION                                            :{BLACK}Informazione
+STR_013D_INFORMATION                                            :{BLACK}Informazioni
 STR_013E_CAPACITIES                                             :{BLACK}Capienza
 STR_013E_TOTAL_CARGO                                            :{BLACK}Carico totale
 STR_013F_CAPACITY                                               :{BLACK}Capacità: {LTBLUE}{CARGO}
 STR_CAPACITY_MULT                                               :{BLACK}Capacità: {LTBLUE}{CARGO} (x{NUM})
-STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Carico totale (capacità) di questo treno:
+STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Capacità di carico totale di questo treno:
 STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
 STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
-STR_0140_NEW_GAME                                               :{BLACK}Nuovo Gioco
-STR_0141_LOAD_GAME                                              :{BLACK}Carica Gioco
+STR_0140_NEW_GAME                                               :{BLACK}Nuova partita
+STR_0141_LOAD_GAME                                              :{BLACK}Carica partita
 STR_SINGLE_PLAYER                                               :{BLACK}Giocatore singolo
 STR_MULTIPLAYER                                                 :{BLACK}Multiplayer
 STR_SCENARIO_EDITOR                                             :{BLACK}Editore di Scenari
@@ -349,10 +350,10 @@
 ############ range for menu starts
 STR_0154_OPERATING_PROFIT_GRAPH                                 :Grafico profitto operativo
 STR_0155_INCOME_GRAPH                                           :Grafico incassi
-STR_0156_DELIVERED_CARGO_GRAPH                                  :Grafico merce consegnata
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Grafico merci consegnate
 STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Grafico storico prestazioni
-STR_0158_COMPANY_VALUE_GRAPH                                    :Grafico valore società
-STR_0159_CARGO_PAYMENT_RATES                                    :Grafico % pagamento merce
+STR_0158_COMPANY_VALUE_GRAPH                                    :Grafico valore compagnie
+STR_0159_CARGO_PAYMENT_RATES                                    :Grafico tariffe merci
 STR_015A_COMPANY_LEAGUE_TABLE                                   :Classifica società
 STR_PERFORMANCE_DETAIL_MENU                                     :Dettagli prestazionali
 ############ range for menu ends
@@ -430,48 +431,48 @@
 STR_016F                                                        :{TINYFONT}{STRING}{} {STRING}{}{NUM}
 STR_0170                                                        :{TINYFONT}{STRING}-
 STR_0171_PAUSE_GAME                                             :{BLACK}Pausa
-STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}Salva partita, abandona la partita, esci
-STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra elenco delle stazioni delle società
-STR_0174_DISPLAY_MAP                                            :{BLACK}Mostra mappa
-STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}Mostra mappa, elenco città
-STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}Mostra elenco città
-STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}Mostra info finanziarie delle società
-STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}Mostra info generali sulle società
-STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Mostra grafici
-STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Mostra classifica della società
-STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra elenco dei treni della società
-STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra elenco dei veicoli stradali della società
-STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra elenco delle navi della società
-STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra lista degli aerei della società
-STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Avvicina visuale
-STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Allontana visuale
+STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}Salva la partita, abandona la partita, esci
+STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra l'elenco delle stazioni di una compagnia
+STR_0174_DISPLAY_MAP                                            :{BLACK}Mostra la mappa
+STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}Mostra la mappa, l'elenco delle città
+STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}Mostra l'elenco delle città
+STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}Mostra informazioni finanziare sulle compagnie
+STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}Mostra informazioni generali sulle compagnie
+STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Mostra i grafici
+STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Mostra la classifica delle compagnie
+STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra l'elenco dei treni di una compagnia
+STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra l'elenco degli automezzi di una compagnia
+STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra l'elenco delle navi di una compagnia
+STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra l'elenco degli aeromobili di una compagnia
+STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Zooma la visuale in avanti
+STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Zooma la visuale indietro
 STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Costruisci ferrovie
 STR_0182_BUILD_ROADS                                            :{BLACK}Costruisci strade
 STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}Costruisci moli
 STR_0184_BUILD_AIRPORTS                                         :{BLACK}Costruisci aeroporti
-STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Pianta alberi, posiziona cartelli ecc...
+STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Pianta alberi, posiziona cartelli etc.
 STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Informazioni area terreno
 STR_0187_OPTIONS                                                :{BLACK}Opzioni
 STR_0188                                                        :{BLACK}{SMALLUPARROW}
 STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
-STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Non puoi cambiare l'intervallo di manutenzione...
-STR_018B_CLOSE_WINDOW                                           :{BLACK}Chiudi finestra
-STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Nome finestra - trascinala per muovere la finestra
+STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Impossibile cambiare l'intervallo di manutenzione...
+STR_018B_CLOSE_WINDOW                                           :{BLACK}Chiude la finestra
+STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Titolo della finestra - trascinarlo per muovere la finestra
 STR_STICKY_BUTTON                                               :{BLACK} Marca questa finestra come inchiudibile con il tasto 'Chiudi TUTTE le finestre'
 STR_RESIZE_BUTTON                                               :{BLACK}Clicca e trascina per ridimensionare la finestra
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Clicca qui per saltare alla cartella salva/carica di default
-STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Demolisci edifici ecc... su una casella del terreno
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Demolisce edifici etc. su un area di terra
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Abbassa un angolo del terreno
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Alza un angolo del terreno
-STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Barra di scorrimento - scorre la lista sù/giù
+STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Barra di scorrimento - scorre l'elenco su/giù
 STR_HSCROLL_BAR_SCROLLS_LIST                                    :{BLACK}Barra di scorrimento - scorre la lista sinistra/destra
-STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}Mostra contorni dei terreni sulla mappa
-STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}Mostra veicoli sulla mappa
-STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}Mostra industrie sulla mappa
-STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Mostra percorsi di viaggio sulla mappa
-STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Mostra vegetazione sulla mappa
-STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Mostra proprietari dei terreni sulla mappa
-STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Visualizza nomi delle città sulla mappa (on/off)
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}Mostra la conformazione del terreno sulla mappa
+STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}Mostra i veicoli sulla mappa
+STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}Mostra le industrie sulla mappa
+STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Mostra i percorsi di trasporto sulla mappa
+STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Mostra la vegetazione sulla mappa
+STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Mostra i proprietari dei terreni sulla mappa
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Attiva/disattiva la visualizzazione dei nomi delle città sulla mappa
 STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}Profitto quest'anno: {CURRENCY} (anno scorso: {CURRENCY})
 
 ############ range for service numbers starts
@@ -479,16 +480,16 @@
 STR_AGE_RED                                                     :{RED}{COMMA} ann{P o i} ({COMMA})
 ############ range for service numbers ends
 
-STR_019C_ROAD_VEHICLE                                           :Veicolo stradale
-STR_019D_AIRCRAFT                                               :Aereo
+STR_019C_ROAD_VEHICLE                                           :Automezzo
+STR_019D_AIRCRAFT                                               :Aeromobile
 STR_019E_SHIP                                                   :Nave
 STR_019F_TRAIN                                                  :Treno
 STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} sta diventando vecchio
 STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} sta diventando molto vecchio
-STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} è troppo vecchio e necessita urgentemente di essere rimpiazzato
-STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Info sull'area di terreno
-STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Costo per ripulirlo: {LTBLUE}N/A
-STR_01A5_COST_TO_CLEAR                                          :{BLACK}Costo per ripulirlo: {LTBLUE}{CURRENCY}
+STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} sta diventando molto vecchio e necessita urgentemente di essere rimpiazzato
+STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Informazioni sull'area di terreno
+STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Costo di demolizione: {LTBLUE}N/A
+STR_01A5_COST_TO_CLEAR                                          :{BLACK}Costo di demolizione: {LTBLUE}{CURRENCY}
 STR_01A6_N_A                                                    :N/A
 STR_01A7_OWNER                                                  :{BLACK}Proprietario: {LTBLUE}{STRING}
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autorità locale: {LTBLUE}{STRING}
@@ -537,21 +538,21 @@
 STR_01D1_8                                                      :({COMMA}/8 {STRING})
 STR_01D2_JAZZ_JUKEBOX                                           :{WHITE}Jazz Jukebox
 STR_01D3_SOUND_MUSIC                                            :Suoni/musica
-STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Mostra finestra suoni/musica
+STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Mostra la finestra suoni/musica
 STR_01D5_ALL                                                    :{TINYFONT}Tutte
-STR_01D6_OLD_STYLE                                              :{TINYFONT}Vecchio Stile
-STR_01D7_NEW_STYLE                                              :{TINYFONT}Nuovo Stile
-STR_01D8_EZY_STREET                                             :{TINYFONT}Ezy Street
-STR_01D9_CUSTOM_1                                               :{TINYFONT}Personaliz. 1
-STR_01DA_CUSTOM_2                                               :{TINYFONT}Personaliz. 2
-STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Volume Musica
-STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Volume Effetti
+STR_01D6_OLD_STYLE                                              :{TINYFONT}Vecchio stile
+STR_01D7_NEW_STYLE                                              :{TINYFONT}Nuovo stile
+STR_01D8_EZY_STREET                                             :{TINYFONT}Ezy street
+STR_01D9_CUSTOM_1                                               :{TINYFONT}Personale 1
+STR_01DA_CUSTOM_2                                               :{TINYFONT}Personale 2
+STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Volume musica
+STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Volume effetti
 STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}MIN  '  '  ' '  '  '  MAX
-STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Torna al brano precedente
-STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Passa al brano successivo
+STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Salta al brano precedente
+STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Salta al brano successivo
 STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Ferma la musica
 STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Avvia la musica
-STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Trascina le barre scorrevoli per regolare il volume della musica e degli effetti
+STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Trascina i selettori per regolare il volume della musica e degli effetti sonori
 STR_01E3                                                        :{DKGREEN}{TINYFONT}--
 STR_01E4_0                                                      :{DKGREEN}{TINYFONT}0{COMMA}
 STR_01E5                                                        :{DKGREEN}{TINYFONT}{COMMA}
@@ -567,31 +568,31 @@
 STR_01EF_PROGRAM                                                :{TINYFONT}{BLACK}Programma - '{STRING}'
 STR_01F0_CLEAR                                                  :{TINYFONT}{BLACK}Elimina
 STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Salva
-STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Attuale programma musicale
-STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Seleziona progrmma 'Tutti i brani'
-STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Seleziona programma 'vecchio style'
-STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Seleziona programma 'nuovo style'
-STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Seleziona programma 'Personaliz. 1' (definito dall'utente)
-STR_01F7_SELECT_CUSTOM_2_USER_DEFINED                           :{BLACK}Seleziona programma 'Personaliz. 2' (definito dall'utente)
-STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Elimina programmazioni attuali (solo personalizzato 1 o personalizzato 2)
-STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Salva le impostazioni musicali
-STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Clicca sul brano per aggiungerlo al programma corrente (solamente personallizzato 1 o personalizzato 2)
+STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Programma musicale corrente
+STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Seleziona il progrmma 'Tutti i brani'
+STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Seleziona il programma 'Musica vecchio stile'
+STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Seleziona il programma 'Musica nuovo stile'
+STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Seleziona il programma 'Personale 1' (definito dall'utente)
+STR_01F7_SELECT_CUSTOM_2_USER_DEFINED                           :{BLACK}Seleziona il programma 'Personale 2' (definito dall'utente)
+STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Elimina il programma corrente (solo Personale1 e Personale2)
+STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Salva le impostazioni della musica
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Fare clic su un brano per aggiungerlo al programma corrente (solo Personale1 o Personale2)
 STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Clicca sul brano per cancellarlo dal programma corrente (solamente personalizzato 1 o personalizzato 2)
-STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Seleziona programmazione casuale on/off
-STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Mostra finestra 'selezione brani'
-STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Clicca sul servizio per vedere  l'industria/città
+STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Attiva/disattiva la riproduzione in ordine casuale
+STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Mostra la finestra di selezione dei brani musicali
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Fare clic su un servizio per centrare la visuale sull'industria o città
 STR_01FE_DIFFICULTY                                             :{BLACK}Difficoltà ({STRING})
 STR_01FF                                                        :{TINYFONT}{BLACK}{DATE_LONG}
-STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Ultimo messaggio/rapporto
+STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Ultimo messaggio/notizia
 STR_0201_MESSAGE_SETTINGS                                       :Impostazioni messaggi
 STR_MESSAGE_HISTORY_MENU                                        :Cronologia messaggi
-STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}Mostra ultimo messaggio/rapporto, mostra impostazione messaggi
+STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}Mostra l'ultimo messaggio/notizia, mostra le opzioni dei messaggi
 STR_0204_MESSAGE_OPTIONS                                        :{WHITE}Opzioni messaggi
 STR_0205_MESSAGE_TYPES                                          :{BLACK}Tipi messaggi:
 STR_0206_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivo del primo veicolo alle stazioni del giocatore
-STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivo del primo veicolo alle stazioni della concorrenza
+STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivo del primo veicolo alle stazioni di un avversario
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Incidenti / disastri
-STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Informazioni sulla società
+STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Informazioni sulla compagnia
 STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Apertura / chiusura delle industrie
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Cambiamenti economici
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Avvisi / informazioni sui veicoli del giocatore
@@ -602,7 +603,7 @@
 STR_MESSAGES_ALL                                                :{YELLOW}Impostazione per tutti i tipi di messaggio: Off / Summario / Completo
 STR_MESSAGE_SOUND                                               :{YELLOW}Esegui un suono per i messaggi sommarizzati
 STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...troppo lontano dalla destinazione precedente
-STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Le maggiori compagnie che hanno raggiunto il livello {NUM}{}({STRING})
+STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Le migliori compagnie che hanno raggiunto il {NUM}{}(Livello {STRING})
 STR_TOP_COMPANIES_NETWORK_GAME                                  :{BIGFONT}{BLACK}Classifica società  del{NUM}
 STR_0212                                                        :{BIGFONT}{COMMA}.
 STR_0213_BUSINESSMAN                                            :Uomo d'affari
@@ -615,15 +616,15 @@
 STR_HIGHSCORE_NAME                                              :{BIGFONT}{PLAYERNAME}, {COMPANY}
 STR_HIGHSCORE_STATS                                             :{BIGFONT}'{STRING}'   ({COMMA})
 STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} raggiunge lo status di '{STRING}'!
-STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} di {COMPANY} raggiunge lo status di '{STRING}'!
+STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} della {COMPANY} raggiunge lo status di '{STRING}'!
 STR_021F                                                        :{BLUE}{COMMA}
 STR_0221_OPENTTD                                                :{YELLOW}OpenTTD
-STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Editor Scenario
-STR_0223_LAND_GENERATION                                        :{WHITE}Genera Terreno
+STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Editor scenario
+STR_0223_LAND_GENERATION                                        :{WHITE}Generazione terreno
 STR_0224                                                        :{BLACK}{UPARROW}
 STR_0225                                                        :{BLACK}{DOWNARROW}
-STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Aumenta ampiezza del terreno da abbassare/alzare
-STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Decrementa ampiezza del terreno da abbassare/alzare
+STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Aumenta l'ampiezza del terreno da abbassare/alzare
+STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Riduce l'ampiezza del terreno da abbassare/alzare
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Genera terreno casuale
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Azzerra paesaggio
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Azzerra Paesaggio
@@ -632,102 +633,102 @@
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Generazione paesaggio
 STR_022F_TOWN_GENERATION                                        :{BLACK}Generazione città
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Generazione industrie
-STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Costruzioni stradali
-STR_0233_TOWN_GENERATION                                        :{WHITE}Generazione Città
-STR_0234_NEW_TOWN                                               :{BLACK}Nuova Città
-STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Costruisci nuova città
-STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}Non puoi costruire una città qui...
+STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Costruzione strade
+STR_0233_TOWN_GENERATION                                        :{WHITE}Generazione città
+STR_0234_NEW_TOWN                                               :{BLACK}Nuova città
+STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Costruisce una nuova città
+STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}Impossibile costruire una città qui...
 STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}...troppo vicino al bordo della mappa
 STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN                              :{WHITE}...troppo vicino ad un'altra città
 STR_0239_SITE_UNSUITABLE                                        :{WHITE}...sito inadatto
 STR_023A_TOO_MANY_TOWNS                                         :{WHITE}...troppe città
 STR_CANNOT_GENERATE_TOWN                                        :{WHITE}Non puoi costruire nessuna città
 STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...nella mappa non c'è altro spazio
-STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Incrementa dimensione della città
+STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Aumenta la dimensione della città
 STR_023C_EXPAND                                                 :{BLACK}Espandi
-STR_023D_RANDOM_TOWN                                            :{BLACK}Città Casuale
-STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION                          :{BLACK}Costruisci città in un luogo casuale
-STR_023F_INDUSTRY_GENERATION                                    :{WHITE}Generazione Industrie
-STR_0240_COAL_MINE                                              :{BLACK}Miniera di Carbone
-STR_0241_POWER_STATION                                          :{BLACK}Centrale Elettrica
+STR_023D_RANDOM_TOWN                                            :{BLACK}Città casuale
+STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION                          :{BLACK}Costruisce una città in un luogo casuale
+STR_023F_INDUSTRY_GENERATION                                    :{WHITE}Generazione industrie
+STR_0240_COAL_MINE                                              :{BLACK}Miniera di carbone
+STR_0241_POWER_STATION                                          :{BLACK}Centrale elettrica
 STR_0242_SAWMILL                                                :{BLACK}Segheria
 STR_0243_FOREST                                                 :{BLACK}Foresta
 STR_0244_OIL_REFINERY                                           :{BLACK}Raffineria
-STR_0245_OIL_RIG                                                :{BLACK}Piattaforma Petrolifera
+STR_0245_OIL_RIG                                                :{BLACK}Piattaforma petrolifera
 STR_0246_FACTORY                                                :{BLACK}Fabbrica
 STR_0247_STEEL_MILL                                             :{BLACK}Acciaieria
 STR_0248_FARM                                                   :{BLACK}Fattoria
-STR_0249_IRON_ORE_MINE                                          :{BLACK}Miniera di Ferro
-STR_024A_OIL_WELLS                                              :{BLACK}Pozzi petroliferi
+STR_0249_IRON_ORE_MINE                                          :{BLACK}Miniera di ferro
+STR_024A_OIL_WELLS                                              :{BLACK}Pozzo petrolifero
 STR_024B_BANK                                                   :{BLACK}Banca
 STR_024C_PAPER_MILL                                             :{BLACK}Cartiera
-STR_024D_FOOD_PROCESSING_PLANT                                  :{BLACK}Azienda Alimentare
+STR_024D_FOOD_PROCESSING_PLANT                                  :{BLACK}Azienda alimentare
 STR_024E_PRINTING_WORKS                                         :{BLACK}Tipografia
-STR_024F_GOLD_MINE                                              :{BLACK}Miniera d'Oro
+STR_024F_GOLD_MINE                                              :{BLACK}Miniera d'oro
 STR_0250_LUMBER_MILL                                            :{BLACK}Falegnameria
-STR_0251_FRUIT_PLANTATION                                       :{BLACK}Piantagione di Frutta
-STR_0252_RUBBER_PLANTATION                                      :{BLACK}Piantagione di Gomma
-STR_0253_WATER_SUPPLY                                           :{BLACK}Falda Acquifera
-STR_0254_WATER_TOWER                                            :{BLACK}Cisterna d'Acqua
-STR_0255_DIAMOND_MINE                                           :{BLACK}Miniera di Diamanti
-STR_0256_COPPER_ORE_MINE                                        :{BLACK}Miniera di Rame
-STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Foresta di Cotone Candito
-STR_0258_CANDY_FACTORY                                          :{BLACK}Fabbrica Caramelle
+STR_0251_FRUIT_PLANTATION                                       :{BLACK}Piantagione di frutta
+STR_0252_RUBBER_PLANTATION                                      :{BLACK}Piantagione di gomma
+STR_0253_WATER_SUPPLY                                           :{BLACK}Falda acquifera
+STR_0254_WATER_TOWER                                            :{BLACK}Cisterna idrica
+STR_0255_DIAMOND_MINE                                           :{BLACK}Miniera di diamanti
+STR_0256_COPPER_ORE_MINE                                        :{BLACK}Miniera di rame
+STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Foresta di zucchero filato
+STR_0258_CANDY_FACTORY                                          :{BLACK}Fabbrica di caramelle
 STR_0259_BATTERY_FARM                                           :{BLACK}Fattoria delle batterie
-STR_025A_COLA_WELLS                                             :{BLACK}Pozzi di Cola
-STR_025B_TOY_SHOP                                               :{BLACK}Negozio di Giocattoli
-STR_025C_TOY_FACTORY                                            :{BLACK}Fabbrica di Giocattoli
-STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}Sorgenti di Plastica
-STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}Fabbrica Bibite Frizzanti
-STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Generatore di Bolle
-STR_0260_TOFFEE_QUARRY                                          :{BLACK}Estrattore di Toffee
-STR_0261_SUGAR_MINE                                             :{BLACK}Miniera di Zucchero
-STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Costruisci Miniera di Carbone
-STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Costruisci Centrale Elettrica
-STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Costruisci Segheria
-STR_0265_PLANT_FOREST                                           :{BLACK}Pianta Foresta
-STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Costruisci Raffineria
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Costruisci Piattaforma Petrolifera (può essere costruita soltanto vicino al bordo della mappa)
-STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Costruisci Fabbrica
-STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Costruisci Acciaieria
-STR_026A_CONSTRUCT_FARM                                         :{BLACK}Costruisci Fattoria
-STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Costruisci Miniera di Ferro
-STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Costruisci Pozzi Petroliferi
-STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Costruisci Banca (può essere costruita solo in città con una popolazione maggiori di 1200)
-STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Costruisci Cartiera
-STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Costruisci Azienda Alimentare
-STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Costruisci Tipografia
-STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Costruisci Miniera d'Oro
-STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Costruisci Banca (può essere costruita solo nelle città)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Costruisci Falegnameria (per tagliare la foresta pluviale e produrre legna)
-STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Pianta Piantagione di Frutta
-STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Pianta Piantagione di Gomma
-STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Costruisci Falda Acquifera
-STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Costruisci Cisterna d'Acqua (può essere costruita solo nelle città)
-STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Costruisci Miniera di Diamanti
-STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Costruisci Miniera di Rame
-STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Costruisci Foresta di Cotone Candito
-STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Costruisci Fabbrica di Caramelle
-STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Costruisci Fattoria delle Batterie
-STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Costruisci Pozzi di Cola
-STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Costruisci Negozio di Giocattoli
-STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Costruisci Fabbrica di Giocattoli
-STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Costruisci Sorgenti di Plastica
-STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Costruisci Fabbrica Bibite Frizzanti
-STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Costruisci Generatore di Bolle
-STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Costruisci Estrattore di Toffee
-STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Costruisci Miniera di Zucchero
-STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Non puoi costruire {STRING} qui...
-STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...devi prima costruire una città
-STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...ammessa solo una per città
+STR_025A_COLA_WELLS                                             :{BLACK}Pozzo di Cola
+STR_025B_TOY_SHOP                                               :{BLACK}Negozio di giocattoli
+STR_025C_TOY_FACTORY                                            :{BLACK}Fabbrica di giocattoli
+STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}Sorgente di Plastica
+STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}Fabbrica di bibite frizzanti
+STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Generatore di bollicine
+STR_0260_TOFFEE_QUARRY                                          :{BLACK}Cava di toffee
+STR_0261_SUGAR_MINE                                             :{BLACK}Miniera di zucchero
+STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Costruisce una Miniera di carbone
+STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Costruisce una Centrale elettrica
+STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Costruisce una Segheria
+STR_0265_PLANT_FOREST                                           :{BLACK}Pianta una Foresta
+STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Costruisce una Raffineria
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Costruisce una Piattaforma petrolifera (può essere costruita soltanto vicino ai bordi della mappa)
+STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Costruisce una Fabbrica
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Costruisce un'Acciaieria
+STR_026A_CONSTRUCT_FARM                                         :{BLACK}Costruisce una Fattoria
+STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Costruisce una Miniera di ferro
+STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Costruisce un Pozzo petrolifero
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Costruisce una Banca (può essere costruita solo in città con una popolazione maggiore di 1200)
+STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Costruisce una Cartiera
+STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Costruisce un'Azienda alimentare
+STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Costruisce una Tipografia
+STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Costruisce una Miniera d'oro
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Costruisce una Banca (può essere costruita solo nelle città)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Costruisce una Falegnameria (per tagliare la foresta pluviale e produrre legna)
+STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Pianta una Piantagione di frutta
+STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Pianta una Piantagione di gomma
+STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Costruisce una Falda acquifera
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Costruisce una Cisterna idrica (può essere costruita solo nelle città)
+STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Costruisce una Miniera di diamanti
+STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Costruisce una Miniera di rame
+STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Pianta una Foresta di zucchero filato
+STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Costruisce una Fabbrica di caramelle
+STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Costruisce una Fattoria delle batterie
+STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Costruisce un Pozzo di Cola
+STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Costruisce un Negozio di giocattoli
+STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Costruisce una Fabbrica di giocattoli
+STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Costruisce una Sorgente di plastica
+STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Costruisce una Fabbrica di bibite frizzanti
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Costruisce un Generatore di bollicine
+STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Costruisce una Cava di toffee
+STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Costruisce una Miniera di zucchero
+STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Impossibile costruire {STRING} qui...
+STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...bisogna prima costruire una città
+STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...ne è ammessa solo una per città
 STR_0288_PLANT_TREES                                            :{BLACK}Pianta alberi
 STR_0289_PLACE_SIGN                                             :{BLACK}Posiziona cartello
-STR_028A_RANDOM_TREES                                           :{BLACK}Alberi Casuali
+STR_028A_RANDOM_TREES                                           :{BLACK}Alberi casuali
 STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Pianta alberi casualmente nel paesaggio
 STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}Piazza terreno roccioso nel paesaggio
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Piazza faro
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Piazza trasmettitore
-STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Definisce area desertica.{}Clicca premendo CTRL per rimuoverla
+STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Definisce un'area desertica.{}Fare clic tenendo premuto CTRL per rimuoverla
 STR_CREATE_LAKE                                                 :{BLACK}Definisci la zona d'acqua.{}Crei un canale, a meno che CTRL non venga premuto a livello del mare, allagando così i dintorni
 STR_0290_DELETE                                                 :{BLACK}Elimina
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Elimina completamente questa città
@@ -737,26 +738,26 @@
 STR_0294_QUIT_EDITOR                                            :Esci dall'editor
 STR_0295                                                        :
 STR_0296_QUIT                                                   :Esci
-STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Salva scenario, carica scenario, abbandona l'editore di scenari, esci
-STR_0298_LOAD_SCENARIO                                          :{WHITE}Carica Scenario
-STR_0299_SAVE_SCENARIO                                          :{WHITE}Salva Scenario
-STR_029A_PLAY_SCENARIO                                          :{BLACK}Gioca Scenario
+STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Salva scenario, carica scenario, abbandona l'editor di scenari, esci
+STR_0298_LOAD_SCENARIO                                          :{WHITE}Carica scenario
+STR_0299_SAVE_SCENARIO                                          :{WHITE}Salva scenario
+STR_029A_PLAY_SCENARIO                                          :{BLACK}Gioca scenario
 STR_PLAY_HEIGHTMAP                                              :{BLACK}Gioca Heightmap
 STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Inizia un nuovo gioco usando la heightmap come terreno
 STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Sei sicuro di voler abbandonare questo scenario?
 STR_029C_QUIT_EDITOR                                            :{WHITE}Esci dall'editor
 STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...può essere costruita solo in città con una popolazione di almeno 1200
-STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Sposta la data d'inizio indietro di un'anno
-STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Sposta la data d'inizio avanti di un'anno
-STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...gli estremi del ponte devono stare entrambi sul terreno
+STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Sposta la data d'inizio indietro di 1 anno
+STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Sposta la data d'inizio avanti di 1 anno
+STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...gli estremi del ponte devono trovarsi entrambi sul terreno
 STR_02A1_SMALL                                                  :{BLACK}Piccola
 STR_02A2_MEDIUM                                                 :{BLACK}Media
 STR_02A3_LARGE                                                  :{BLACK}Grande
-STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Seleziona dimensione città
+STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Seleziona la dimensione della città
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Dimensione città:
 
 STR_02B6                                                        :{STRING}  -  {STRING}
-STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Mostra ultimo messaggio o report
+STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Mostra l'ultimo messaggio o notizia
 STR_OFF                                                         :No
 STR_SUMMARY                                                     :Sommario
 STR_FULL                                                        :Completo
@@ -768,7 +769,7 @@
 STR_02BF_CUSTOM                                                 :Personalizzati
 STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Salva nomi personalizzati
 STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Selezione nomi veicoli
-STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Salva nomi personalizzati dei veicoli
+STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Salva i nomi personalizzati dei veicoli
 
 STR_CHECKMARK                                                   :{CHECKMARK}
 ############ range for menu starts
@@ -788,21 +789,22 @@
 ############ range ends here
 
 ############ range for menu starts
-STR_02D5_LAND_BLOCK_INFO                                        :Informazioni sull'area
+STR_02D5_LAND_BLOCK_INFO                                        :Informazioni sull'area di terreno
 STR_02D6                                                        :
 STR_CONSOLE_SETTING                                             :Linea di comando
 STR_02D7_SCREENSHOT_CTRL_S                                      :Screenshot (Ctrl-S)
 STR_02D8_GIANT_SCREENSHOT_CTRL_G                                :Screenshot Gigante (Ctrl-G)
-STR_02D9_ABOUT_OPENTTD                                          :Info su 'OpenTTD'
+STR_02D9_ABOUT_OPENTTD                                          :Informazioni su 'OpenTTD'
 ############ range ends here
 
 STR_02DB_OFF                                                    :{BLACK}Off
 STR_02DA_ON                                                     :{BLACK}On
-STR_02DC_DISPLAY_SUBSIDIES                                      :{BLACK}Mostra sussidi
+STR_02DC_DISPLAY_SUBSIDIES                                      :{BLACK}Mostra i sussidi
 STR_02DD_SUBSIDIES                                              :Sussidi
 STR_02DE_MAP_OF_WORLD                                           :Mappa del mondo
 STR_EXTRA_VIEW_PORT                                             :Mini visuale extra
 STR_SIGN_LIST                                                   :Lista cartelli
+STR_TRANSPARENCY_OPTIONS                                        :Opzioni trasparenza
 STR_02DF_TOWN_DIRECTORY                                         :Elenco città
 STR_TOWN_POPULATION                                             :{BLACK}Popolazione mondiale: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Mini visuale {COMMA}
@@ -813,13 +815,13 @@
 
 STR_02E0_CURRENCY_UNITS                                         :{BLACK}Valuta
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
-STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Selezione valuta
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Selezione della valuta
 STR_MEASURING_UNITS                                             :{BLACK}Unità di misura
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
 STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Selezione unità di misura
-STR_02E6_ROAD_VEHICLES                                          :{BLACK}Veicoli stradali
+STR_02E6_ROAD_VEHICLES                                          :{BLACK}Automezzi
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Seleziona lato della strada sul quale devono guidare i veicoli stradali
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Seleziona il lato della strada sul quale devono guidare i veicoli
 STR_02E9_DRIVE_ON_LEFT                                          :Guida a sinistra
 STR_02EA_DRIVE_ON_RIGHT                                         :Guida a destra
 STR_02EB_TOWN_NAMES                                             :{BLACK}Nomi città
@@ -828,39 +830,39 @@
 
 STR_02F4_AUTOSAVE                                               :{BLACK}Salvataggi automatici
 STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Seleziona intervallo salvataggi automatici
+STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Seleziona l'intervallo fra i salvataggi automatici della partita
 STR_02F7_OFF                                                    :No
 STR_02F8_EVERY_3_MONTHS                                         :Ogni 3 mesi
 STR_02F9_EVERY_6_MONTHS                                         :Ogni 6 mesi
 STR_02FA_EVERY_12_MONTHS                                        :Ogni 12 mesi
-STR_02FB_START_A_NEW_GAME                                       :{BLACK}Inizia un nuovo gioco
-STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}Carica un gioco salvato
+STR_02FB_START_A_NEW_GAME                                       :{BLACK}Inizia una nuova partita
+STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}Carica una partita salvata
 STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}Crea uno scenario personalizzato
-STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}Seleziona giocatore singolo
-STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}Seleziona un gioco multiplayer da 2-8 giocatori
-STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Mostra opzioni di gioco
-STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Mostra opzioni difficoltà
-STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Inizia una partita con uno scenario personalizzato
+STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}Seleziona una partita a giocatore singolo
+STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}Seleziona una partita multigiocatore con 2-8 giocatori
+STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Mostra le opzioni di gioco
+STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Mostra le opzioni di difficoltà
+STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Inizia una nuova partita, utilizzando uno scenario personalizzato
 STR_0304_QUIT                                                   :{BLACK}Esci
-STR_0305_QUIT_OPENTTD                                           :{BLACK}Esci 'OpenTTD'
+STR_0305_QUIT_OPENTTD                                           :{BLACK}Esci da 'OpenTTD'
 STR_0307_OPENTTD                                                :{WHITE}OpenTTD {REV}
 STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...può essere costruito solo in città
-STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Seleziona paesaggio 'temperato'
-STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Seleziona paesaggio 'sub-artico'
-STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Seleziona paesaggio 'sub-tropicale'
-STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Seleziona paesaggio 'Città dei giocattoli'
-STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Finanzia la costruzione di nuove industrie
+STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Seleziona il paesaggio 'temperato'
+STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Seleziona il paesaggio 'sub-artico'
+STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Seleziona il paesaggio 'sub-tropicale'
+STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Seleziona il paesaggio 'città dei giocattoli'
+STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Finanzia la costruzione di una nuova industria
 
 ############ range for menu starts
 STR_INDUSTRY_DIR                                                :Elenco Industrie
-STR_0313_FUND_NEW_INDUSTRY                                      :Finanzia nuove industrie
+STR_0313_FUND_NEW_INDUSTRY                                      :Finanzia nuova industria
 ############ range ends here
 
-STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Finanzia nuove industrie
+STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Finanzia nuova industria
 STR_JUST_STRING                                                 :{STRING}
-STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...può essere costruito solo in città
-STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...può essere costruito solo nella foresta pluviale
-STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT                            :{WHITE}...può essere costruito solo in aree desertiche
+STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...può essere costruita solo in città
+STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...può essere costruita solo nella foresta pluviale
+STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT                            :{WHITE}...può essere costruita solo in aree desertiche
 STR_0319_PAUSED                                                 :{YELLOW}* *  IN PAUSA  *  *
 
 STR_031B_SCREENSHOT_SUCCESSFULLY                                :{WHITE}Screenshot salvato con successo come '{STRING}'
@@ -870,7 +872,7 @@
 STR_032F_AUTOSAVE                                               :{RED}SALVATAGGIO AUTOMATICO
 STR_SAVING_GAME                                                 :{RED}*  *  SALVATAGGIO PARTITA  *  *
 STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Salvataggio in corso,{}prego attenderne la fine!
-STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Seleziona il programma 'Ezy Street'
+STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Seleziona il programma 'Musica ezy street'
 
 STR_0335_6                                                      :{BLACK}6
 STR_0336_7                                                      :{BLACK}7
@@ -1135,6 +1137,14 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Destra
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Raggio di snap delle finestre: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Raggio di snap delle finestre: {ORANGE}disabilitato
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Velocità di crescita delle città: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Nessuna
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Lenta
+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_GUI                                          :{BLACK}Interfaccia
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Costruzione
@@ -1512,10 +1522,10 @@
 STR_0803_INCOME                                                 :{GREEN}Incasso: {CURRENCY}
 STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Trasferisci: {CURRENCY}
 STR_FEEDER                                                      :{YELLOW}Trasferisci: {CURRENCY}
-STR_0805_ESTIMATED_COST                                         :{WHITE}Costo Stimato: {CURRENCY}
-STR_0807_ESTIMATED_INCOME                                       :{WHITE}Incasso Stimato: {CURRENCY}
-STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}Non puoi alzare il terreno qui...
-STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}Non puoi abbassare il terreno qui...
+STR_0805_ESTIMATED_COST                                         :{WHITE}Costo stimato: {CURRENCY}
+STR_0807_ESTIMATED_INCOME                                       :{WHITE}Incasso stimato: {CURRENCY}
+STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}Impossibile alzare il terreno qui...
+STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}Impossibile abbassare il terreno qui...
 STR_080A_ROCKS                                                  :Roccie
 STR_080B_ROUGH_LAND                                             :Terreno accidentato
 STR_080C_BARE_LAND                                              :Terreno spoglio
@@ -1525,42 +1535,42 @@
 STR_0810_DESERT                                                 :Deserto
 
 ##id 0x1000
-STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Terreno inclinato nella direzione errata
+STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Terreno inclinato nella direzione sbagliata
 STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Combinazione di binari impossibile
 STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Gli scavi danneggerebbero la galleria
 STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Già al livello del mare
 STR_1004_TOO_HIGH                                               :{WHITE}Troppo alto
 STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Tipo di binari non adatti
 STR_1007_ALREADY_BUILT                                          :{WHITE}...già costruito
-STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Devi demolire prima i binari
-STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Costruzione Ferrovie
+STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Bisogna demolire i binari prima
+STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Costruzione ferrovie
 STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Costruzione Ferrovie Elettrificate
-STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Costruzione Monorotaia
-STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Costruzione Maglev
-STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Seleziona Ponte Ferroviario
-STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Non puoi costruire qui il deposito...
-STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Non puoi costruire qui la stazione ferroviaria...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Non puoi piazzare qui i segnali...
-STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Non puoi costruire qui i binari...
-STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Non puoi demolire da qui i binari...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Non puoi rimuovere da qui i segnali...
-STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Orientamento Deposito
+STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Costruzione monorotaia
+STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Costruzione maglev
+STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Seleziona ponte ferroviario
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Impossibile costruire il deposito qui...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Impossibile costruire la stazione qui...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Impossibile costruire i segnali qui...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Impossibile costruire i binari qui...
+STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Impossibile rimuovere i binari da qui...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Impossibile rimuovere i segnali da qui...
+STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Orientamento deposito
 STR_1015_RAILROAD_CONSTRUCTION                                  :Costruzione ferrovie
 STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Costruzione ferrovie elettrificate
 STR_1016_MONORAIL_CONSTRUCTION                                  :Costruzione monorotaia
 STR_1017_MAGLEV_CONSTRUCTION                                    :Costruzione maglev
-STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Costruisci binari
-STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Costruisci deposito treni (per costruzione e manutenzione)
-STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Costruisci stazione ferroviaria
-STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Costruisci segnale ferroviario
-STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Costruisci ponte ferroviario
-STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Costruisci tunnel ferroviario
-STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Seleziona costruisci/demolisci per binari e segnali
-STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Selezione ponte - clicca sul ponte selezionato per costruirlo
-STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Seleziona orientamento deposito ferroviario
+STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Costruisce i binari
+STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Costruisce un deposito ferroviario (per costruire e manutenere i treni)
+STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Costruisce una stazione ferroviaria
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Costruisce i segnali ferroviari
+STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Costruisce un ponte ferroviario
+STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Costruisce un tunnel ferroviario
+STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Seleziona fra costruzione/rimozione di binari e segnali
+STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Selezione ponte - fare clic sul ponte desiderato per costruirlo
+STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Seleziona l'orientamento del deposito ferroviario
 STR_1021_RAILROAD_TRACK                                         :Binari
 STR_1023_RAILROAD_TRAIN_DEPOT                                   :Deposito ferroviario
-STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...area di proprietà di un altra società
+STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...l'area appartiene a un'altra compagnia
 STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Binario ferroviario con segnali normali
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Binario ferroviario con presegnali
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Binario ferroviario con segnali di uscita
@@ -1569,29 +1579,29 @@
 
 
 ##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Devi demolire prima la strada
+STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Bisogna rimuovere la strada prima
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Lavori stradali in progresso
-STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Costruzione Strade
-STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Seleziona Ponte Stradale
-STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Non puoi costruire qui la strada...
-STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Non puoi demolire da qui la strada...
-STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientamento Deposito
-STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Non puoi costruire qui il deposito stradale...
-STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Non puoi costruire qui la fermata bus...
-STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Non puoi costruire qui la stazione di carico...
+STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Costruzione strade
+STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Seleziona ponte stradale
+STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Impossibile costruire la strada qui...
+STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Impossibile rimuovere la strada da qui...
+STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientamento deposito
+STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Impossibile costruire il deposito qui...
+STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Impossibile costruire la stazione degli autobus qui...
+STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Impossibile costruire la stazione dei camion qui...
 STR_180A_ROAD_CONSTRUCTION                                      :Costruzione strade
-STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Costruisci sezione stradale
-STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Costruisci deposito veicoli stradali (per costruzione e manutenzione)
-STR_180D_BUILD_BUS_STATION                                      :{BLACK}Costruisci fermata bus
-STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Costruisci stazione di carico
-STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Costruisci ponte stradale
-STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Costruisci tunnel stradale
-STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Seleziona costruisci/demolisci per le costruzioni stradali
-STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Seleziona orientamento deposito veicoli stradali
+STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Costruisce una sezione di strada
+STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Costruisce un deposito automezzi (per costruire e manutenere i veicoli)
+STR_180D_BUILD_BUS_STATION                                      :{BLACK}Costruisce una stazione degli autobus
+STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Costruisce un'area di carico per camion
+STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Costruisce un ponte stradale
+STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Costruisce un tunnel stradale
+STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Seleziona fra costruzione/rimozione di strade
+STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Seleziona l'orientamento del deposito automezzi
 STR_1814_ROAD                                                   :Strada
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Strada con lampioni
 STR_1816_TREE_LINED_ROAD                                        :Strada alberata
-STR_1817_ROAD_VEHICLE_DEPOT                                     :Deposito veicoli
+STR_1817_ROAD_VEHICLE_DEPOT                                     :Deposito automezzi
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Passaggio a livello
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Non posso togliere la fermata bus...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Non posso togliere la stazione camion...
@@ -1603,92 +1613,92 @@
 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}E' necessario demolire prima l'edificio
+STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}L'edificio dele essere demolito prima
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Popolazione: {ORANGE}{COMMA}{BLACK}  Case: {ORANGE}{COMMA}
 STR_2007_RENAME_TOWN                                            :Rinomina città
-STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Non puoi rinominare la città...
-STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}L'autorità locale di {TOWN} non ti autorizza a farlo
-STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Elenco città - clicca sul nome per centrare la visuale sulla città
-STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centra la visuale sulla città
-STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Cambia nome alla città
-STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Passeggeri il mese scorso: {ORANGE}{COMMA}{BLACK}  massimo: {ORANGE}{COMMA}
-STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Posta il mese scorso: {ORANGE}{COMMA}{BLACK}  massimo: {ORANGE}{COMMA}
-STR_200F_TALL_OFFICE_BLOCK                                      :Blocco di uffici alto
-STR_2010_OFFICE_BLOCK                                           :Blocco di uffici
-STR_2011_SMALL_BLOCK_OF_FLATS                                   :Piccolo blocco di appartamenti
+STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Impossibile rinominare la città...
+STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}L'autorità locale di {TOWN} non lo autorizza
+STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Nomi delle città - fare clic su un nome per centrare la visuale sulla città
+STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centra la visuale principale sulla posizione della città
+STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Cambia il nome della città
+STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Passeggeri il mese scorso: {ORANGE}{COMMA}{BLACK}  max: {ORANGE}{COMMA}
+STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Posta il mese scorso: {ORANGE}{COMMA}{BLACK}  max: {ORANGE}{COMMA}
+STR_200F_TALL_OFFICE_BLOCK                                      :Grattacielo di uffici
+STR_2010_OFFICE_BLOCK                                           :Palazzo di uffici
+STR_2011_SMALL_BLOCK_OF_FLATS                                   :Piccolo condominio
 STR_2012_CHURCH                                                 :Chiesa
-STR_2013_LARGE_OFFICE_BLOCK                                     :Blocco di uffici grande
+STR_2013_LARGE_OFFICE_BLOCK                                     :Grande palazzo di uffici
 STR_2014_TOWN_HOUSES                                            :Case
 STR_2015_HOTEL                                                  :Albergo
 STR_2016_STATUE                                                 :Statua
 STR_2017_FOUNTAIN                                               :Fontana
 STR_2018_PARK                                                   :Parco
-STR_2019_OFFICE_BLOCK                                           :Blocco di uffici
+STR_2019_OFFICE_BLOCK                                           :Palazzo di uffici
 STR_201A_SHOPS_AND_OFFICES                                      :Negozi e uffici
 STR_201B_MODERN_OFFICE_BUILDING                                 :Palazzo di uffici moderno
 STR_201C_WAREHOUSE                                              :Magazzino
-STR_201D_OFFICE_BLOCK                                           :Blocco di uffici
+STR_201D_OFFICE_BLOCK                                           :Palazzo di uffici
 STR_201E_STADIUM                                                :Stadio
 STR_201F_OLD_HOUSES                                             :Case vecchie
 STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Autorità locale
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Mostra informazioni sull'autorità locale
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Autorità locale di {TOWN}
-STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Valutazione servizi di trasporto delle società:
+STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Valutazione delle compagnie di trasporto:
 STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Sussidi
-STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Sussidi offerti per il servizio:
+STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Sussidi offerti per la realizzazione di servizi:
 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_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:{}{}{STRING} da {STRING} a {STRING} non sarà più sovvenzionato.
+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_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato da {COMPANY}!{}{}servizio di {STRING} da {STATION} a {STATION} verrà pagato il doppio per il prossimo anno!
-STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato da {COMPANY}!{}{}servizio di {STRING} da {STATION} a {STATION} verrà pagato il triplo per il prossimo anno!
-STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Sussidio aggiudicato da {COMPANY}!{}{}servizio di {STRING} da {STATION} a {STATION} verrà pagato il quadruplo 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!
 STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}L'autorita locale di {TOWN} rifiuta la costruzione di un altro aeroporto nella città
 STR_2036_COTTAGES                                               :Cottage
 STR_2037_HOUSES                                                 :Case
 STR_2038_FLATS                                                  :Appartamenti
-STR_2039_TALL_OFFICE_BLOCK                                      :Blocco di uffici alto
+STR_2039_TALL_OFFICE_BLOCK                                      :Grattacielo di uffici
 STR_203A_SHOPS_AND_OFFICES                                      :Negozi e uffici
 STR_203B_SHOPS_AND_OFFICES                                      :Negozi e uffici
 STR_203C_THEATER                                                :Teatro
 STR_203D_STADIUM                                                :Stadio
-STR_203E_OFFICES                                                :Offici
+STR_203E_OFFICES                                                :Uffici
 STR_203F_HOUSES                                                 :Case
 STR_2040_CINEMA                                                 :Cinema
 STR_2041_SHOPPING_MALL                                          :Centro commerciale
-STR_2042_DO_IT                                                  :{BLACK}Fallo!
-STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Lista azioni eseguibili in questa città - clicca sopra per i dettagli
-STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Trascina l'azione evidenziata nella lista sovrastante
+STR_2042_DO_IT                                                  :{BLACK}Fallo
+STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Elenco delle azioni eseguibili in questa città - fare clic su una di esse per maggiori dettagli
+STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Esegue l'azione selezionata nell'elenco sovrastante
 STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Azioni disponibili:
 STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Piccola campagna pubblicitaria
 STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Campagna pubblicitaria media
 STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Grande campagna pubblicitaria
-STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Finanzia ricostruzione delle strade locali
-STR_204A_BUILD_STATUE_OF_COMPANY                                :Costruisci statua del proprietario della società
+STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Finanzia ricostruzione delle strade
+STR_204A_BUILD_STATUE_OF_COMPANY                                :Costruisci statua del proprietario della compagnia
 STR_204B_FUND_NEW_BUILDINGS                                     :Finanzia nuove costruzioni
 STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Compra l'esclusiva sui trasporti
 STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Corrompi l'autorità locale
-STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Inizia una piccola campagnia pubblicitaria per attirare più gente e merci ai tuoi servizi di trasporto.{}  Costo: {CURRENCY}
-STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Inizia una media campagnia pubblicitaria per attirare più gente e merci ai tuoi servizi di trasporto.{}  Costo: {CURRENCY}
-STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Inizia una grande campagnia pubblicitaria per attirare più gente e cargo ai tuoi servizi di trasporto.{}  Costo: {CURRENCY}
+STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Inizia una piccola campagnia pubblicitaria, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}  Costo: {CURRENCY}
+STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Inizia una campagnia pubblicitaria moderata, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}  Costo: {CURRENCY}
+STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Inizia una grande campagnia pubblicitaria locale, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}  Costo: {CURRENCY}
 STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Finanzia la ricostruzione della rete stradale cittadina. Causa un cosiderabile disagio al traffico stradale per 6 mesi.{}  Costo: {CURRENCY}
-STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Costruisci una statua in onore della tua società.{} Costo: {CURRENCY}
-STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Finanzia la costruzione di nuove strutture commerciali nella città.{}  Costo: {CURRENCY}
-STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Compra un anno di esclusiva sui trasporti nella città. Compra 1 anno di esclusiva sui diritti di trasporto in città. L'autorità cittadina autorizzerà passeggeri e merci a usare solo le tue stazioni.{} Costo: {CURRENCY}
+STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Costruisce una statua in onore della compagnia.{} Costo: {CURRENCY}
+STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Finanzia la costruzione di nuovi edifici commerciali nella città.{}  Costo: {CURRENCY}
+STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Compra un 1 di diritti di trasporto esclusivi in città. L'autorità cittadina permetterà a passeggeri e merci di usare solo le stazioni della compagnia.{} Costo: {CURRENCY}
 STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Corrompi l'autorità locale per incrementare la tua valutazione con il rischio di una severa multa se scoperto.{}  Costo: {CURRENCY}
-STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Traffico nel caos a {TOWN}!{}{}La ricostruzione stradale finanziata da {COMPANY} porterà 6 mesi di disagio agli automobilisti!
+STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Traffico nel caos a {TOWN}!{}{}La ricostruzione delle strade finanziata dalla {COMPANY} porterà 6 mesi di disagio agli automobilisti!
 STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
 STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (in costruzione)
 STR_2059_IGLOO                                                  :Igloo
-STR_205A_TEPEES                                                 :Tepees
+STR_205A_TEPEES                                                 :Tepee
 STR_205B_TEAPOT_HOUSE                                           :Casa-teiera
 STR_205C_PIGGY_BANK                                             :Banca-porcellino
 
@@ -1704,41 +1714,41 @@
 STR_2802_TREES                                                  :{WHITE}Alberi
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...albero già qui
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...sito inadatto
-STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Non puoi piantarequi l'albero...
+STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Impossibile piantare l'albero qui...
 STR_2806                                                        :{WHITE}{STRING}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...troppi cartelli
-STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Non puoi piazzare qui il cartello...
+STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Impossibile piazzare il cartello qui...
 STR_280A_SIGN                                                   :Cartello
 STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Modifica testo del cartello
-STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}Non puoi modificare il testo del cartello...
+STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}Impossibile modificare il testo del cartello...
 STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Seleziona il tipo di albero da piantare
 STR_280E_TREES                                                  :Alberi
 STR_280F_RAINFOREST                                             :Foresta pluviale
 STR_2810_CACTUS_PLANTS                                          :Cactus
 
 ##id 0x3000
-STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Selezione Stazione Ferroviaria
-STR_3001_AIRPORT_SELECTION                                      :{WHITE}Selezione Aeroporto
+STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Selezione stazione
+STR_3001_AIRPORT_SELECTION                                      :{WHITE}Selezione aeroporto
 STR_3002_ORIENTATION                                            :{BLACK}Orientamento
-STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Numero binari
-STR_3004_PLATFORM_LENGTH                                        :{BLACK}Lunghezza
-STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Troppo vicino a un'altra stazione
-STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Unisci stazione esistente/area di carico
+STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Numero di binari
+STR_3004_PLATFORM_LENGTH                                        :{BLACK}Lunghezza banchina
+STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Troppo vicino a un'altra stazione ferroviaria
+STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Farebbe parte di due o più stazioni/aree di carico
 STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Troppe stazioni/aree di carico in questa città
 STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Troppe stazioni/aree di carico
-STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Troppe fermate dell'autobus
-STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Troppe stazioni merci
+STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Troppe stazioni degli autobus
+STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Troppe aree di carico per camion
 STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Troppo vicino ad un'altra stazione/area di carico
 STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Devi demolire prima la stazione ferroviaria
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Bisogna demolire la stazione ferroviaria prima
 STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Troppo vicino ad un altro aeroporto
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Devi demolire prima l'aeroporto
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Bisogna demolire l'aeroporto prima
 
 STR_3030_RENAME_STATION_LOADING                                 :Rinomina stazione/area di carico
-STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Non puoi rinominare stazione...
+STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Impossibile rinominare la stazione...
 STR_3032_RATINGS                                                :{BLACK}Valutazione
 STR_3033_ACCEPTS                                                :{BLACK}Accetta
-STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Valutazione del servizio trasporti locale
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Valutazione del servizio trasporti locale:
 
 ############ range for rating starts
 STR_3035_APPALLING                                              :Terribile
@@ -1753,29 +1763,29 @@
 
 STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
 STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} non accetta più {STRING}
-STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} non accetta più {STRING} o {STRING}
+STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} non accetta più {STRING} né {STRING}
 STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} adesso accetta {STRING}
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} adesso accetta {STRING} e {STRING}
-STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientamento Fermata Bus
-STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orient. Area Carico Camion
-STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Devi demolire prima la fermata bus
-STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Devi demolire prima l'area carico
-STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Stazion{P e i}
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientamento stazione
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orient. area carico
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Bisogna demolire la stazione degli autobus prima
+STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Bisogna demolire l'area di carico per camion prima
+STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} stazion{P e i}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
-STR_304A_NONE                                                   :{YELLOW}- Nulla -
+STR_304A_NONE                                                   :{YELLOW}- Nessuna -
 STR_304B_SITE_UNSUITABLE                                        :{WHITE}...sito inadatto
-STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Troppo vicino a un'altro molo
-STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Devi demolire il molo prima
-STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Seleziona orientamento della stazione ferroviaria
-STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Seleziona numero di binari della stazione
-STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Seleziona lunghezza della stazione
-STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Seleziona orientamento stazione bus
-STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Seleziona orientamento stazione camion
-STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centra visuale sulla stazione
-STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Mostra valutazione servizio
+STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Troppo vicino ad un altro molo
+STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Bisogna demolire il molo prima
+STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Seleziona l'orientamento della stazione ferroviaria
+STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Seleziona il numero di binari della stazione ferroviaria
+STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Seleziona la lunghezza della stazione ferroviaria
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Seleziona l'orientamento della stazione degli autobus
+STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Seleziona l'orientamento dell'area di carico per camion
+STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centra la visuale principale sulla posizione della stazione
+STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Mostra la valutazione della stazione
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Cambia il nome della stazione
 STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Mostra la lista delle merci accettate
-STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Nomi stazioni - clicca sul nome per centrare la visuale sulla stazione
+STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Nomi delle stazioni - fare clic su un nome per centrare la visuale principale sulla stazione
 STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Seleziona dimensione/tipo di aeroporto
 STR_305C_0                                                      :{STATION} {STATIONFEATURES}
 STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
@@ -1783,14 +1793,14 @@
 STR_305F_AIRCRAFT_HANGAR                                        :Hangar
 STR_3060_AIRPORT                                                :Aeroporto
 STR_3061_TRUCK_LOADING_AREA                                     :Area di carico per camion
-STR_3062_BUS_STATION                                            :Fermata bus
+STR_3062_BUS_STATION                                            :Stazione degli autobus
 STR_3063_SHIP_DOCK                                              :Molo
 STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Evidenzia l'area di copertura del sito proposto
 STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}Non evidenziare  l'area di copertura del sito proposto
 STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}Evidenzia area coperta
 STR_3068_DOCK                                                   :{WHITE}Molo
 STR_3069_BUOY                                                   :Boa
-STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...boa in mezzo
+STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...boa di mezzo
 STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...stazione troppo estesa
 STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...stazioni non uniformi disabilitate
 STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Tenere premuto CTRL per scegliere più di un oggetto
@@ -1800,14 +1810,14 @@
 STR_STAT_CLASS_WAYP                                             :Waypoint
 
 ##id 0x3800
-STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Orientamento Deposito Navale
+STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Orientamento deposito navale
 STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...deve essere costruito sull'acqua
-STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}Non puoi costruire deposito navale qui...
-STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Seleziona orientamento del deposito navale
+STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}Impossibile costruire il deposito navale qui...
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Seleziona l'orientamento del deposito navale
 STR_3804_WATER                                                  :Acqua
 STR_3805_COAST_OR_RIVERBANK                                     :Costa
 STR_3806_SHIP_DEPOT                                             :Deposito navale
-STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...non puoi costruire sull'acqua
+STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...impossibile costruire sull'acqua
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Salva partita
@@ -1815,60 +1825,60 @@
 STR_4002_SAVE                                                   :{BLACK}Salva
 STR_4003_DELETE                                                 :{BLACK}Elimina
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
-STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte liberi
-STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossibile leggere dal disco
+STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte liber{P o i}
+STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossibile leggere dall'unità
 STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvataggio fallito
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossibile eliminare il file
 STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Caricamento fallito
-STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Elenco unità disco, cartelle e file giochi salvati
-STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome corrente scelto per il salvataggio
-STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Elimina il gioco salvato selezionato
-STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}salva il gioco corrente usando il nome selezionato
-STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Selezione il tipo di gioco
-STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Seleziona scenario (verde), Partita pre-impostata (blu),Scenario casuale
+STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Elenco delle unità, delle cartelle e dei file delle partite salvate
+STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome del salvataggio selezionato
+STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Elimina il salvataggio selezionato
+STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}Salva la partita corrente, usando il nome scelto
+STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Seleziona tipo partita
+STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Seleziona uno scenario (verde), una partita pre-impostata (blu), o una nuova partita casuale
 STR_4010_GENERATE_RANDOM_NEW_GAME                               :Crea partita casuale
-STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Carica Heightmap
+STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Carica heightmap
 
 ##id 0x4800
-STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} in mezzo
+STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} di mezzo
 STR_4801                                                        :{WHITE}{INDUSTRY}
-STR_4802_COAL_MINE                                              :Miniera di Carbone
-STR_4803_POWER_STATION                                          :Centrale Elettrica
-STR_4804_SAWMILL                                                :Segheria
-STR_4805_FOREST                                                 :Foresta
-STR_4806_OIL_REFINERY                                           :Raffineria
-STR_4807_OIL_RIG                                                :Piattaforma Petrolifera
-STR_4808_FACTORY                                                :Fabbrica
-STR_4809_PRINTING_WORKS                                         :Tipografia
-STR_480A_STEEL_MILL                                             :Acciaieria
-STR_480B_FARM                                                   :Fattoria
-STR_480C_COPPER_ORE_MINE                                        :Miniera di Rame
-STR_480D_OIL_WELLS                                              :Pozzi Petroliferi
-STR_480E_BANK                                                   :Banca
-STR_480F_FOOD_PROCESSING_PLANT                                  :Azienda Alimentare
-STR_4810_PAPER_MILL                                             :Cartiera
-STR_4811_GOLD_MINE                                              :Miniera d'Oro
-STR_4812_BANK                                                   :Banca
-STR_4813_DIAMOND_MINE                                           :Miniera di Diamanti
-STR_4814_IRON_ORE_MINE                                          :Miniera di Ferro
-STR_4815_FRUIT_PLANTATION                                       :Piantagione di Frutta
-STR_4816_RUBBER_PLANTATION                                      :Piantagione di Gomma
-STR_4817_WATER_SUPPLY                                           :Falda Acquifera
-STR_4818_WATER_TOWER                                            :Cisterna d'Acqua
-STR_4819_FACTORY                                                :Fabbrica
-STR_481A_FARM                                                   :Fattoria
-STR_481B_LUMBER_MILL                                            :Falegnameria
-STR_481C_COTTON_CANDY_FOREST                                    :Foresta Cotone Candito
-STR_481D_CANDY_FACTORY                                          :Fabbrica Caramelle
-STR_481E_BATTERY_FARM                                           :Fattoria delle Batterie
-STR_481F_COLA_WELLS                                             :Pozzi di Cola
-STR_4820_TOY_SHOP                                               :Negozio di Giocattoli
-STR_4821_TOY_FACTORY                                            :Fabbrica di Giocattoli
-STR_4822_PLASTIC_FOUNTAINS                                      :Sorgenti di Plastica
-STR_4823_FIZZY_DRINK_FACTORY                                    :Fabbrica Bevande Frizzanti
-STR_4824_BUBBLE_GENERATOR                                       :Generatore di Bolle
-STR_4825_TOFFEE_QUARRY                                          :Estrattore di Toffee
-STR_4826_SUGAR_MINE                                             :Miniera di Zucchero
+STR_4802_COAL_MINE                                              :{G=f}Miniera di carbone
+STR_4803_POWER_STATION                                          :{G=f}Centrale elettrica
+STR_4804_SAWMILL                                                :{G=f}Segheria
+STR_4805_FOREST                                                 :{G=f}Foresta
+STR_4806_OIL_REFINERY                                           :{G=f}Raffineria
+STR_4807_OIL_RIG                                                :{G=f}Piattaforma petrolifera
+STR_4808_FACTORY                                                :{G=f}Fabbrica
+STR_4809_PRINTING_WORKS                                         :{G=f}Tipografia
+STR_480A_STEEL_MILL                                             :{G=f}Acciaieria
+STR_480B_FARM                                                   :{G=f}Fattoria
+STR_480C_COPPER_ORE_MINE                                        :{G=f}Miniera di rame
+STR_480D_OIL_WELLS                                              :{G=m}Pozzo petrolifero
+STR_480E_BANK                                                   :{G=f}Banca
+STR_480F_FOOD_PROCESSING_PLANT                                  :{G=f}Azienda alimentare
+STR_4810_PAPER_MILL                                             :{G=f}Cartiera
+STR_4811_GOLD_MINE                                              :{G=f}Miniera d'oro
+STR_4812_BANK                                                   :{G=f}Banca
+STR_4813_DIAMOND_MINE                                           :{G=f}Miniera di diamanti
+STR_4814_IRON_ORE_MINE                                          :{G=f}Miniera di ferro
+STR_4815_FRUIT_PLANTATION                                       :{G=f}Piantagione di frutta
+STR_4816_RUBBER_PLANTATION                                      :{G=f}Piantagione di gomma
+STR_4817_WATER_SUPPLY                                           :{G=f}Falda acquifera
+STR_4818_WATER_TOWER                                            :{G=f}Cisterna idrica
+STR_4819_FACTORY                                                :{G=f}Fabbrica
+STR_481A_FARM                                                   :{G=f}Fattoria
+STR_481B_LUMBER_MILL                                            :{G=f}Falegnameria
+STR_481C_COTTON_CANDY_FOREST                                    :{G=f}Foresta di zucchero filato
+STR_481D_CANDY_FACTORY                                          :{G=f}Fabbrica di caramelle
+STR_481E_BATTERY_FARM                                           :{G=f}Fattoria delle batterie
+STR_481F_COLA_WELLS                                             :{G=m}Pozzo di Cola
+STR_4820_TOY_SHOP                                               :{G=m}Negozio di giocattoli
+STR_4821_TOY_FACTORY                                            :{G=f}Fabbrica di giocattoli
+STR_4822_PLASTIC_FOUNTAINS                                      :{G=f}Sorgente di plastica
+STR_4823_FIZZY_DRINK_FACTORY                                    :{G=f}Fabbrica di bibite frizzanti
+STR_4824_BUBBLE_GENERATOR                                       :{G=m}Generatore di bollicine
+STR_4825_TOFFEE_QUARRY                                          :{G=f}Cava di toffee
+STR_4826_SUGAR_MINE                                             :{G=f}Miniera di zucchero
 
 ############ range for requires starts
 STR_4827_REQUIRES                                               :{BLACK}Richiede: {YELLOW}{STRING}
@@ -1876,59 +1886,59 @@
 STR_4829_REQUIRES                                               :{BLACK}Richiede: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
-STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produzione ultimo mese:
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produzione il mese scorso:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% trasportato)
-STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centra visuale sull'industria
-STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Nuova {STRING} in costruzione vicino a {TOWN}!
-STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Nuova {STRING} è stata piantata vicino a {TOWN}!
+STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centra la visuale principale sulla posizione dell'industria
+STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Nuov{G o a} {STRING} in costruzione vicino a {TOWN}!
+STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Un{G "" a} nuov{G o a} {STRING} è stat{G o a} piantat{G o a} vicino a {TOWN}!
 STR_482F_COST                                                   :{BLACK}Costo: {YELLOW}{CURRENCY}
-STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Non puoi costruire qui questo tipo di industria...
-STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...la foresta può essere piantata solo in una zona innevata
+STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Impossibile costruire questo tipo di industria qui...
+STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...una foresta può essere piantata solo in una zona innevata
 STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} annuncia imminente chiusura!!
-STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Per problemi di rifornimenti {INDUSTRY} annuncia imminente chiusura!
-STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}La mancanza di alberi vicini costringe {INDUSTRY} ad imminente chiusura!
+STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Per problemi di rifornimenti {G il la} {INDUSTRY} annuncia imminente chiusura!
+STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}La mancanza di alberi vicini costringe la {INDUSTRY} ad imminente chiusura!
 STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} incrementa la produzione!
-STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}Nuovo giacimento di carbone trovato a {INDUSTRY}!{}Produzione destinata a radoppiare!
-STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}Nuovo giacimento di petrolio trovato a {INDUSTRY}!{}Produzione destinata a radoppiare!
-STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}Metodi di coltivazione migliorati a {INDUSTRY} produzione destinata a radoppiare!
-STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY} produzione scesa del 50%
-STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}Invasione d'insetti causa devastazione a {INDUSTRY}!{}Produzione scesa del 50%
-STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...può essere posizionata solo vicino al bordo della mappa
+STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}Nuovo giacimento di carbone trovato alla {INDUSTRY}!{}Atteso un raddoppiamento della produzione!
+STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}Nuovo giacimento di petrolio trovato a {INDUSTRY}!{}Atteso un raddoppiamento della produzione!
+STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}Grazie a metodi di coltivazione migliorati alla {INDUSTRY} è atteso un raddoppiamento della produzione!
+STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}La produzione a {INDUSTRY} scende del 50%
+STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}Infestazione di insetti devasta la {INDUSTRY}!{}Produzione scesa del 50%
+STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...può essere posizionata solo vicino ai bordi della mappa
 STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}La produzione di {STRING} a {INDUSTRY} è aumentata del {COMMA}%!
 STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}La produzione di {STRING} a {INDUSTRY} è diminuita del {COMMA}%!
 
 ##id 0x5000
 STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Treno nel tunnel
-STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Veicolo nel tunnel
-STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Altro tunnel in mezzo
-STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Impossibile scavare l'uscita del tunnel
-STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Devi demolire prima il tunnel
-STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Devi demolire prima il ponte
-STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Non si può partire e finire nello stesso punto
-STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Sotto i ponti è richiesto terreno piano o acqua
+STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Automezzo nel tunnel
+STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Altro tunnel di mezzo
+STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Impossibile scavare il terreno all'altra estremità del tunnel
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Bisogna demolire il tunnel prima
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Bisogna demolire il ponte prima
+STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Impossibile partire e finire nello stesso punto
+STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Sotto un ponte è richiesto terreno livellato o acqua
 STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Inizio e fine devono essere allineati
 STR_500B_SITE_UNSUITABLE_FOR_TUNNEL                             :{WHITE}Sito inadatto per l'entrata del tunnel
 STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
 STR_500E_SUSPENSION_STEEL                                       :Sospeso, Acciaio
-STR_500F_GIRDER_STEEL                                           :A travi, Acciaio
+STR_500F_GIRDER_STEEL                                           :A travatura, Acciaio
 STR_5010_CANTILEVER_STEEL                                       :A mensola, Acciaio
 STR_5011_SUSPENSION_CONCRETE                                    :Sospeso, Cemento
 STR_5012_WOODEN                                                 :Legno
 STR_5013_CONCRETE                                               :Cemento
 STR_5014_TUBULAR_STEEL                                          :Tubolare, Acciaio
 STR_BRIDGE_TUBULAR_SILICON                                      :Tubolare, Silicio
-STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}Non puoi costruire qui il ponte...
-STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Non puoi costruire qui il tunnel...
+STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}Impossibile costruire il ponte qui...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Impossibile costruire il tunnel qui...
 STR_5017_RAILROAD_TUNNEL                                        :Tunnel ferroviario
 STR_5018_ROAD_TUNNEL                                            :Tunnel stradale
 STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Ponte ferroviario sospeso in acciaio
-STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Ponte ferroviario a travi in acciaio
-STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Ponte ferroviario a mensole in acciaio
+STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Ponte ferroviario a travatura in acciaio
+STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Ponte ferroviario a mensola in acciaio
 STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Ponte ferroviario sospeso in cemento armato
 STR_501F_WOODEN_RAIL_BRIDGE                                     :Ponte ferroviario in legno
 STR_5020_CONCRETE_RAIL_BRIDGE                                   :Ponte ferroviario in cemento
 STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Ponte stradale sopeso in acciaio
-STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Ponte stradale a travi in acciaio
+STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Ponte stradale a travutara in acciaio
 STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Ponte stradale a mensola in acciaio
 STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Ponte stradale sospeso in cemento armato
 STR_5025_WOODEN_ROAD_BRIDGE                                     :Ponte stradale in legno
@@ -1937,13 +1947,13 @@
 STR_5028_TUBULAR_ROAD_BRIDGE                                    :Ponte stradale tubolare
 
 ##id 0x5800
-STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Oggetto in mezzo
+STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Oggetto di mezzo
 STR_5801_TRANSMITTER                                            :Trasmettitore
 STR_5802_LIGHTHOUSE                                             :Faro
-STR_5803_COMPANY_HEADQUARTERS                                   :Sede della società
-STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...Sede principale della società in mezzo
-STR_5805_COMPANY_OWNED_LAND                                     :Terreno posseduto dalla società
-STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}Non puoi acquistare questo terreno...
+STR_5803_COMPANY_HEADQUARTERS                                   :Sede della compagnia
+STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...sede della compagnia di mezzo
+STR_5805_COMPANY_OWNED_LAND                                     :Terreno posseduto dalla compagnia
+STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}Impossibile acquistare quest'area di terreno...
 STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...lo possiedi già!
 
 
@@ -2005,24 +2015,24 @@
 ############ 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 max. 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_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Prestito iniziale massimo: {ORANGE}{CURRENCY}
+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 di uso dei veicoli: {ORANGE}{STRING}
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Costi d'esercizio dei veicoli: {ORANGE}{STRING.mp}
 STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Velocità di costruzione degli avversari: {ORANGE}{STRING}
-STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Intelligenza degli avversari: {ORANGE}{STRING}
+STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Intelligenza degli avversari: {ORANGE}{STRING.fs}
 STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Guasti dei veicoli: {ORANGE}{STRING}
 STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Moltiplicatore sussidi: {ORANGE}{STRING}
-STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Costi di costruzione: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Costi di costruzione: {ORANGE}{STRING.mp}
 STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Tipo di terreno: {ORANGE}{STRING}
-STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Quantità mare/laghi: {ORANGE}{STRING}
+STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Quantità di mare/laghi: {ORANGE}{STRING.fs}
 STR_6813_ECONOMY                                                :{LTBLUE}Economia: {ORANGE}{STRING}
 STR_6814_TRAIN_REVERSING                                        :{LTBLUE}Inversione treni: {ORANGE}{STRING}
 STR_6815_DISASTERS                                              :{LTBLUE}Disastri: {ORANGE}{STRING}
-STR_16816_CITY_APPROVAL                                         :{LTBLUE}Atteggiamento delle città alle modifiche: {ORANGE}{STRING}
+STR_16816_CITY_APPROVAL                                         :{LTBLUE}Atteggiamento della città in merito alle modifiche: {ORANGE}{STRING}
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Nessuno
@@ -2038,12 +2048,24 @@
 STR_681F_VERY_FAST                                              :Molto veloce
 STR_VERY_LOW                                                    :Molto basso
 STR_6820_LOW                                                    :Basso
+STR_6820_LOW.ms                                                 :Basso
+STR_6820_LOW.mp                                                 :Bassi
+STR_6820_LOW.fs                                                 :Bassa
+STR_6820_LOW.fp                                                 :Basse
 STR_6821_MEDIUM                                                 :Medio
+STR_6821_MEDIUM.ms                                              :Medio
+STR_6821_MEDIUM.mp                                              :Medi
+STR_6821_MEDIUM.fs                                              :Media
+STR_6821_MEDIUM.fp                                              :Medie
 STR_6822_HIGH                                                   :Alto
+STR_6822_HIGH.ms                                                :Alto
+STR_6822_HIGH.mp                                                :Alti
+STR_6822_HIGH.fs                                                :Alta
+STR_6822_HIGH.fp                                                :Alte
 STR_6823_NONE                                                   :Nessuno
-STR_6824_REDUCED                                                :Ridotto
-STR_6825_NORMAL                                                 :Normale
-STR_6826_X1_5                                                   :x1.5
+STR_6824_REDUCED                                                :Ridotti
+STR_6825_NORMAL                                                 :Normali
+STR_6826_X1_5                                                   :x1,5
 STR_6827_X2                                                     :x2
 STR_6828_X3                                                     :x3
 STR_6829_X4                                                     :x4
@@ -2053,7 +2075,7 @@
 STR_682D_MOUNTAINOUS                                            :Montagnoso
 STR_682E_STEADY                                                 :Stabile
 STR_682F_FLUCTUATING                                            :Fluttuante
-STR_6830_IMMEDIATE                                              :Immediato
+STR_6830_IMMEDIATE                                              :Immediata
 STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 mesi dopo il giocatore
 STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 mesi dopo il giocatore
 STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 mesi dopo il giocatore
@@ -2070,133 +2092,133 @@
 STR_7000                                                        :
 STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
 STR_7002_PLAYER                                                 :(Giocatore {COMMA})
-STR_7004_NEW_FACE                                               :{BLACK}Nuova Faccia
-STR_7005_COLOR_SCHEME                                           :{BLACK}Colore Società
-STR_7006_COLOR_SCHEME                                           :{GOLD}Colore Società:
-STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Nuovo Schema Colore
-STR_7008_COMPANY_NAME                                           :{BLACK}Nome Società
-STR_7009_PRESIDENT_NAME                                         :{BLACK}Nome Presidente
-STR_700A_COMPANY_NAME                                           :Nome della società
+STR_7004_NEW_FACE                                               :{BLACK}Nuova faccia
+STR_7005_COLOR_SCHEME                                           :{BLACK}Colori compagnia
+STR_7006_COLOR_SCHEME                                           :{GOLD}Schema colori:
+STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Nuovo schema colori
+STR_7008_COMPANY_NAME                                           :{BLACK}Nome compagnia
+STR_7009_PRESIDENT_NAME                                         :{BLACK}Nome presidente
+STR_700A_COMPANY_NAME                                           :Nome della compagnia
 STR_700B_PRESIDENT_S_NAME                                       :Nome del presidente
-STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Non puoi cambiare il nome della società...
-STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Non puoi cambiare il nome del presidente...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanze {BLACK}{PLAYERNAME}
-STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Spese/Ricavi
+STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Impossibile cambiare il nome della compagnia...
+STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Impossibile cambiare il nome del presidente...
+STR_700E_FINANCES                                               :{WHITE}Finanze della {COMPANY} {BLACK}{PLAYERNAME}
+STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Spese/ricavi
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Costruzioni
-STR_7012_NEW_VEHICLES                                           :{GOLD}Nuovi Veicoli
-STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Costi Uso Treni
-STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Costi Uso Veicoli
-STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Costi Uso Aerei
-STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Costi Uso Navi
-STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Manutenzione Proprietà
-STR_7018_TRAIN_INCOME                                           :{GOLD}Ricavi Treni
-STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Ricavi Veicoli
-STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Ricavi Aerei
-STR_701B_SHIP_INCOME                                            :{GOLD}Ricavi Navi
-STR_701C_LOAN_INTEREST                                          :{GOLD}Interessi sul Prestito
+STR_7012_NEW_VEHICLES                                           :{GOLD}Nuovi veicoli
+STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Costi d'esercizio treni
+STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Costi d'esercizio automezzi
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Costi d'esercizio aeromobili
+STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Costi d'esercizio navi
+STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Manutenzione proprietà
+STR_7018_TRAIN_INCOME                                           :{GOLD}Ricavi treni
+STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Ricavi automezzi
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Ricavi aeromobili
+STR_701B_SHIP_INCOME                                            :{GOLD}Ricavi navi
+STR_701C_LOAN_INTEREST                                          :{GOLD}Interessi sul prestito
 STR_701D_OTHER                                                  :{GOLD}Altro
 STR_701E                                                        :{BLACK}-{CURRENCY64}
 STR_701F                                                        :{BLACK}+{CURRENCY64}
 STR_7020_TOTAL                                                  :{WHITE}Totale:
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
-STR_7022_INCOME_GRAPH                                           :{WHITE}Grafico Incassi
+STR_7022_INCOME_GRAPH                                           :{WHITE}Grafico incassi
 STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
 STR_7024                                                        :{COMMA}
-STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Grafico Profitti Operativi
+STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Grafico profitto operativo
 STR_7026_BANK_BALANCE                                           :{WHITE}Bilancio Bancario
 STR_7027_LOAN                                                   :{WHITE}Prestito
 STR_MAX_LOAN                                                    :{WHITE}Prestito Massimo:  {BLACK}{CURRENCY64}
 STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Richiedi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Chiedi in prestito {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Ripaga {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...il prestito massimo concesso è di {CURRENCY}
-STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Non puoi chiedere altro denaro...
+STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Impossibile chiedere in prestito altro denaro...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...debito già estinto
 STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} richiesti
-STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Non puoi ripagare il debito...
+STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Impossibile ripagare il prestito...
 STR_INSUFFICIENT_FUNDS                                          :{WHITE}Non è possibile donare denaro, è in prestito dalla banca
 STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Seleziona una nuova faccia per il presidente
-STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Cambia colore dei veicoli della società
+STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Cambia la livrea dei veicoli della compagnia
 STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Cambia il nome del presidente
 STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Cambia il nome della compagnia
-STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Fare clic per selezionare il nuovo colore
-STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Aumenta dimensioni del debito
-STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Ripaga parte del debito
-STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(President)
-STR_7038_INAUGURATED                                            :{GOLD}Inaugurata: {WHITE}{NUM}
+STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Fare clic sullo schema di colori desiderato
+STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Aumenta l'ammontare del prestito
+STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Ripaga parte del prestito
+STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Presidente)
+STR_7038_INAUGURATED                                            :{GOLD}Inaugurata nel: {WHITE}{NUM}
 STR_7039_VEHICLES                                               :{GOLD}Veicoli:
 STR_TRAINS                                                      :{WHITE}{COMMA} tren{P o i}
 STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} veicol{P o i} stradal{P e i}
 STR_AIRCRAFT                                                    :{WHITE}{COMMA} aere{P o i}
 STR_SHIPS                                                       :{WHITE}{COMMA} nav{P e i}
 STR_7042_NONE                                                   :{WHITE}Nessuno
-STR_7043_FACE_SELECTION                                         :{WHITE}Seleziona Faccia
+STR_7043_FACE_SELECTION                                         :{WHITE}Seleziona faccia
 STR_7044_MALE                                                   :{BLACK}Maschio
 STR_7045_FEMALE                                                 :{BLACK}Femmina
-STR_7046_NEW_FACE                                               :{BLACK}Nuova Faccia
-STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Annulla selezione Faccia
-STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Accetta nuova Faccia
-STR_7049_SELECT_MALE_FACES                                      :{BLACK}Seleziona volti maschili
-STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Seleziona volti femminili
-STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Genera faccia a caso
-STR_704C_KEY                                                    :{BLACK}Valori
-STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Mostra valori nel grafico
-STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Valori società nel grafico
-STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Clicca qui per mostrare i valori della società nel grafico on/off
-STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Unità di merce trasportata
-STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Valutazione prestazioni società (Massima valutazione=1000)
-STR_7052_COMPANY_VALUES                                         :{WHITE}Valore della società
-STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Classifica società
+STR_7046_NEW_FACE                                               :{BLACK}Nuova faccia
+STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Annulla la selezione della nuova faccia
+STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Accetta la selezione della nuova faccia
+STR_7049_SELECT_MALE_FACES                                      :{BLACK}Seleziona fra volti maschili
+STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Seleziona fra volti femminili
+STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Genera una nuova faccia a caso
+STR_704C_KEY                                                    :{BLACK}Legenda
+STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Mostra la legenda del grafico
+STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Legenda grafico compagnie
+STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Fare clic per attivare/disattivare la visualizzazione di una compagnia sul grafico
+STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Unità di merce consegnate
+STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Valutazione prestazioni compagnie (massima valutazione=1000)
+STR_7052_COMPANY_VALUES                                         :{WHITE}Valore delle compagnie
+STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Classifica compagnie
 STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
 STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
-STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Società di trasporti in difficolta!
-STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} verrà venduta o dichiarerà bancarotta a meno che le prestazioni non miglioreranno presto!
+STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Compagnia di trasporti in difficolta!
+STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}La {COMPANY} verrà venduta o dichiarerà bancarotta a meno che le prestazioni non miglioreranno presto!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
-STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Fusione tra società di trasporti
-STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} è stata venduta a {COMPANY} per {CURRENCY}!
-STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Stiamo cercando una società di trasporti per vendere la nostra società.{}{} Vorrebbe acquistare {COMPANY} per {CURRENCY}?
+STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Fusione tra compagnie di trasporti!
+STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}La {COMPANY} è stata venduta alla {COMPANY} per {CURRENCY}!
+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}{COMPANY} è stata chiusa dai creditori e tutti i suoi beni venduti!
-STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Lanciata nuova società di trasporti!
-STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} inizia a costruire vicino a {TOWN}!
-STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}Non puoi comprare la società...
-STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Percentuale Pagamento Merci
+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_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
 STR_7062_DAYS_IN_TRANSIT                                        :{BLACK}{TINYFONT}Giorni di viaggio
-STR_7063_PAYMENT_FOR_DELIVERING                                 :{BLACK}{TINYFONT}Pagamento per la consegna di dieci unità (o 10,000 litri) di merce alla distanza di 20 quadrati
-STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Seleziona grafico tipo di merce on/off
+STR_7063_PAYMENT_FOR_DELIVERING                                 :{BLACK}{TINYFONT}Pagamento per la consegna di 10 unità (o 10.000 litri) di merce alla distanza di 20 riquadri
+STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Attiva/disattiva il grafico per il tipo di merce
 STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
 STR_7066_ENGINEER                                               :Ingegnere
 STR_7067_TRAFFIC_MANAGER                                        :Direttore del traffico
-STR_7068_TRANSPORT_COORDINATOR                                  :Coordinatore dei Trasporti
-STR_7069_ROUTE_SUPERVISOR                                       :Supervisore dei Percorsi
+STR_7068_TRANSPORT_COORDINATOR                                  :Coordinatore dei trasporti
+STR_7069_ROUTE_SUPERVISOR                                       :Supervisore dei percorsi
 STR_706A_DIRECTOR                                               :Direttore
-STR_706B_CHIEF_EXECUTIVE                                        :Amministratore Delegato
+STR_706B_CHIEF_EXECUTIVE                                        :Amministratore delegato
 STR_706C_CHAIRMAN                                               :Chairman
 STR_706D_PRESIDENT                                              :Presidente
 STR_706E_TYCOON                                                 :Magnate
-STR_706F_BUILD_HQ                                               :{BLACK}Costr. Sede
-STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Costruisci/Guarda la sede della società
+STR_706F_BUILD_HQ                                               :{BLACK}Costr. sede
+STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Costruisce la sede della compagnia / visualizza la sede della compagnia
 STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Sposta la sede della compagnia pagando 1% del valore societario
-STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Non puoi costruire la sede della compagnia...
-STR_7072_VIEW_HQ                                                :{BLACK}Guarda Sede
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Impossibile costruire la sede della compagnia...
+STR_7072_VIEW_HQ                                                :{BLACK}Vedi sede
 STR_RELOCATE_HQ                                                 :{BLACK}Sposta Sede
 STR_COMPANY_PASSWORD                                            :{BLACK}Password
 STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Protegge la tuo compagnia con una password per impedire accessi non autorizzati.
 STR_SET_COMPANY_PASSWORD                                        :Imposta password della società
-STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Recessione Mondiale!{}{}Gli esperti finanziari temono la peggior crisi economica!
-STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recessione Finita!{}{}Rialzo negli scambi dà fiducia alle industrie per un rafforzamento economico!
+STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Recessione mondiale!{}{}Il crollo dell'economia porta gli analisti finanziari a temere il peggio!
+STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recessione finita!{}{}La ripresa del commercio da fiducia alle industrie e rafforza l'economia!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Seleziona dimensione grande/piccola della finestra
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valore società: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valore compagnia: {WHITE}{CURRENCY64}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Compra il 25% delle azioni
 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 della società
-STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Vendi il 25% delle azioni della società
-STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}Non puoi comprare il 25% delle azioni della società...
-STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}Non puoi vendere il 25% delle azioni della società...
-STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% posseduto da {COMPANY})
-STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% posseduto da {COMPANY}{}   {COMMA}% posseduto da {COMPANY})
-STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} è stata rilevata da {COMPANY}!
+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_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}!
 STR_7080_PROTECTED                                              :{WHITE}Questa compagnia non è abbastanza vecchia per scambiare azioni...
 
 STR_LIVERY_DEFAULT                                              :Livrea Standard
@@ -2240,7 +2262,7 @@
 STR_8008_CHANEY_JUBILEE_STEAM                                   :Chaney 'Jubilee' (Vapore)
 STR_8009_GINZU_A4_STEAM                                         :Ginzu 'A4' (Vapore)
 STR_800A_SH_8P_STEAM                                            :SH '8P' (Vapore)
-STR_800B_MANLEY_MOREL_DMU_DIESEL                                :Manley-Morel DMU (Diesel)
+STR_800B_MANLEY_MOREL_DMU_DIESEL                                :DMU Manley-Morel (Diesel)
 STR_800C_DASH_DIESEL                                            :'Dash' (Diesel)
 STR_800D_SH_HENDRY_25_DIESEL                                    :SH/Hendry '25' (Diesel)
 STR_800E_UU_37_DIESEL                                           :UU '37' (Diesel)
@@ -2256,183 +2278,183 @@
 STR_8018_SH_40_ELECTRIC                                         :SH '40' (Elettrica)
 STR_8019_T_I_M_ELECTRIC                                         :'T.I.M.' (Elettrica)
 STR_801A_ASIASTAR_ELECTRIC                                      :'AsiaStar' (Elettrica)
-STR_801B_PASSENGER_CAR                                          :Carrozza Passeggeri
-STR_801C_MAIL_VAN                                               :Vagone Postale
-STR_801D_COAL_CAR                                               :Vagone Carbone
-STR_801E_OIL_TANKER                                             :Vagone Cisterna
-STR_801F_LIVESTOCK_VAN                                          :Vagone Bestiame
-STR_8020_GOODS_VAN                                              :Vagone Beni
-STR_8021_GRAIN_HOPPER                                           :Vagone Grano
-STR_8022_WOOD_TRUCK                                             :Vagone Legname
-STR_8023_IRON_ORE_HOPPER                                        :Vagone Ferro
-STR_8024_STEEL_TRUCK                                            :Vagone Acciaio
-STR_8025_ARMORED_VAN                                            :Vagone Blindato
-STR_8026_FOOD_VAN                                               :Vagone Alimentari
-STR_8027_PAPER_TRUCK                                            :Vagone Carta
-STR_8028_COPPER_ORE_HOPPER                                      :Vagone Rame
-STR_8029_WATER_TANKER                                           :Vagone Cisterna Acqua
-STR_802A_FRUIT_TRUCK                                            :Vagone Frutta
-STR_802B_RUBBER_TRUCK                                           :Vagone Gomma
-STR_802C_SUGAR_TRUCK                                            :Vagone Zucchero
-STR_802D_COTTON_CANDY_HOPPER                                    :Vagone Cotone Cand.
-STR_802E_TOFFEE_HOPPER                                          :Vagone Toffee
-STR_802F_BUBBLE_VAN                                             :Vagone Bolle
-STR_8030_COLA_TANKER                                            :Vagone Cisterna Cola
-STR_8031_CANDY_VAN                                              :Vagone Dolciumi
-STR_8032_TOY_VAN                                                :Vagone Giocattoli
-STR_8033_BATTERY_TRUCK                                          :Vagone Batterie
-STR_8034_FIZZY_DRINK_TRUCK                                      :Vagone Bibite Friz.
-STR_8035_PLASTIC_TRUCK                                          :Vagone Plastica
+STR_801B_PASSENGER_CAR                                          :Carrozza passeggeri
+STR_801C_MAIL_VAN                                               :Vagone postale
+STR_801D_COAL_CAR                                               :Carrello carbone
+STR_801E_OIL_TANKER                                             :Vagone cisterna petrolio
+STR_801F_LIVESTOCK_VAN                                          :Vagone bestiame
+STR_8020_GOODS_VAN                                              :Vagone beni
+STR_8021_GRAIN_HOPPER                                           :Tramoggia per grano
+STR_8022_WOOD_TRUCK                                             :Carrello legname
+STR_8023_IRON_ORE_HOPPER                                        :Tramoggia per ferro
+STR_8024_STEEL_TRUCK                                            :Carrello acciaio
+STR_8025_ARMORED_VAN                                            :Vagone blindato
+STR_8026_FOOD_VAN                                               :Vagone alimentari
+STR_8027_PAPER_TRUCK                                            :Carrello carta
+STR_8028_COPPER_ORE_HOPPER                                      :Tramoggia per rame
+STR_8029_WATER_TANKER                                           :Vagone cisterna acqua
+STR_802A_FRUIT_TRUCK                                            :Carrello frutta
+STR_802B_RUBBER_TRUCK                                           :Carrello gomma
+STR_802C_SUGAR_TRUCK                                            :Carrello zucchero
+STR_802D_COTTON_CANDY_HOPPER                                    :Tramoggia per zucchero filato
+STR_802E_TOFFEE_HOPPER                                          :Tramoggia per toffee
+STR_802F_BUBBLE_VAN                                             :Vagone bollicine
+STR_8030_COLA_TANKER                                            :Vagone cisterna Cola
+STR_8031_CANDY_VAN                                              :Vagone caramelle
+STR_8032_TOY_VAN                                                :Vagone giocattoli
+STR_8033_BATTERY_TRUCK                                          :Carrello batterie
+STR_8034_FIZZY_DRINK_TRUCK                                      :Carrello bibite frizzanti
+STR_8035_PLASTIC_TRUCK                                          :Carrello plastica
 STR_8036_X2001_ELECTRIC                                         :'X2001' (Elettrica)
 STR_8037_MILLENNIUM_Z1_ELECTRIC                                 :'Millennium Z1' (Elettrica)
 STR_8038_WIZZOWOW_Z99                                           :Wizzowow Z99
-STR_8039_PASSENGER_CAR                                          :Carrozza Passeggeri
-STR_803A_MAIL_VAN                                               :Vagone Postale
-STR_803B_COAL_CAR                                               :Vagone Carbone
-STR_803C_OIL_TANKER                                             :Vagone Cisterna
-STR_803D_LIVESTOCK_VAN                                          :Vagone Bestiame
-STR_803E_GOODS_VAN                                              :Vagone Beni
-STR_803F_GRAIN_HOPPER                                           :Vagone Grano
-STR_8040_WOOD_TRUCK                                             :Vagone Legname
-STR_8041_IRON_ORE_HOPPER                                        :Vagone Ferro
-STR_8042_STEEL_TRUCK                                            :Vagone Acciaio
-STR_8043_ARMORED_VAN                                            :Vagone Blindato
-STR_8044_FOOD_VAN                                               :Vagone Alimentari
-STR_8045_PAPER_TRUCK                                            :Vagone Carta
-STR_8046_COPPER_ORE_HOPPER                                      :Vagone Rame
-STR_8047_WATER_TANKER                                           :Vagone Cisterna Acqua
-STR_8048_FRUIT_TRUCK                                            :Vagone Frutta
-STR_8049_RUBBER_TRUCK                                           :Vagone Gomma
-STR_804A_SUGAR_TRUCK                                            :Vagone Zucchero
-STR_804B_COTTON_CANDY_HOPPER                                    :Vagone Cotone Cand.
-STR_804C_TOFFEE_HOPPER                                          :Vagone Toffee
-STR_804D_BUBBLE_VAN                                             :Vagone Bolle
-STR_804E_COLA_TANKER                                            :Vagone Cisterna Cola
-STR_804F_CANDY_VAN                                              :Vagone Dolciumi
-STR_8050_TOY_VAN                                                :Vagone Giocattoli
-STR_8051_BATTERY_TRUCK                                          :Vagone Batterie
-STR_8052_FIZZY_DRINK_TRUCK                                      :Vagone Bibite Friz.
-STR_8053_PLASTIC_TRUCK                                          :Vagone Plastica
+STR_8039_PASSENGER_CAR                                          :Carrozza passeggeri
+STR_803A_MAIL_VAN                                               :Vagone postale
+STR_803B_COAL_CAR                                               :Carrello carbone
+STR_803C_OIL_TANKER                                             :Vagone cisterna petrolio
+STR_803D_LIVESTOCK_VAN                                          :Vagone bestiame
+STR_803E_GOODS_VAN                                              :Vagone beni
+STR_803F_GRAIN_HOPPER                                           :Tramoggia per grano
+STR_8040_WOOD_TRUCK                                             :Carrello legname
+STR_8041_IRON_ORE_HOPPER                                        :Tramoggia per ferro
+STR_8042_STEEL_TRUCK                                            :Carrello acciaio
+STR_8043_ARMORED_VAN                                            :Vagone blindato
+STR_8044_FOOD_VAN                                               :Vagone alimentari
+STR_8045_PAPER_TRUCK                                            :Carrello carta
+STR_8046_COPPER_ORE_HOPPER                                      :Tramoggia per rame
+STR_8047_WATER_TANKER                                           :Vagone cisterna acqua
+STR_8048_FRUIT_TRUCK                                            :Carrello frutta
+STR_8049_RUBBER_TRUCK                                           :Carrello gomma
+STR_804A_SUGAR_TRUCK                                            :Carrello zucchero
+STR_804B_COTTON_CANDY_HOPPER                                    :Tramoggia per zucchero filato
+STR_804C_TOFFEE_HOPPER                                          :Tramoggia per toffee
+STR_804D_BUBBLE_VAN                                             :Vagone bollicine
+STR_804E_COLA_TANKER                                            :Vagone cisterna Cola
+STR_804F_CANDY_VAN                                              :Vagone caramelle
+STR_8050_TOY_VAN                                                :Vagone giocattoli
+STR_8051_BATTERY_TRUCK                                          :Carrello batterie
+STR_8052_FIZZY_DRINK_TRUCK                                      :Carrello bibite frizzanti
+STR_8053_PLASTIC_TRUCK                                          :Carrello plastica
 STR_8054_LEV1_LEVIATHAN_ELECTRIC                                :Lev1 'Leviathan' (Elettrica)
 STR_8055_LEV2_CYCLOPS_ELECTRIC                                  :Lev2 'Cyclops' (Elettrica)
 STR_8056_LEV3_PEGASUS_ELECTRIC                                  :Lev3 'Pegasus' (Elettrica)
 STR_8057_LEV4_CHIMAERA_ELECTRIC                                 :Lev4 'Chimaera' (Elettrica)
 STR_8058_WIZZOWOW_ROCKETEER                                     :Wizzowow Rocketeer
-STR_8059_PASSENGER_CAR                                          :Carrozza Passeggeri
-STR_805A_MAIL_VAN                                               :Vagone Postale
-STR_805B_COAL_CAR                                               :Vagone Carbone
-STR_805C_OIL_TANKER                                             :Vagone Cisterna
-STR_805D_LIVESTOCK_VAN                                          :Vagone Bestiame
-STR_805E_GOODS_VAN                                              :Vagone Beni
-STR_805F_GRAIN_HOPPER                                           :Vagone Grano
-STR_8060_WOOD_TRUCK                                             :Vagone Legname
-STR_8061_IRON_ORE_HOPPER                                        :Vagone Ferro
-STR_8062_STEEL_TRUCK                                            :Vagone Acciaio
-STR_8063_ARMORED_VAN                                            :Vagone Blindato
-STR_8064_FOOD_VAN                                               :Vagone Alimentari
-STR_8065_PAPER_TRUCK                                            :Vagone Carta
-STR_8066_COPPER_ORE_HOPPER                                      :Vagone Rame
-STR_8067_WATER_TANKER                                           :Vagone Cisterna Acqua
-STR_8068_FRUIT_TRUCK                                            :Vagone Frutta
-STR_8069_RUBBER_TRUCK                                           :Vagone Gomma
-STR_806A_SUGAR_TRUCK                                            :Vagone Zucchero
-STR_806B_COTTON_CANDY_HOPPER                                    :Vagone Cotone Cand.
-STR_806C_TOFFEE_HOPPER                                          :Vagone Toffee
-STR_806D_BUBBLE_VAN                                             :Vagone Bolle
-STR_806E_COLA_TANKER                                            :Vagone Cisterna Cola
-STR_806F_CANDY_VAN                                              :Vagone Dolciumi
-STR_8070_TOY_VAN                                                :Vagone Giocattoli
-STR_8071_BATTERY_TRUCK                                          :Vagone Batterie
-STR_8072_FIZZY_DRINK_TRUCK                                      :Vagone Bibite Friz.
-STR_8073_PLASTIC_TRUCK                                          :Vagone Plastica
+STR_8059_PASSENGER_CAR                                          :Carrozza passeggeri
+STR_805A_MAIL_VAN                                               :Vagone postale
+STR_805B_COAL_CAR                                               :Carrello carbone
+STR_805C_OIL_TANKER                                             :Vagone cisterna petrolio
+STR_805D_LIVESTOCK_VAN                                          :Vagone bestiame
+STR_805E_GOODS_VAN                                              :Vagone beni
+STR_805F_GRAIN_HOPPER                                           :Tramoggia per grano
+STR_8060_WOOD_TRUCK                                             :Carrello legname
+STR_8061_IRON_ORE_HOPPER                                        :Tramoggia per ferro
+STR_8062_STEEL_TRUCK                                            :Carrello acciaio
+STR_8063_ARMORED_VAN                                            :Vagone blindato
+STR_8064_FOOD_VAN                                               :Vagone alimentari
+STR_8065_PAPER_TRUCK                                            :Carrello carta
+STR_8066_COPPER_ORE_HOPPER                                      :Tramoggia per rame
+STR_8067_WATER_TANKER                                           :Vagone cisterna acqua
+STR_8068_FRUIT_TRUCK                                            :Carrello frutta
+STR_8069_RUBBER_TRUCK                                           :Carrello gomma
+STR_806A_SUGAR_TRUCK                                            :Carrello zucchero
+STR_806B_COTTON_CANDY_HOPPER                                    :Tramoggia per zucchero filato
+STR_806C_TOFFEE_HOPPER                                          :Tramoggia per toffee
+STR_806D_BUBBLE_VAN                                             :Vagone bollicine
+STR_806E_COLA_TANKER                                            :Vagone cisterna Cola
+STR_806F_CANDY_VAN                                              :Vagone caramelle
+STR_8070_TOY_VAN                                                :Vagone giocattoli
+STR_8071_BATTERY_TRUCK                                          :Carrello batterie
+STR_8072_FIZZY_DRINK_TRUCK                                      :Carrello bibite frizzanti
+STR_8073_PLASTIC_TRUCK                                          :Carrello plastica
 STR_8074_MPS_REGAL_BUS                                          :Bus MPS Regal
 STR_8075_HEREFORD_LEOPARD_BUS                                   :Bus Hereford Leopard
 STR_8076_FOSTER_BUS                                             :Bus Foster
-STR_8077_FOSTER_MKII_SUPERBUS                                   :Foster MkII Superbus
+STR_8077_FOSTER_MKII_SUPERBUS                                   :Superbus Foster MkII
 STR_8078_PLODDYPHUT_MKI_BUS                                     :Bus Ploddyphut MkI
 STR_8079_PLODDYPHUT_MKII_BUS                                    :Bus Ploddyphut MkII
 STR_807A_PLODDYPHUT_MKIII_BUS                                   :Bus Ploddyphut MkIII
-STR_807B_BALOGH_COAL_TRUCK                                      :Camion Carbone Balogh
-STR_807C_UHL_COAL_TRUCK                                         :Camion Carbone Uhl
-STR_807D_DW_COAL_TRUCK                                          :Camion Carbone DW
-STR_807E_MPS_MAIL_TRUCK                                         :Furgone Postale MPS
-STR_807F_REYNARD_MAIL_TRUCK                                     :Furgone Postale Reynard
-STR_8080_PERRY_MAIL_TRUCK                                       :Furgone Postale Perry
-STR_8081_MIGHTYMOVER_MAIL_TRUCK                                 :Furg. Postale MightyMover
-STR_8082_POWERNAUGHT_MAIL_TRUCK                                 :Furg. Postale Powernaught
-STR_8083_WIZZOWOW_MAIL_TRUCK                                    :Furgone Postale Wizzowow
+STR_807B_BALOGH_COAL_TRUCK                                      :Autocarro carbone Balogh
+STR_807C_UHL_COAL_TRUCK                                         :Autocarro carbone Uhl
+STR_807D_DW_COAL_TRUCK                                          :Autocarro carbone DW
+STR_807E_MPS_MAIL_TRUCK                                         :Furgone postale MPS
+STR_807F_REYNARD_MAIL_TRUCK                                     :Furgone postale Reynard
+STR_8080_PERRY_MAIL_TRUCK                                       :Furgone postale Perry
+STR_8081_MIGHTYMOVER_MAIL_TRUCK                                 :Furgone postale MightyMover
+STR_8082_POWERNAUGHT_MAIL_TRUCK                                 :Furgone postale Powernaught
+STR_8083_WIZZOWOW_MAIL_TRUCK                                    :Furgone postale Wizzowow
 STR_8084_WITCOMBE_OIL_TANKER                                    :Autocisterna Witcombe
 STR_8085_FOSTER_OIL_TANKER                                      :Autocisterna Foster
 STR_8086_PERRY_OIL_TANKER                                       :Autocisterna Perry
-STR_8087_TALBOTT_LIVESTOCK_VAN                                  :Furgone Bestiame Talbott
-STR_8088_UHL_LIVESTOCK_VAN                                      :Furgone Bestiame Uhl
-STR_8089_FOSTER_LIVESTOCK_VAN                                   :Furgone Bestiame Foster
-STR_808A_BALOGH_GOODS_TRUCK                                     :Camion Beni Balogh
-STR_808B_CRAIGHEAD_GOODS_TRUCK                                  :Camion Beni Craighead
-STR_808C_GOSS_GOODS_TRUCK                                       :Camion Beni Goss
-STR_808D_HEREFORD_GRAIN_TRUCK                                   :Camion Grano Hereford
-STR_808E_THOMAS_GRAIN_TRUCK                                     :Camion Grano Thomas
-STR_808F_GOSS_GRAIN_TRUCK                                       :Camion Grano Goss
-STR_8090_WITCOMBE_WOOD_TRUCK                                    :Camion Legname Witcombe
-STR_8091_FOSTER_WOOD_TRUCK                                      :Camion Legname Foster
-STR_8092_MORELAND_WOOD_TRUCK                                    :Camion Legname Moreland
-STR_8093_MPS_IRON_ORE_TRUCK                                     :Camion Ferro MPS
-STR_8094_UHL_IRON_ORE_TRUCK                                     :Camion Ferro Uhl
-STR_8095_CHIPPY_IRON_ORE_TRUCK                                  :Camion Ferro Chippy
-STR_8096_BALOGH_STEEL_TRUCK                                     :Camion Acciaio Balogh
-STR_8097_UHL_STEEL_TRUCK                                        :Camion Acciaio Uhl
-STR_8098_KELLING_STEEL_TRUCK                                    :Camion Acciaio Kelling
+STR_8087_TALBOTT_LIVESTOCK_VAN                                  :Carro bestiame Talbott
+STR_8088_UHL_LIVESTOCK_VAN                                      :Carro bestiame Uhl
+STR_8089_FOSTER_LIVESTOCK_VAN                                   :Carro bestiame Foster
+STR_808A_BALOGH_GOODS_TRUCK                                     :Camion beni Balogh
+STR_808B_CRAIGHEAD_GOODS_TRUCK                                  :Camion beni Craighead
+STR_808C_GOSS_GOODS_TRUCK                                       :Camion beni Goss
+STR_808D_HEREFORD_GRAIN_TRUCK                                   :Autocarro grano Hereford
+STR_808E_THOMAS_GRAIN_TRUCK                                     :Autocarro grano Thomas
+STR_808F_GOSS_GRAIN_TRUCK                                       :Autocarro grano Goss
+STR_8090_WITCOMBE_WOOD_TRUCK                                    :Autocarro legname Witcombe
+STR_8091_FOSTER_WOOD_TRUCK                                      :Autocarro legname Foster
+STR_8092_MORELAND_WOOD_TRUCK                                    :Autocarro legname Moreland
+STR_8093_MPS_IRON_ORE_TRUCK                                     :Autocarro ferro MPS
+STR_8094_UHL_IRON_ORE_TRUCK                                     :Autocarro ferro Uhl
+STR_8095_CHIPPY_IRON_ORE_TRUCK                                  :Autocarro ferro Chippy
+STR_8096_BALOGH_STEEL_TRUCK                                     :Autocarro acciaio Balogh
+STR_8097_UHL_STEEL_TRUCK                                        :Autocarro acciaio Uhl
+STR_8098_KELLING_STEEL_TRUCK                                    :Autocarro acciaio Kelling
 STR_8099_BALOGH_ARMORED_TRUCK                                   :Autoblindo Balogh
 STR_809A_UHL_ARMORED_TRUCK                                      :Autoblindo Uhl
 STR_809B_FOSTER_ARMORED_TRUCK                                   :Autoblindo Foster
-STR_809C_FOSTER_FOOD_VAN                                        :Furg. Alimentari Foster
-STR_809D_PERRY_FOOD_VAN                                         :Furg. Alimentari Perry
-STR_809E_CHIPPY_FOOD_VAN                                        :Furg. Alimentari Chippy
-STR_809F_UHL_PAPER_TRUCK                                        :Camion Carta Uhl
-STR_80A0_BALOGH_PAPER_TRUCK                                     :Camion Carta Balogh
-STR_80A1_MPS_PAPER_TRUCK                                        :Camion Carta MPS
-STR_80A2_MPS_COPPER_ORE_TRUCK                                   :Camion Rame MPS
-STR_80A3_UHL_COPPER_ORE_TRUCK                                   :Camion Rame Uhl
-STR_80A4_GOSS_COPPER_ORE_TRUCK                                  :Camion Rame Goss
+STR_809C_FOSTER_FOOD_VAN                                        :Furgone alimentari Foster
+STR_809D_PERRY_FOOD_VAN                                         :Furgone alimentari Perry
+STR_809E_CHIPPY_FOOD_VAN                                        :Furgone alimentari Chippy
+STR_809F_UHL_PAPER_TRUCK                                        :Autocarro carta Uhl
+STR_80A0_BALOGH_PAPER_TRUCK                                     :Autocarro carta Balogh
+STR_80A1_MPS_PAPER_TRUCK                                        :Autocarro carta MPS
+STR_80A2_MPS_COPPER_ORE_TRUCK                                   :Autocarro rame MPS
+STR_80A3_UHL_COPPER_ORE_TRUCK                                   :Autocarro rame Uhl
+STR_80A4_GOSS_COPPER_ORE_TRUCK                                  :Autocarro rame Goss
 STR_80A5_UHL_WATER_TANKER                                       :Autobotte Uhl
 STR_80A6_BALOGH_WATER_TANKER                                    :Autobotte Balogh
 STR_80A7_MPS_WATER_TANKER                                       :Autobotte MPS
-STR_80A8_BALOGH_FRUIT_TRUCK                                     :Camion Frutta Balogh
-STR_80A9_UHL_FRUIT_TRUCK                                        :Camion Frutta Uhl
-STR_80AA_KELLING_FRUIT_TRUCK                                    :Camion Frutta Kelling
-STR_80AB_BALOGH_RUBBER_TRUCK                                    :Camion Gomma Balogh
-STR_80AC_UHL_RUBBER_TRUCK                                       :Camion Gomma Uhl
-STR_80AD_RMT_RUBBER_TRUCK                                       :Camion Gomma RMT
-STR_80AE_MIGHTYMOVER_SUGAR_TRUCK                                :Camion Zucchero MightyMover
-STR_80AF_POWERNAUGHT_SUGAR_TRUCK                                :Camion Zucchero Powernaught
-STR_80B0_WIZZOWOW_SUGAR_TRUCK                                   :Camion Zucchero Wizzowow
-STR_80B1_MIGHTYMOVER_COLA_TRUCK                                 :Autobotte-Cola MightyMover
-STR_80B2_POWERNAUGHT_COLA_TRUCK                                 :Autobotte-Cola Powernaught
-STR_80B3_WIZZOWOW_COLA_TRUCK                                    :Autobotte-Cola Wizzowow
-STR_80B4_MIGHTYMOVER_COTTON_CANDY                               :Camion Cotone Can. MightyMover
-STR_80B5_POWERNAUGHT_COTTON_CANDY                               :Camion Cotone Can. Powernaught
-STR_80B6_WIZZOWOW_COTTON_CANDY_TRUCK                            :Camion Cotone Can. Wizzowow
-STR_80B7_MIGHTYMOVER_TOFFEE_TRUCK                               :Camion Toffee MightyMover
-STR_80B8_POWERNAUGHT_TOFFEE_TRUCK                               :Camion Toffee Powernaught
-STR_80B9_WIZZOWOW_TOFFEE_TRUCK                                  :Camion Toffee Wizzowow
-STR_80BA_MIGHTYMOVER_TOY_VAN                                    :Furgone Giocattoli MightyMover
-STR_80BB_POWERNAUGHT_TOY_VAN                                    :Furgone Giocattoli Powernaught
-STR_80BC_WIZZOWOW_TOY_VAN                                       :Furgone Giocattoli Wizzowow
-STR_80BD_MIGHTYMOVER_CANDY_TRUCK                                :Camion Dolci MightyMover
-STR_80BE_POWERNAUGHT_CANDY_TRUCK                                :Camion Dolci Powernaught
-STR_80BF_WIZZOWOW_CANDY_TRUCK                                   :Camion Dolci Wizzowow
-STR_80C0_MIGHTYMOVER_BATTERY_TRUCK                              :Camion Batterie MightyMover
-STR_80C1_POWERNAUGHT_BATTERY_TRUCK                              :Camion Batterie Powernaught
-STR_80C2_WIZZOWOW_BATTERY_TRUCK                                 :Camion Batterie Wizzowow
-STR_80C3_MIGHTYMOVER_FIZZY_DRINK                                :Camion Bibite Friz.MightyMover
-STR_80C4_POWERNAUGHT_FIZZY_DRINK                                :camion Bibite Friz.Powernaught
-STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK                             :Camion Bibite Friz.Wizzowow
-STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK                              :Camion Plastica MightyMover
-STR_80C7_POWERNAUGHT_PLASTIC_TRUCK                              :Camion Plastica Powernaught
-STR_80C8_WIZZOWOW_PLASTIC_TRUCK                                 :Camion Plastica Wizzowow
-STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK                               :Camion Bolle MightyMover
-STR_80CA_POWERNAUGHT_BUBBLE_TRUCK                               :Camion Bolle Powernaught
-STR_80CB_WIZZOWOW_BUBBLE_TRUCK                                  :Camion Bolle Wizzowow
+STR_80A8_BALOGH_FRUIT_TRUCK                                     :Autocarro frutta Balogh
+STR_80A9_UHL_FRUIT_TRUCK                                        :Autocarro frutta Uhl
+STR_80AA_KELLING_FRUIT_TRUCK                                    :Autocarro frutta Kelling
+STR_80AB_BALOGH_RUBBER_TRUCK                                    :Autocarro gomma Balogh
+STR_80AC_UHL_RUBBER_TRUCK                                       :Autocarro gomma Uhl
+STR_80AD_RMT_RUBBER_TRUCK                                       :Autocarro gomma RMT
+STR_80AE_MIGHTYMOVER_SUGAR_TRUCK                                :Autocarro zucchero MightyMover
+STR_80AF_POWERNAUGHT_SUGAR_TRUCK                                :Autocarro zucchero Powernaught
+STR_80B0_WIZZOWOW_SUGAR_TRUCK                                   :Autocarro zucchero Wizzowow
+STR_80B1_MIGHTYMOVER_COLA_TRUCK                                 :Autobotte per Cola MightyMover
+STR_80B2_POWERNAUGHT_COLA_TRUCK                                 :Autobotte per Cola Powernaught
+STR_80B3_WIZZOWOW_COLA_TRUCK                                    :Autobotte per Cola Wizzowow
+STR_80B4_MIGHTYMOVER_COTTON_CANDY                               :Autocarro zucch. filato MightyMover
+STR_80B5_POWERNAUGHT_COTTON_CANDY                               :Autocarro zucch. filato Powernaught
+STR_80B6_WIZZOWOW_COTTON_CANDY_TRUCK                            :Autocarro zucch. filato Wizzowow
+STR_80B7_MIGHTYMOVER_TOFFEE_TRUCK                               :Autocarro toffee MightyMover
+STR_80B8_POWERNAUGHT_TOFFEE_TRUCK                               :Autocarro toffee Powernaught
+STR_80B9_WIZZOWOW_TOFFEE_TRUCK                                  :Autocarro toffee Wizzowow
+STR_80BA_MIGHTYMOVER_TOY_VAN                                    :Furgone giocattoli MightyMover
+STR_80BB_POWERNAUGHT_TOY_VAN                                    :Furgone giocattoli Powernaught
+STR_80BC_WIZZOWOW_TOY_VAN                                       :Furgone giocattoli Wizzowow
+STR_80BD_MIGHTYMOVER_CANDY_TRUCK                                :Autocarro caramelle MightyMover
+STR_80BE_POWERNAUGHT_CANDY_TRUCK                                :Autocarro caramelle Powernaught
+STR_80BF_WIZZOWOW_CANDY_TRUCK                                   :Autocarro caramelle Wizzowow
+STR_80C0_MIGHTYMOVER_BATTERY_TRUCK                              :Carro batterie MightyMover
+STR_80C1_POWERNAUGHT_BATTERY_TRUCK                              :Carro batterie Powernaught
+STR_80C2_WIZZOWOW_BATTERY_TRUCK                                 :Carro batterie Wizzowow
+STR_80C3_MIGHTYMOVER_FIZZY_DRINK                                :Autocarro bibite frizz. MightyMover
+STR_80C4_POWERNAUGHT_FIZZY_DRINK                                :Autocarro bibite frizz. Powernaught
+STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK                             :Autocarro bibite frizz. Wizzowow
+STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK                              :Autocarro plastica MightyMover
+STR_80C7_POWERNAUGHT_PLASTIC_TRUCK                              :Autocarro plastica Powernaught
+STR_80C8_WIZZOWOW_PLASTIC_TRUCK                                 :Autocarro plastica Wizzowow
+STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK                               :Autocarro bollicine MightyMover
+STR_80CA_POWERNAUGHT_BUBBLE_TRUCK                               :Autocarro bollicine Powernaught
+STR_80CB_WIZZOWOW_BUBBLE_TRUCK                                  :Autocarro bollicine Wizzowow
 STR_80CC_MPS_OIL_TANKER                                         :Petroliera MPS
 STR_80CD_CS_INC_OIL_TANKER                                      :Petroliera CS-Inc.
 STR_80CE_MPS_PASSENGER_FERRY                                    :Traghetto MPS
@@ -2440,10 +2462,10 @@
 STR_80D0_BAKEWELL_300_HOVERCRAFT                                :Hovercraft Bakewell 300
 STR_80D1_CHUGGER_CHUG_PASSENGER                                 :Traghetto Chugger-Chug
 STR_80D2_SHIVERSHAKE_PASSENGER_FERRY                            :Traghetto Shivershake
-STR_80D3_YATE_CARGO_SHIP                                        :Nave Mercantile Yate
-STR_80D4_BAKEWELL_CARGO_SHIP                                    :Nave Mercantile Bakewell
-STR_80D5_MIGHTYMOVER_CARGO_SHIP                                 :Nave Mercantile Mightymover
-STR_80D6_POWERNAUT_CARGO_SHIP                                   :Name Mercantile Powernaut
+STR_80D3_YATE_CARGO_SHIP                                        :Mercantile Yate
+STR_80D4_BAKEWELL_CARGO_SHIP                                    :Mercantile Bakewell
+STR_80D5_MIGHTYMOVER_CARGO_SHIP                                 :Mercantile Mightymover
+STR_80D6_POWERNAUT_CARGO_SHIP                                   :Mercantile Powernaut
 STR_80D7_SAMPSON_U52                                            :Sampson U52
 STR_80D8_COLEMAN_COUNT                                          :Coleman Count
 STR_80D9_FFP_DART                                               :FFP Dart
@@ -2485,20 +2507,20 @@
 STR_80FD_TRICARIO_HELICOPTER                                    :Elicottero Tricario
 STR_80FE_GURU_X2_HELICOPTER                                     :Elicottero Guru X2
 STR_80FF_POWERNAUT_HELICOPTER                                   :Elicottero Powernaut
-STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Messaggio dal costruttore del veicolo
-STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Abbiamo appena progettato un nuovo {STRING} - Le interessa un'anno di esclusiva sull'uso del veicolo? Così possiamo vedere come va prima di renderlo disponibile al mercato?
-STR_8102_RAILROAD_LOCOMOTIVE                                    :locomotiva
-STR_8103_ROAD_VEHICLE                                           :veicolo stradale
-STR_8104_AIRCRAFT                                               :aereo
-STR_8105_SHIP                                                   :nave
-STR_8106_MONORAIL_LOCOMOTIVE                                    :motrice monorotaia
-STR_8107_MAGLEV_LOCOMOTIVE                                      :motrice maglev
+STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Messaggio da un costruttore di veicoli
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Abbiamo appena progettato un{G "" a} nuov{G o a} {STRING} - È interessato ad un anno di uso esclusivo di questo veicolo, in modo da permetterci di valutarne le prestazioni prima di renderlo disponibile sul mercato?
+STR_8102_RAILROAD_LOCOMOTIVE                                    :{G=f}locomotiva
+STR_8103_ROAD_VEHICLE                                           :{G=m}automezzo
+STR_8104_AIRCRAFT                                               :{G=m}aeromobile
+STR_8105_SHIP                                                   :{G=f}nave
+STR_8106_MONORAIL_LOCOMOTIVE                                    :{G=f}motrice monorotaia
+STR_8107_MAGLEV_LOCOMOTIVE                                      :{G=f}motrice maglev
 
 ##id 0x8800
-STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Deposito Treni
-STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}I cittadini festeggiano . . .{}Primo treno arrivato a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Details)
-STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Treno in mezzo
+STR_8800_TRAIN_DEPOT                                            :{WHITE}Deposito ferroviario di {TOWN}
+STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}I cittadini festeggiano . . .{}Il primo treno arriva a {STATION}!
+STR_8802_DETAILS                                                :{WHITE}{STRING} (Dettagli)
+STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Treno di mezzo
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8806_GO_TO                                                  :Vai a {STATION}
@@ -2777,7 +2799,7 @@
 STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Non puoi convertire la nave...
 STR_9842_REFITTABLE                                             :(convertibile)
 STR_GO_TO_SHIP_DEPOT                                            :Vai a {TOWN} Deposito Navale
-SERVICE_AT_SHIP_DEPOT                                           :Manutenzione a {TOWN} Deposito Navale
+SERVICE_AT_SHIP_DEPOT                                           :Manutenzione al Deposito navale di {TOWN}
 
 ##id 0xA000
 STR_A000_AIRPORTS                                               :{WHITE}Aeroporti
@@ -2849,7 +2871,7 @@
 STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Nuova capacità: {GOLD}{STRING}{}{BLACK}Costo conversione: {GOLD}{CURRENCY}
 STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}Non puoi convertire l'aereo...
 STR_GO_TO_AIRPORT_HANGAR                                        :Vai a {STATION} Hangar
-SERVICE_AT_AIRPORT_HANGAR                                       :Manutenzione a {STATION} Hangar
+SERVICE_AT_AIRPORT_HANGAR                                       :Manutenzione all'Hangar di {STATION}
 
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Disastro Zeppelin a {STATION}!
@@ -2914,7 +2936,7 @@
 STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Parametri invalidi per {STRING}: parametri {STRING} ({NUM})
 STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} deve essere caricato prima di {STRING}.
 STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} deve essere caricato dopo {STRING}.
-STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :il file GRF se questo era progettato per essere tradotto
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :il file GRF che era progettato per tradurre
 
 STR_NEWGRF_ADD                                                  :{BLACK}Aggiungi
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Aggiungi un file NewGRF alla lista
@@ -3012,7 +3034,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}La autosostituzione mantiene la lunghezza del treno togliendo vagoni (iniziando dalla testa), se la sostituzione della locomotiva lo farebbe piu lungo.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Sostituzione: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} FEATURE SPERIMENTALE {}Scambia tra loro le finestre di sostituizione locomotive e vagoni. {}La sostituizione del vagone avverrà solo se il nuovo vagone può essere convertito nello stesso tipo di merce del  vecchio vagone. Questo controllo viene fatto per ogni vagone sostituito.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Non puoi costruire la locomotiva
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Il veicolo non è disponibile
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}L'automezzo non è disponibile
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}La nave non è disponibile
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}L'aeromobile non è disponibile
 
 STR_ENGINES                                                     :Locomotive
 STR_WAGONS                                                      :Vagoni
@@ -3149,3 +3174,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Crediti Trasferiti: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...questa è una strada di proprietà della città
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...strada rivolta nella direzione sbagliata
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opzioni trasparenza
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Attiva/disattiva la trasparenza dei nomi delle stazioni
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Attiva/disattiva la trasparenza degli alberi
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Attiva/disattiva la trasparenza degli edifici
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Attiva/disattiva la trasparenza delle industrie
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Attiva/disattiva la trasparenza delle strutture edificabili come stazioni, depositi, waypoint e catenarie
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Attiva/disattiva la trasparenza dei ponti
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Attiva/disattiva la trasparenza di strutture come fari, antenne e altri futuri oggetti decorativi
--- a/src/lang/japanese.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/japanese.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :世界の地図
 STR_EXTRA_VIEW_PORT                                             :特別ビューア
 STR_SIGN_LIST                                                   :標示のリスト
+STR_TRANSPARENCY_OPTIONS                                        :透明性の設定
 STR_02DF_TOWN_DIRECTORY                                         :市町村のリスト
 STR_TOWN_POPULATION                                             :{BLACK}世界人口:{COMMA}人
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}ビューア {COMMA}
@@ -3010,7 +3011,6 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}自動交換によって列車の長さが長くなる場合は、列車の長さを保守するには客車/貨車を取り除くことができます。列車の先頭から開始します。
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}交換:{ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}実験的機能{}機関車/貨車のウィンドウに切り替えます。{}貨車交換は新貨車が旧貨車と同様の貨物種類に再装備できるときのみに行います。自動交換中に各貨車を検査します。
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}機関車が購入できません
 
 STR_ENGINES                                                     :機関車
 STR_WAGONS                                                      :貨車
@@ -3146,3 +3146,14 @@
 
 ########
 
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...町有の道路だからです
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...道路の配置に合わせません
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}透明性の設定
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}駅名の透明性を入/切
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}木の透明性を入/切
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}市町村の建物の透明性を入/切
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}工業の透明性を入/切
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}交通社所有の建物などの透明性を入/切
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}橋の透明性を入/切
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}灯台、送信機などの透明性を入/切
--- a/src/lang/korean.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/korean.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -803,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :전체 지도 보기
 STR_EXTRA_VIEW_PORT                                             :추가 뷰포인트
 STR_SIGN_LIST                                                   :팻말 목록
+STR_TRANSPARENCY_OPTIONS                                        :투명 옵션
 STR_02DF_TOWN_DIRECTORY                                         :도시 목록
 STR_TOWN_POPULATION                                             :{BLACK}세계 인구: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}뷰포인트 {COMMA}
@@ -3012,7 +3013,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}자동교체시에 열차가 기존보다 길어지면 화물차를 제거함으로써 교체시 달라지는 열차의 길이를 같게 조정합니다 (앞쪽부터 시작됨)
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}교체중: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} 실험적 기능! {}기관차/화물차 교체 창을 번갈아 띄웁니다.{}화물차 교체는 예전 화물차가 싣던 화물을 실을 수 있도록 개조할 수 있는 새로운 화물차에만 성공할 것입니다. 실제 교체가 이루어질 때 각 화물차에 체크되었습니다.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}기관차를 생성할 수 없습니다!
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}열차는 불가능합니다
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}차량은 불가능합니다
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}선박은 불가능합니다
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}항공기는 불가능합니다
 
 STR_ENGINES                                                     :기관차
 STR_WAGONS                                                      :화물차
@@ -3149,3 +3153,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}환승 단위: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...여기는 마을 소유의 도로 입니다
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...도로가 잘못된 반향을 향하고 있습니다
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}투명 옵션
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}역이름 팻말 투명 전환
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}나무 투명 전환
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}집 투명 전환
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}산업시설 투명 전환
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}정거장, 차량기지, 웨이포인트, 연결고리와 같은 건설 가능한 것들에 대한 투명 전환
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}다리 투명 전환
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}등대와 안테나와 같은 구조물 투명 전환
--- a/src/lang/lithuanian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/lithuanian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -3017,7 +3017,6 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Pakeitimo metu išlaikyti traukinio ilgį atjungiant vagonus (pradedant juo priekio), jeigu pakeitus garvežį traukinys pailgėtų.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Keicima: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EKSPERIMENTINĖ GALIMYBĖ {}Pereidinėti tarp garvežių ir vagonų pakeitimo langų.{}Vagonai bus pakeičiami tik tada, jeigu naujasis vagonas galės gabenti tą patį krovinio tipą kaip ir senasis. Tai atliekama patikrinant kiekvieną vagoną jo keitimo metu.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Variklio neimanoma pagaminti
 
 STR_ENGINES                                                     :Varikliai
 STR_WAGONS                                                      :Vagonai
--- a/src/lang/norwegian_bokmal.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -280,6 +280,7 @@
 STR_OSNAME_MORPHOS                                              :MorphOS
 STR_OSNAME_AMIGAOS                                              :AmigaOS
 STR_OSNAME_OS2                                                  :OS/2
+STR_OSNAME_SUNOS                                                :SunOS
 
 STR_013B_OWNED_BY                                               :{WHITE}...eies av {STRING}
 STR_013C_CARGO                                                  :{BLACK}Last
@@ -590,6 +591,7 @@
 STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Ankommst av første kjøretøy på motstanders stasjon
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Ulykker/katastrofer
 STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Firmainformasjon
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Åpninger / Stengninger av industrier
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Økonomiske endringer
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Råd/informasjon om spillers kjøretøy
 STR_020C_NEW_VEHICLES                                           :{YELLOW}Nye kjøretøy
@@ -1087,6 +1089,11 @@
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Eget firma
 STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Alle firmaer
 STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Foretrekk lagchat med <ENTER>: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Rullehjulets funksjon: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Zoom kartet
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Rull kartet
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Av
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rullehjulets hastighet på kartet: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks antall tog per spiller: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks antall kjøretøy per spiller: {ORANGE}{STRING}
@@ -2630,6 +2637,9 @@
 STR_TRAIN_NO_POWER                                              :{RED}Ingen strøm
 STR_TRAIN_START_NO_CATENARY                                     :Dette sporet mangler et kjede, så toget kan ikke starte
 
+STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Ny {STRING} nå tilgjengelig!
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING} Nå tilgjengelig!  -  {STRING}
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Kjøretøy i veien
@@ -2901,6 +2911,7 @@
 STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Ugyldig parameter for {STRING}: parameter {STRING} ({NUM})
 STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} må være lastet før {STRING}.
 STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} må være lastet etter {STRING}.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :GRF filen den var laget for å oversette
 
 STR_NEWGRF_ADD                                                  :{BLACK}Legg til
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Legg en ny NewGRF-fil til listen
@@ -2998,7 +3009,6 @@
 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_ENGINE_NOT_BUILDABLE                                        :{WHITE}Motoren kan ikke bygges
 
 STR_ENGINES                                                     :Motorer
 STR_WAGONS                                                      :Vogner
@@ -3134,3 +3144,4 @@
 
 ########
 
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Overfør kreditt: {LTBLUE}{CURRENCY}
--- a/src/lang/norwegian_nynorsk.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -728,6 +728,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Plasser fyrtårn
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Plasser radiosendar
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Definer ørkenområde.{}Trykk og held inne CTRL for å fjerne det
+STR_CREATE_LAKE                                                 :{BLACK}Definer vassområde.{}Lag ein kanal. Viss CTRL er halde nede ved havnivå, vil vatnet i staden fløyme over omgivnadene
 STR_0290_DELETE                                                 :{BLACK}Slett
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Slett byen heilt
 STR_0292_SAVE_SCENARIO                                          :Lagre scenario
@@ -802,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Verdskart
 STR_EXTRA_VIEW_PORT                                             :Ekstra vindauge
 STR_SIGN_LIST                                                   :Skiltliste
+STR_TRANSPARENCY_OPTIONS                                        :Gjennomsiktigheitsinnstillingar
 STR_02DF_TOWN_DIRECTORY                                         :Byoversikt
 STR_TOWN_POPULATION                                             :{BLACK}Verdsinnbyggjartal: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vindauge {COMMA}
@@ -1093,6 +1095,8 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Funksjonen til scrollhjulet: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Zoom kart
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll kart
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Av
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Fart på rullehjul: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks antal tog per speler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks antal køyretøy per spelar: {ORANGE}{STRING}
@@ -3009,7 +3013,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Lat den automatiske utskiftinga behalde lengda på toget ved å fjerne vogner (frå første vogn), dersom utskiftinga gjer 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 vognvindauget.{} Utskiftinga av vogner skjer berre dersom den nye vogna kan ha same last som den nye.  Dette vert sjekka når skiftet skjer.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Motoren kan ikkje byggjast
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Køyretøyet er ikkje tilgjengeleg
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Køyretøyet er ikkje tilgjengeleg
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Skipet er ikkje tilgjengeleg
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Flyet er ikkje tilgjengeleg
 
 STR_ENGINES                                                     :Motorar
 STR_WAGONS                                                      :Vogner
@@ -3146,3 +3153,5 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Overfør kreditt: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...denne vegen eigast av ein by
+
--- a/src/lang/polish.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/polish.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -889,6 +889,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa świata
 STR_EXTRA_VIEW_PORT                                             :Dodatkowy podgląd
 STR_SIGN_LIST                                                   :Lista tablic
+STR_TRANSPARENCY_OPTIONS                                        :Opcje przeźroczystości
 STR_02DF_TOWN_DIRECTORY                                         :Lista miast
 STR_TOWN_POPULATION                                             :{BLACK}Populacja świata: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Podgląd {COMMA}
@@ -3140,7 +3141,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Autowymiana zachowuje długość pociągu poprzez usuwanie wagonów (począwszy od początku), jeśli wymiana lokomotywy spowoduje wydłużenie pociągu.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Zastępowanie: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EKSPERYMENTALNE NARZEDZIE {}Przejdź pomiędzy oknami zamiany lokomotyw i wagonów.{}Wymiana wagonu nastąpi tylko jeśli nowy wagon może być przebudowany do przewożenia tego samego towaru co poprzedni. Każdy wagon pociągu jest sprawdzany podczas procesu zamiany.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Lokomotywa nie może być zbudowana
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Pojazd nie jest dostępny
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Pojazd nie jest dostępny
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Statek nie jest dostępny
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Samolot nie jest dostępny
 
 STR_ENGINES                                                     :Lokomotywy
 STR_WAGONS                                                      :Wagony
@@ -3188,7 +3192,7 @@
 STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Moc: {GOLD}+{POWER}{BLACK} Waga: {GOLD}+{WEIGHT_S}
 STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Można przebudować na: {GOLD}
 STR_PURCHASE_INFO_ALL_TYPES                                     :Wszystkie typy towarów
-STR_PURCHASE_INFO_ALL_BUT                                       :Wszystko oprócz {GOLD}}
+STR_PURCHASE_INFO_ALL_BUT                                       :Wszystko oprócz {GOLD}
 STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Max. Siła Pociągowa: {GOLD}{FORCE}
 
 ########### String for New Landscape Generator
@@ -3232,7 +3236,7 @@
 STR_SETTINGUP_GAME                                              :{BLACK}Ustawianie gry
 STR_PREPARING_TILELOOP                                          :{BLACK}Uaktywnianie pól
 STR_PREPARING_GAME                                              :{BLACK}Przygotowywanie gry
-STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Ta akcja zmieniła poziom trudności na "własny"
+STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Zmieniono poziom trudności na "własny"
 STR_SE_FLAT_WORLD                                               :{WHITE}Płaski świat
 STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Stwórz płaski świat
 STR_SE_RANDOM_LAND                                              :{WHITE}Losowy teren
@@ -3276,3 +3280,15 @@
 
 ########
 
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Wartość transferu: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...ta droga należy do miasta
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...droga jest zorientowana w złym kierunku
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opcje Przeźroczystości
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Przełącz przeźroczystość nazw stacji
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Przełącz przeźroczystość drzew
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Przełącz przeźroczystość budynków miejskich
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Przełącz przeźroczystość przedsiębiorstw
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Przełącz przeźroczystość infrastruktury takiej jak stacje, zajezdnie, punkty kontrolne i trakcja elektryczna
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Przełącz przeźroczystość mostów
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Przełącz przeźroczystość obiektów takich jak latarnie morskie i nadajniki, być może w przyszłości dodatki graficzne
--- a/src/lang/portuguese.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/portuguese.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa do mundo
 STR_EXTRA_VIEW_PORT                                             :Visualizador extra
 STR_SIGN_LIST                                                   :Lista de sinais
+STR_TRANSPARENCY_OPTIONS                                        :Opções de Transparência
 STR_02DF_TOWN_DIRECTORY                                         :Lista de cidades
 STR_TOWN_POPULATION                                             :{BLACK}População Mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Visualizador {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Forçar a substituição automática a manter o comprimento do comboio, removendo vagões (do início), nas situações em que a substituição da locomotiva resultar num comboio maior.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Trocando: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} FUNCIONALIDADE EXPERIMENTAL{}Alternar entre a janela de substituição de locomotivas e a janela de substituição de vagões.{}A substituição de vagões só ocorrerá se o novo vagão puder ser reconvertido para o mesmo tipo de carga que o vagão antigo. Esta verificação ocorre para cada vagão, durante a substituição.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Locomotiva não construível
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Veículo não está disponível
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Veículo não está disponível
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Barco não está disponível
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aeronave não está disponível
 
 STR_ENGINES                                                     :Locomotivas
 STR_WAGONS                                                      :Vagões
@@ -3148,3 +3152,5 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Créditos de Transferência: {LTBLUE}{CURRENCY}
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opções de Transparência
--- a/src/lang/romanian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/romanian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -280,6 +280,7 @@
 STR_OSNAME_MORPHOS                                              :MorphOS
 STR_OSNAME_AMIGAOS                                              :AmigaOS
 STR_OSNAME_OS2                                                  :OS/2
+STR_OSNAME_SUNOS                                                :SunOS
 
 STR_013B_OWNED_BY                                               :{WHITE}...apartine companiei {STRING}
 STR_013C_CARGO                                                  :{BLACK}Încãrcãturã
@@ -391,6 +392,7 @@
 STR_ENGINE_SORT_INTRO_DATE                                      :Data lansarii
 STR_ENGINE_SORT_RUNNING_COST                                    :Cost exploatare
 STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Cost exploatare/putere
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Capacitate incarcatura
 STR_NO_WAITING_CARGO                                            :{BLACK}Nu este în asteptare nici un fel de încãrcãturã
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Alege toate facilitãtile
 STR_SELECT_ALL_TYPES                                            :{BLACK}Alege toate tipurile de încãrcãturi (inclusiv încãrcãturile care nu sunt în asteptare)
@@ -589,6 +591,7 @@
 STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Sosirea primului vehicul la una din statiile competitorilor
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Accidente/dezastre
 STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Informatii despre companie
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Deschidere / inchidere industrii
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Schimbãri economice
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Sfaturi/informatii despre vehiculele tale
 STR_020C_NEW_VEHICLES                                           :{YELLOW}Vehicule noi
@@ -724,6 +727,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Plaseazã far
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Plaseazã transmitãtor
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Defineste suprafata de desert.{}Apasã si mentine apasat CTRL pentru a o sterge
+STR_CREATE_LAKE                                                 :{BLACK}Defineste zona apei.{}Creeaza un canal, mai putin cand CTRL este apasat la nivelul marii, cand va inunda, in loc, imprejurimile
 STR_0290_DELETE                                                 :{BLACK}Sterge
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Sterge acest oras
 STR_0292_SAVE_SCENARIO                                          :Salveazã scenariul
@@ -779,7 +783,7 @@
 STR_02D0_FULL_ANIMATION                                         :{SETX 12}Animatie completã
 STR_02D2_FULL_DETAIL                                            :{SETX 12}Detalii grafice complete
 STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Peisaj transparent (X)
-STR_TRANSPARENT_SIGNS                                           :{SETX 12}Numele statiilor transparente
+STR_TRANSPARENT_SIGNS                                           :{SETX 12}Semne statii, transparente
 ############ range ends here
 
 ############ range for menu starts
@@ -798,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Harta lumii (F4)
 STR_EXTRA_VIEW_PORT                                             :Extra ecran
 STR_SIGN_LIST                                                   :Lista de semne
+STR_TRANSPARENCY_OPTIONS                                        :Optiuni transparenta
 STR_02DF_TOWN_DIRECTORY                                         :Lista oraselor
 STR_TOWN_POPULATION                                             :{BLACK}Populatia totala: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Ecran{COMMA}
@@ -928,7 +933,7 @@
 STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_OPTIONS_LANG_TIP                                            :{BLACK}Alege limba în care doresti afisatã interfata
 
-STR_OPTIONS_FULLSCREEN                                          :{BLACK}Mod
+STR_OPTIONS_FULLSCREEN                                          :{BLACK}Ecran intreg
 STR_OPTIONS_FULLSCREEN_TIP                                      :{BLACK}Bifeaza aceasta casuta pentru a juca in modul
 
 STR_OPTIONS_RES                                                 :{BLACK}Rezolutia ecranului
@@ -1020,7 +1025,7 @@
 STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Interzice trenurilor si navelor sa faca intoarceri de 90 de grade: {ORANGE}{STRING} {LTBLUE} (necesita NPF)
 STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Uneste gãrile alãturate: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Pãrãseste statia când orice tip de marfã este 'full load': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Foloseste algoritmul de LOAD imbunatatit: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Foloseste algoritm incarcare imbunatatit: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Incarca vehiculele gradual: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Inflatia: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Livreazã marfa doar in statiile unde aceasta este ceruta: {ORANGE}{STRING}
@@ -1081,16 +1086,21 @@
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Conecteaza bara de instrumente pentru peisaj cu cea de constructii feroviare/auto/aeriane: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Cand faci scroll cu mouse-ul muta ecranul in directia opusã: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Arata o bara de unelte de masuratori la folosirea uneltelor de constructie: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Arata unifromete companiilor: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Arata uniformele companiilor: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Niciunul
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Propria companie
 STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Toate companiile
 STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Echipa preferata pentru chat <ENTER>: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Functia rotii mouse-ului: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Focus harta
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Ruleaza harta
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :inactiva
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Viteza harta la rotita mouse: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Nr. max. de trenuri pentru un jucãtor: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Nr. max. de trenuri per jucãtor: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Nr. max. de autovehicule pentru un jucãtor: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Nr. max. de aeronave pentru un jucãtor: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Nr. max. de nave pentru un jucãtor: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Nr. max. de nave per jucãtor: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Dezactiveazã trenurile pentru jucãtorii PC: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Dezactiveazã autovehiculele pentru jucãtorii PC: {ORANGE}{STRING}
@@ -1204,6 +1214,7 @@
 STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Planteazã arbori din diverse specii la întâmplare
 
 STR_CANT_BUILD_CANALS                                           :{WHITE}Nu pot construi un canal aici...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Construieste canale.
 STR_LANDINFO_CANAL                                              :Canal
 
 STR_CANT_BUILD_LOCKS                                            :{WHITE}Nu pot construi o ecluzã aici...
@@ -2601,7 +2612,7 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Introdu o comandã înaintea celei selectate sau adaugã o comandã la sfârsitul listei
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forteazã trenul sã astepte la destinatia selectatã pânã la umplerea la capacitate maximã
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forteazã trenul sã descarce marfa la destinatia selectatã
-STR_SERVICE_HINT                                                :{BLACK}Sãri peste aceastã comandã dacã nu este necesar un service
+STR_SERVICE_HINT                                                :{BLACK}Sari peste aceastã comandã dacã nu este necesar un service
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cost: {CURRENCY} Greutate: {WEIGHT_S}{}Vitezã: {VELOCITY}  Putere: {POWER}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Defectiune
 STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Vechimea: {LTBLUE}{STRING}{BLACK}   Cost de rulare: {LTBLUE}{CURRENCY}/an
@@ -2903,6 +2914,7 @@
 STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Parametru invalid pentru {STRING}: parametrul {STRING} ({NUM})
 STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} trebuie sa fie incarcat inaintea {STRING}.
 STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} trebuie sa fie incarcat dupa {STRING}.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :fisierul GRF conceput pentru traducere
 
 STR_NEWGRF_ADD                                                  :{BLACK}Adauga
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Adauga un fisier NewGRF in lista
@@ -3000,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Fã optiunea de autoînlocuire sã pãstreze identicã lungimea unui tren prin eliminarea vagoanelor (începând din fatã), dacã înlocuirea motorului ar face trenul mai lung.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Înlocuire: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} ELEMENT EXPERIMENTAL {}Comutã între ferestrele de ]nlocuire motoare si vagoane.{}Înlocuirea de vagoane va fi efectuatã numai dacã noul vagon poate transporta acelasi tip de încãrcãturã ca cel vechi. Aceast lucru este verificat pentru fiecare vagon atunci când este fãcutã înlocuirea efectivã.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Motorul nu poate fi construit
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehiculul nu este disponibil
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehiculul nu este disponibil
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Vasul nu este disponibil
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aeronava nu este disponibila
 
 STR_ENGINES                                                     :Motoare
 STR_WAGONS                                                      :Vagoane
@@ -3137,3 +3152,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transfera Credit: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...drum in proprietatea orasului
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...drum orientat in directia gresita
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Optiuni transparenta
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Comuta transparenta pentru semnele de statii
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Comuta transparenta pentru copaci
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Comuta transparenta pentru case
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Comuta transparenta pentru industrii
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Comuta transparenta pentru construibile, precum statii, depouri, indicatoare si linii electrificate
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Comuta transparenta pentru poduri
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Comuta transparenta pentru structuri ca farurile si antenele - poate in viitor, pentru efect
--- a/src/lang/russian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/russian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -804,6 +804,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта мира
 STR_EXTRA_VIEW_PORT                                             :Доп. окно просмотра
 STR_SIGN_LIST                                                   :Список меток
+STR_TRANSPARENCY_OPTIONS                                        :Настройки прозрачности.
 STR_02DF_TOWN_DIRECTORY                                         :Список городов
 STR_TOWN_POPULATION                                             :{BLACK}Население: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Окно просмотра {COMMA}
@@ -2914,18 +2915,19 @@
 STR_NEWGRF_FILENAME                                             :{BLACK}Имя файла: {SILVER}{STRING}
 STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
 STR_NEWGRF_MD5SUM                                               :{BLACK}Сумма MD5: {SILVER}{STRING}
-STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Вы хотите сделать изменения в уже запущенной игре - это может привести к ошибке игры, и ее вылету.{}Вы абсолютно уверены в том, что хотите сделать?
+STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Вы хотите сделать изменения в уже запущенной игре - это может привести к сбоям и игровым несоответствиям.{}Вы абсолютно уверены в том, что хотите сделать?
 
 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_VERSION_NUMBER                                 :{STRING} не будет работать с версией TTDPatch, сообщенной OpenTTD.
-STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{STRING} для {STRING}-версии TTD.
-STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} сделан для использования в {STRING}
+STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :Файл {STRING} требует {STRING}-версию TTD.
+STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} сделан для использования совместно с {STRING}
 STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Неверный параметр {STRING}: параметр {STRING} ({NUM})
 STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} должен быть загружен перед {STRING}.
 STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} должен быть загружен после {STRING}.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :файл GRF, который им переводится.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Добавить
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Добавить файл NewGRF в список
@@ -3023,7 +3025,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Разрешить при автозамене сохранять длину поездов удалением вагонов (начиная с головы поезда), если при автозамене локомотив увеличит длину поезда.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Заменяем: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}ЭКСПЕРИМЕНТАЛЬНО {}Переключение между окнами замены локомотивов и вагонов.{}Автозамена вагонов производится только в том случае, если совпадает тип перевозимых грузов. Эта проверка производится для каждого вагона во время автозамены.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Нельзя построить локомотив
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Локомотив недоступен
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Автотранспорт недоступен
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Корабль недоступен
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Авиатранспорт недоступен
 
 STR_ENGINES                                                     :Локомотивы
 STR_WAGONS                                                      :Вагоны
@@ -3160,3 +3165,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Выручка перевозки: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...эта дорога принадлежит городу
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...дорога неправильного направления
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Настройки прозрачности.
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Переключить прозрачность значков станций.
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Переключить прозрачность деревьев.
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Переключить прозрачность зданий.
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Переключить прозрачность зданий промышленности.
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Переключить прозрачность зданий, которые можно строить игроком. Например -- станции, депо, точки пути и столбы для электричества.
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Переключить прозрачность мостов
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Переключить прозрачность зданий, вроде антенн и маяков.
--- a/src/lang/simplified_chinese.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :世界地图
 STR_EXTRA_VIEW_PORT                                             :额外视点
 STR_SIGN_LIST                                                   :标志列表
+STR_TRANSPARENCY_OPTIONS                                        :透明选项
 STR_02DF_TOWN_DIRECTORY                                         :城镇地图
 STR_TOWN_POPULATION                                             :{BLACK}世界人口:{COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}视点 {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}当引擎升级可能造成列车变长时,自动去掉最开始的若干挂车以保证列车长度不变。
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}替换项目: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}试验功能:{}可以切换引擎/挂车替换模式。{}只有当新的挂车可以改装成与原始挂车装载货物类型相同的时候,才能替换挂车。当替换过程进行时,系统将自动检查每节挂车的类型。
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}不能建造这种引擎。
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}列车不可用
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}车辆不可用
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}船只不可用
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}飞机不可用
 
 STR_ENGINES                                                     :引擎
 STR_WAGONS                                                      :挂车
@@ -3148,3 +3152,8 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}转运评分: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}这是一条城镇所属的道路
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}道路方向不对
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}透明选项
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}调整站牌的透明度
--- a/src/lang/slovak.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/slovak.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -866,6 +866,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa sveta
 STR_EXTRA_VIEW_PORT                                             :Dalsi pohlad
 STR_SIGN_LIST                                                   :Zoznam popisov
+STR_TRANSPARENCY_OPTIONS                                        :Nastavenia priehladnosti
 STR_02DF_TOWN_DIRECTORY                                         :Zoznam miest
 STR_TOWN_POPULATION                                             :{BLACK}Svetova populacia: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pohlad {COMMA}
@@ -3075,7 +3076,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Funkcia automatickeho vylepsovania vlakov moze udrzovat rovnaku dlzku vlakov odstranovanim vagonov (od zaciatku vlakov), pokial by zmena rusna vlak predlzila.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Vymena: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTALNA VLASTNOST {}Prepne medzi oknami na vymenu lokomotiv a vagonov.{}Vagon sa vymeni, len ked je nový vagon schopny vozit rovnaky naklad, ako ten stary. Toto sa overuje pre kazdy vagon.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Lokomotiva sa nevyraba
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozidlo nie je dostupné
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozidlo nie je dostupné
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Lod nie je dostupná
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Lietadlo nie je dostupné
 
 STR_ENGINES                                                     :Lokomotívy
 STR_WAGONS                                                      :Vagonov
@@ -3212,3 +3216,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transfer kredity: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}... cesta vlastnená mestom
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}... nesprávna orientácia cesty
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Nastavenia priehladnosti
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Prepnút priehladnost názvov staníc
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Prepnút priehladnost stromov
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Prepnút priehladnost domov
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Prepnút priehladnost priemyslu
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Prepnút priehladnost staníc, garáží, tratí, ...
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Prepnút priehladnost mostov
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Prepnút priehladnost objektov ako sú majáky a antény
--- a/src/lang/slovenian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/slovenian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -769,6 +769,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Postavi svetilnik
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Postavi oddajnik
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Določi območja puščave.{}Pritisni in drži CTRL za odstranitev
+STR_CREATE_LAKE                                                 :{BLACK}Določi področje vode.{}Naredi kanal, razen če je pritisnjen CTRL na morski gladini, ko bo poplavilo okolico.
 STR_0290_DELETE                                                 :{BLACK}Izbriši
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Popolnoma izbriši mesto
 STR_0292_SAVE_SCENARIO                                          :Shrani scenarij
@@ -843,6 +844,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Zemljevid sveta
 STR_EXTRA_VIEW_PORT                                             :Dodaten pogled
 STR_SIGN_LIST                                                   :Seznam napisov
+STR_TRANSPARENCY_OPTIONS                                        :Nastavitve prozornega pogleda
 STR_02DF_TOWN_DIRECTORY                                         :Imenik mest
 STR_TOWN_POPULATION                                             :{BLACK}Svetovno prebivalstvo: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pogled {COMMA}
@@ -1254,6 +1256,7 @@
 STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Postavi drevesa naključne vrste
 
 STR_CANT_BUILD_CANALS                                           :{WHITE}Ni mogoče zgraditi kanalov tukaj ...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Zgradi kanale.
 STR_LANDINFO_CANAL                                              :Kanal
 
 STR_CANT_BUILD_LOCKS                                            :{WHITE}Ni mogoče zgraditi zapornic tukaj ...
@@ -3089,7 +3092,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Dovoli samozamenjavi, da z odstranitvijo vagonov, začenši na začetku, ohrani isto dolžino vlaka, če bi ga menjava lokomotive podaljšala.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Zamenjuje: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} POSKUSNA MOŽNOST {}Preklop med okni za menjavo lokomotiv in vagonov.{}Zamenjava vagonov je možna edino, če je lahko drugi tip vagona predelan za prevoz iste vrste tovora, kot prvi. To je preverjeno za vsak vagon, ko se izvrši zamenjava,
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Lokomotive ni moč zgraditi
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozilo ni na voljo
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozilo ni na voljo
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Ladja ni na voljo
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Letalo ni na voljo
 
 STR_ENGINES                                                     :Lokomotive
 STR_WAGONS                                                      :Vagoni
@@ -3226,3 +3232,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Prenesi kredite: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...ta cesta je last mesta
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...cesta je obrnjena napačno
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Nastavitve prozornega pogleda
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Prozoren ali poln pogled imen postaj
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Prozoren ali poln pogled dreves
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Prozoren ali navaden pogled hiš
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Prozoren ali navaden pogled industrij
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Prozoren ali navaden pogled ostalih objektov kot so postaje, garaže...
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Prozoren ali navaden pogled mostov
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Prozoren ali navaden pogled struktur kot so antene, svetilniki...
--- a/src/lang/spanish.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/spanish.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -803,6 +803,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa del mundo
 STR_EXTRA_VIEW_PORT                                             :Punto de vista extra
 STR_SIGN_LIST                                                   :Lista de señales
+STR_TRANSPARENCY_OPTIONS                                        :Opciones de transparencia
 STR_02DF_TOWN_DIRECTORY                                         :Listado de poblaciones
 STR_TOWN_POPULATION                                             :{BLACK}Población mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vista {COMMA}
@@ -3012,7 +3013,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Hacer que el cambio automático mantenga la longitud del tren quitando vagones (empezando por adelante), si el cambio de locomotora produce un tren más largo.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Reemplazando: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} FUNCIÓN EXPERIMENTAL {}Cambia entre las ventanas de cambio de vagón y locomotora.{}Los cambios de vagón solo se harán si el nuevo vagón puede ser reparado para transportar el mismo tipo de carga que el anterior. Está marcado para cada vagón cuando el cambio actual se realiza.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}No es posible construir este motor
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehículo no disponible
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vehículo no disponible
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Barco no disponible
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aeronave no disponible
 
 STR_ENGINES                                                     :Motores
 STR_WAGONS                                                      :Vagones
@@ -3149,3 +3153,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Transferir Créditos: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...esta es una carretera propiedad de una ciudad
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...revestimientos del camino en la dirección incorrecta
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opciones de Transparencia
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Activar transparencia para las señales de estaciones
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Activar transparencia para los árboles
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Activar transparencia para las casas
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Activar transparencia para las industrias
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Activar transparencias para construcciones como estaciones, depósitos, puntos de paso, etc.
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Activar transparencias para puentes
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Activar transparencias para estructuras como faros, antenas, etc.
--- a/src/lang/swedish.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/swedish.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -3011,7 +3011,6 @@
 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_ENGINE_NOT_BUILDABLE                                        :{WHITE}Loket går inte att bygga
 
 STR_ENGINES                                                     :Lok
 STR_WAGONS                                                      :Vagnar
--- a/src/lang/traditional_chinese.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -282,11 +282,11 @@
 STR_OSNAME_OS2                                                  :OS/2
 STR_OSNAME_SUNOS                                                :SunOS
 
-STR_013B_OWNED_BY                                               :{WHITE}...已被{STRING}擁有
+STR_013B_OWNED_BY                                               :{WHITE}...{STRING} 所有
 STR_013C_CARGO                                                  :{BLACK}貨物
 STR_013D_INFORMATION                                            :{BLACK}資訊
 STR_013E_CAPACITIES                                             :{BLACK}載量
-STR_013E_TOTAL_CARGO                                            :{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}此列車的總載量:
@@ -453,9 +453,9 @@
 STR_0187_OPTIONS                                                :{BLACK}選項
 STR_0188                                                        :{BLACK}{SMALLUPARROW}
 STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
-STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}不能更改維修週期...
+STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}不能更改檢修週期...
 STR_018B_CLOSE_WINDOW                                           :{BLACK}關閉視窗
-STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}視窗標題 - 拖曳這裏以移動視窗
+STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}視窗標題 - 點此拖曳可移動視窗
 STR_STICKY_BUTTON                                               :{BLACK}「關閉所有視窗」不會關閉本視窗
 STR_RESIZE_BUTTON                                               :{BLACK}點按拖放更改視窗大小
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}跳到預設儲存檔目錄
@@ -464,7 +464,7 @@
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}上昇土地上的一角
 STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}捲軸 - 上下捲動清單
 STR_HSCROLL_BAR_SCROLLS_LIST                                    :{BLACK}捲動棒 - 左右捲動清單
-STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}於地圖上顯示地形
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}於地圖上顯示地形輪廓
 STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}於地圖上顯示交通公具
 STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}於地圖上顯示各種工業
 STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}於地圖上顯示運輸路線
@@ -727,7 +727,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}建立燈塔
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}建立發射站
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}定義沙漠區。{}請按住 CTRL 移除
-STR_CREATE_LAKE                                                 :{BLACK}劃出湖泊範圍。{}開鑿運河。在海平面上按 CTRL 鍵則會淹沫週遭土地
+STR_CREATE_LAKE                                                 :{BLACK}劃出湖泊範圍。{}開鑿運河。在海平面上按 CTRL 鍵則會淹沒週遭土地
 STR_0290_DELETE                                                 :{BLACK}刪除
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}完全移除這個市鎮
 STR_0292_SAVE_SCENARIO                                          :儲存場景
@@ -802,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :世界地圖
 STR_EXTRA_VIEW_PORT                                             :打開新視野
 STR_SIGN_LIST                                                   :標誌清單
+STR_TRANSPARENCY_OPTIONS                                        :透明度選項
 STR_02DF_TOWN_DIRECTORY                                         :市鎮索引
 STR_TOWN_POPULATION                                             :{BLACK}世界人口: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}視野 {COMMA}
@@ -3011,7 +3012,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}如果替換後的車廂較長的話,讓自動替換功能移除車廂 (從頭開始) 以便維持列車長度。
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}取代: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} 實驗功能 {}在車頭與車廂取代畫面之間切換。{}車廂取代只有在新車廂能改裝運送舊車廂酬載的時候才會執行。每個車廂都會進行一次檢查。
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}無法購買車頭
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}載具已經停產
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}車輛已經停產
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}船舶已經停產
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}飛機已經停產
 
 STR_ENGINES                                                     :車頭
 STR_WAGONS                                                      :車廂
@@ -3148,3 +3152,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}轉運進帳: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...此路段為市鎮所有
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...此路面向錯誤的方向
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}透明度選項
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}將透明度套用於車站名稱
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}將透明度套用於樹木
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}將透明度套用於房屋
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}將透明度套用於工業
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}將透明度套用於建物,如車站、廠棚、路標及電線
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}將透明度套用於橋樑
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}將透明度套用於設施,如燈塔、天線塔等
--- a/src/lang/turkish.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/turkish.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -280,6 +280,7 @@
 STR_OSNAME_MORPHOS                                              :MorphOS
 STR_OSNAME_AMIGAOS                                              :AmigaOS
 STR_OSNAME_OS2                                                  :OS/2
+STR_OSNAME_SUNOS                                                :SunOS
 
 STR_013B_OWNED_BY                                               :{WHITE}...sahibi {STRING}
 STR_013C_CARGO                                                  :{BLACK}Kargo
@@ -590,6 +591,7 @@
 STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Rakibin durağına ilk aracın gelişi
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Kazalar / felaketler
 STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Şirket bilgisi
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Fabrika açılış/kapanışları
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Ekonomi değişimleri
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Oyuncunun araçlarıyla ilgili ögüt / bilgi
 STR_020C_NEW_VEHICLES                                           :{YELLOW}Yeni araçlar
@@ -725,6 +727,7 @@
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Deniz feneri koy
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Verici koy
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Çöl yap, kaldırmak için CTRL'ye basılı tut
+STR_CREATE_LAKE                                                 :{BLACK}Su alanını belirle.{}Deniz seviyesinde CTRL tuşu basılı olmadığı sürece kanal yapar, basılıysa etraftakileri su altında bırakır
 STR_0290_DELETE                                                 :{BLACK}Sil
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Sehri tamamen sil
 STR_0292_SAVE_SCENARIO                                          :Kaydet
@@ -799,6 +802,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Dünya haritası
 STR_EXTRA_VIEW_PORT                                             :Ekstra görünüm
 STR_SIGN_LIST                                                   :Tabela listesi
+STR_TRANSPARENCY_OPTIONS                                        :Şeffaflık seçenekleri
 STR_02DF_TOWN_DIRECTORY                                         :Şehir listesi
 STR_TOWN_POPULATION                                             :{BLACK}Dünya nüfusu: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Görünüm {COMMA}
@@ -1087,6 +1091,11 @@
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Şirketi al
 STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Tüm şirketler
 STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}<ENTER> tuşu takım içi sohbette kullanılsın: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Fare tekerleğinin fonksiyonu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Haritayı yakınaştır
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Haritayı kaydır
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Kapalı
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Tekerlek hızı: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Her oyuncu için en fazla tren: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Her oyuncu için en fazla araba: {ORANGE}{STRING}
@@ -1205,6 +1214,7 @@
 STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Rastgele türde ağaçlar koy
 
 STR_CANT_BUILD_CANALS                                           :{WHITE}Buraya kanal yapılamaz...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Kanal yap.
 STR_LANDINFO_CANAL                                              :Kanal
 
 STR_CANT_BUILD_LOCKS                                            :{WHITE}Buraya kilit yapılamaz...
@@ -2630,6 +2640,10 @@
 STR_TRAIN_NO_POWER                                              :{RED}Elektrik yok
 STR_TRAIN_START_NO_CATENARY                                     :Bu rayda elektrik olmadiği için bu tren çalışamaz
 
+STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}{STRING} artık kullanılabilir!
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING} artık kullanılabilir!  -  {STRING}
+
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Yolda araba var
 STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} Arabalar
@@ -2997,7 +3011,6 @@
 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_ENGINE_NOT_BUILDABLE                                        :{WHITE}Lokomotif alınamaz
 
 STR_ENGINES                                                     :Lokomotifler
 STR_WAGONS                                                      :Vagon
@@ -3132,3 +3145,15 @@
 STR_DATE_LONG                                                   :{STRING} {STRING} {NUM}
 
 ########
+
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Aktarma Maliyeti: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...bu yol belediyeye ait
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Şeffaflık Seçenekleri
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Durak tabelaları için şeffaflık
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Ağaçlar için şeffaflık
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Evler için şeffaflık
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Fabrikalar için şeffaflık
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}İstasyonlar, garajlar tershaneler vb. için şeffaflık
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Köprüler için şeffaflık
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Antenler ve deniz fenerleri için şeffaflık
--- a/src/lang/ukrainian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/ukrainian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -928,6 +928,7 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта світу
 STR_EXTRA_VIEW_PORT                                             :Додаткове вікно
 STR_SIGN_LIST                                                   :Список позначень
+STR_TRANSPARENCY_OPTIONS                                        :Опції прозорості
 STR_02DF_TOWN_DIRECTORY                                         :Список міст
 STR_TOWN_POPULATION                                             :{BLACK}Населення світу: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Вікно {COMMA}
@@ -3174,7 +3175,10 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Дозволити автооновленню видаляти вагони зберігаючи довжину потягу(починаючи спереду), якщо оновлення робить поїзд довшим.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Оновлення: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} ЕКСПЕРИМЕНТАЛЬНО {}Переключення між вікнами заміни потягів та вагонів.{}Автозаміна потягів відбудеться лише в тому випадку, якщо співпаде тип вантажу що перевозиться. Ця перевірка проводиться для кожного вагону під час автозаміни.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}потяг неможливо побудувати
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Поїзд недоступний
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Автомобіль недоступний
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Корабель недоступний
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Літак недоступний
 
 STR_ENGINES                                                     :Потяги
 STR_WAGONS                                                      :Вагони
@@ -3311,3 +3315,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Плата за трансфер: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...ця дорога у власності міста
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...дорога не в тому напрямку
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Опції прозорості
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Переключити прозорість для знаків станцій
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Переключити прозорість для дерев
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Переключити прозорість для будинків
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Переключити прозорість для промисловості
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Переключити прозорість для споруд, таких як станції, депо, ЛЕП тощо
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Переключити прозорість для мостів
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Переключити прозорість для споруд, таких як маяки та антенни (може, потім)
--- a/src/lang/unfinished/afrikaans.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -2796,7 +2796,6 @@
 
 STR_NOT_REPLACING                                               :{BLACK}Word nie vervang nie
 STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Geen voertuig gekies
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Enjin is nie boubaar nie
 
 STR_ENGINES                                                     :Enjine
 
--- a/src/lang/unfinished/croatian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/unfinished/croatian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -2781,7 +2781,6 @@
 STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Neka automatska zamijena drži dužinu vlaka istom brišući vagone(počevši od naprijed), ako bi zamijena lokomotive vlak učinila dužim.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Zamjenjujem:{ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}EXPERIMENTALNA FUNKCIJA {} Prebaci između prozora za izmjenu lokomotiva i vagona.{}Izmjena vagona će se izvršiti samo ako novi vagon može biti prenamijenjen za prijevoz istog tipa tereta kao i stari vagon. Ovo se provjerava za svaki vagon kada se stvarna zamjena odvija.
-STR_ENGINE_NOT_BUILDABLE                                        :{WHITE}Lokomotiva se nemože izgraditi
 
 STR_ENGINES                                                     :Lokomotive
 STR_WAGONS                                                      :Vagoni
--- a/src/lang/unfinished/frisian.txt	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/lang/unfinished/frisian.txt	Tue Jun 12 11:56:35 2007 +0000
@@ -232,8 +232,10 @@
 STR_0140_NEW_GAME                                               :{BLACK}Nei Spul
 STR_0141_LOAD_GAME                                              :{BLACK}Laad Spul
 
+STR_64                                                          :64
 STR_128                                                         :128
 STR_256                                                         :256
+STR_512                                                         :512
 STR_1024                                                        :1024
 STR_2048                                                        :2048
 STR_0148_GAME_OPTIONS                                           :{BLACK}Spul Opsjes
@@ -461,20 +463,16 @@
 STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} behellet '{STRING}' status!
 STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} fan {COMPANY} behellet '{STRING}' status!
 STR_021F                                                        :{BLUE}{COMMA}
-STR_0220_CREATE_SCENARIO                                        :{BLACK}Meitsje Lânskip
 STR_0221_OPENTTD                                                :{YELLOW}OpenTTD
 STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Lânskip Ferbouer
 STR_0223_LAND_GENERATION                                        :{WHITE}Lân Generaasje
 STR_0224                                                        :{BLACK}{UPARROW}
 STR_0225                                                        :{BLACK}{DOWNARROW}
-STR_0226_RANDOM_LAND                                            :{BLACK}Samar wat lân
-STR_0227_RESET_LAND                                             :{BLACK}Set lân werom
 STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Fergrutsje gebiet om te ferheegjen/ferleegjen
 STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Ferlyts gebiet om te ferheegjen/ferleegjen
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Meitsje samar wat lân
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Set it lânskip werom
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Lânskip weromsette
-STR_022D_ARE_YOU_SURE_YOU_WANT_TO                               :{WHITE}Bist der wis fan dast it lânskip weromsette wolst?
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Lânskip generaasje
 STR_022F_TOWN_GENERATION                                        :{BLACK}Stêd generaasje
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Yndustry generaasje
@@ -1099,8 +1097,26 @@
 STR_482F_COST                                                   :{BLACK}Kostet: {YELLOW}{CURRENCY}
 
 ##id 0x5000
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Tunnel mat earst fuorthelle wurde
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Brêge mat earst fuorthelle wurde
+STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Begjin en ein kin net op itselde plak wêze
+STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Begjin en ein mat yn ien lijn wêze
+STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
+STR_5012_WOODEN                                                 :Hout
+STR_5013_CONCRETE                                               :Beton
+STR_5014_TUBULAR_STEEL                                          :Buis, Stiel
+STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}Kin hjir gjin brêge bouwe...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Kin hjir gjin tunnel bouwe...
+STR_5017_RAILROAD_TUNNEL                                        :Spoartunnel
+STR_501F_WOODEN_RAIL_BRIDGE                                     :Houten spoarbrêge
+STR_5020_CONCRETE_RAIL_BRIDGE                                   :Betonnen spoarbrêge
 
 ##id 0x5800
+STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Objekt yn it paad
+STR_5801_TRANSMITTER                                            :Sendmast
+STR_5802_LIGHTHOUSE                                             :Fjoertoer
+STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}Kin dit stikje lân net keapje...
+STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...it is al fan dy!
 
 
 ############ WARNING, using range 0x6000 for strings that are stored in the savegame
@@ -1113,14 +1129,93 @@
 ##id 0x6800
 
 ############ range for difficulty levels starts
+STR_6801_EASY                                                   :{BLACK}Maklik
+STR_6802_MEDIUM                                                 :{BLACK}Gewoan
 ############ range for difficulty levels ends
 
 ############ range for difficulty settings starts
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Maksimum oantal tsjinstanders: {ORANGE}{COMMA}
+STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Tsjinstander begjint: {ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Oantal stêden: {ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Oantal yndustrieen: {ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Konstruksjesnelhyd fan tsjinstanders: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Konstruksjekosten: {ORANGE}{STRING}
+STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Terreinsoart: {ORANGE}{STRING}
+STR_6813_ECONOMY                                                :{LTBLUE}Ekonomy: {ORANGE}{STRING}
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Gjin
+STR_6816_LOW                                                    :Leech
+STR_6817_NORMAL                                                 :Gewoan
+STR_6818_HIGH                                                   :Heech
+STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
+STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
+STR_681B_VERY_SLOW                                              :Hiel dreech
+STR_681C_SLOW                                                   :Dreech
+STR_681D_MEDIUM                                                 :Gewoan
+STR_681E_FAST                                                   :Hurd
+STR_681F_VERY_FAST                                              :Hiel hurd
+STR_6820_LOW                                                    :Leech
+STR_6821_MEDIUM                                                 :Gewoan
+STR_6822_HIGH                                                   :Heech
+STR_6823_NONE                                                   :Gjin
+STR_6824_REDUCED                                                :Minder
+STR_6825_NORMAL                                                 :Gewoan
+STR_6826_X1_5                                                   :x1.5
+STR_6827_X2                                                     :x2
+STR_6828_X3                                                     :x3
+STR_6829_X4                                                     :x4
+STR_682A_VERY_FLAT                                              :Hiel Flak
+STR_682B_FLAT                                                   :Flak
+STR_682D_MOUNTAINOUS                                            :Bergachtich
+STR_682F_FLUCTUATING                                            :Wikseljend
+STR_6830_IMMEDIATE                                              :Fuortendaliks
+STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 moannen nei spyler
+STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 moannen nei spyler
+STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 moannen nei spyler
+STR_6836_OFF                                                    :Ut
+STR_6837_ON                                                     :Oan
 
 ##id 0x7000
+STR_7000                                                        :
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7002_PLAYER                                                 :(Spyler {COMMA})
+STR_7004_NEW_FACE                                               :{BLACK}Nei Gesicht
+STR_7005_COLOR_SCHEME                                           :{BLACK}Kleurenskema
+STR_7006_COLOR_SCHEME                                           :{GOLD}Kleurenskema:
+STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Nei Kleurenskema
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansieen {BLACK}{PLAYERNAME}
+STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Utjeften/Ynkomsten
+STR_7010                                                        :{WHITE}{NUM}
+STR_7011_CONSTRUCTION                                           :{GOLD}Konstruksje
+STR_7018_TRAIN_INCOME                                           :{GOLD}Ynkomsten Treinen
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Ynkomsten Fleantúgen
+STR_701B_SHIP_INCOME                                            :{GOLD}Ynkomsten Skepen
+STR_701C_LOAN_INTEREST                                          :{GOLD}Rinte Liening
+STR_701D_OTHER                                                  :{GOLD}Oaren
+STR_701E                                                        :{BLACK}-{CURRENCY64}
+STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_7020_TOTAL                                                  :{WHITE}Totaal:
+STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7022_INCOME_GRAPH                                           :{WHITE}Ynkomsten Grafyk
+STR_7024                                                        :{COMMA}
+STR_7027_LOAN                                                   :{WHITE}Liening
+STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_7029_BORROW                                                 :{BLACK}Lien {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Betelje {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} werom
+STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kin net mear jild liene
+STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} nedich
+STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Kin liening net werombetelje
+STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Selektear nei gesicht foar de bedriuwslieder
+STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Lien mear jild
+STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Betelje in diel fan de liening werom
+STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Bedriuwslieder)
+STR_7038_INAUGURATED                                            :{GOLD}Oprjochte: {WHITE}{NUM}
+STR_7042_NONE                                                   :{WHITE}Gjin
+STR_7044_MALE                                                   :{BLACK}Man
+STR_7045_FEMALE                                                 :{BLACK}Frou
+STR_7046_NEW_FACE                                               :{BLACK}Nei Gesicht
+STR_704C_KEY                                                    :{BLACK}Kaai
 
 
 
@@ -1135,6 +1230,7 @@
 
 
 
+
 ##id 0x9000
 
 
@@ -1164,6 +1260,7 @@
 
 
 
+
 ### depot strings
 
 
@@ -1194,4 +1291,8 @@
 ############ Tooltip measurment
 
 
+############ Date formatting
+
 ########
+
+
--- a/src/main_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/main_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -37,6 +37,7 @@
 #include "settings.h"
 #include "date.h"
 #include "vehicle_gui.h"
+#include "transparency_gui.h"
 #include "newgrf_config.h"
 
 #include "network/network_data.h"
@@ -160,8 +161,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: _display_opt ^= DO_TRANS_BUILDINGS;    break;
-		case 12: _display_opt ^= DO_TRANS_SIGNS;        break;
+		case 11: TOGGLEBIT(_transparent_opt, TO_BUILDINGS); break;
+		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS);     break;
 	}
 	MarkWholeScreenDirty();
 }
@@ -192,6 +193,7 @@
 		case 0: ShowSmallMap();            break;
 		case 1: ShowExtraViewPortWindow(); break;
 		case 2: ShowSignList();            break;
+		case 3: ShowTransparencyToolbar(); break;
 	}
 }
 
@@ -206,7 +208,8 @@
 		case 0: ShowSmallMap();            break;
 		case 1: ShowExtraViewPortWindow(); break;
 		case 2: ShowSignList();            break;
-		case 3: ShowTownDirectory();       break;
+		case 3: ShowTransparencyToolbar(); break;
+		case 4: ShowTownDirectory();       break;
 	}
 }
 
@@ -762,7 +765,7 @@
 
 static void ToolbarMapClick(Window *w)
 {
-	PopupMainToolbMenu(w, 4, STR_02DE_MAP_OF_WORLD, 3, 0);
+	PopupMainToolbMenu(w, 4, STR_02DE_MAP_OF_WORLD, 4, 0);
 }
 
 static void ToolbarTownClick(Window *w)
@@ -961,8 +964,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 (_display_opt & DO_TRANS_BUILDINGS)    SETBIT(x, 11);
-	if (_display_opt & DO_TRANS_SIGNS)        SETBIT(x, 12);
+	if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(x, 11);
+	if (HASBIT(_transparent_opt, TO_SIGNS))     SETBIT(x, 12);
 	WP(w,menu_d).checked_items = x;
 }
 
@@ -1001,7 +1004,7 @@
 static void ToolbarScenMapTownDir(Window *w)
 {
 	/* Scenario editor button, *hack*hack* use different button to activate */
-	PopupMainToolbMenu(w, 8 | (17 << 8), STR_02DE_MAP_OF_WORLD, 4, 0);
+	PopupMainToolbMenu(w, 8 | (17 << 8), STR_02DE_MAP_OF_WORLD, 5, 0);
 }
 
 static void ToolbarScenZoomIn(Window *w)
@@ -2330,11 +2333,35 @@
 				break;
 #endif
 
-			case 'X':
-				_display_opt ^= DO_TRANS_BUILDINGS;
+			case '1' | WKC_CTRL:
+			case '2' | WKC_CTRL:
+			case '3' | WKC_CTRL:
+			case '4' | WKC_CTRL:
+			case '5' | WKC_CTRL:
+			case '6' | WKC_CTRL:
+			case '7' | WKC_CTRL:
+				/* Transparency toggle hot keys */
+				TOGGLEBIT(_transparent_opt, e->we.keypress.keycode - ('1' | WKC_CTRL));
 				MarkWholeScreenDirty();
 				break;
 
+			case 'X' | WKC_CTRL:
+				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();
+				break;
+			}
+
 #ifdef ENABLE_NETWORK
 			case WKC_RETURN: case 'T': // smart chat; send to team if any, otherwise to all
 				if (_networking) {
--- a/src/misc.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/misc.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -7,6 +7,7 @@
 #include "economy_new.h"
 #include "currency.h"
 #include "functions.h"
+#include "landscape.h"
 #include "news.h"
 #include "player.h"
 #include "string.h"
@@ -88,7 +89,6 @@
 void InitializeDockGui();
 void InitializeIndustries();
 void InitializeMainGui();
-void InitializeLandscape();
 void InitializeTowns();
 void InitializeTrees();
 void InitializeSigns();
--- a/src/misc_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/misc_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -8,6 +8,7 @@
 #include "heightmap.h"
 #include "debug.h"
 #include "functions.h"
+#include "landscape.h"
 #include "newgrf.h"
 #include "saveload.h"
 #include "strings.h"
@@ -40,8 +41,6 @@
 FiosItem *_fios_list;
 int _saveload_mode;
 
-extern void GenerateLandscape(byte mode);
-extern void SwitchMode(int new_mode);
 
 static bool _fios_path_changed;
 static bool _savegame_sort_dirty;
--- a/src/namegen.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/namegen.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file namegen.h */
+/** @file src/namegen.h Town name generator stuff */
 
 #ifndef NAMEGEN_H
 #define NAMEGEN_H
--- a/src/network/network_udp.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/network/network_udp.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -391,12 +391,13 @@
 		/* Don't know the GRF, so mark game incompatible and the (possibly)
 		 * already resolved name for this GRF (another server has sent the
 		 * name of the GRF already */
-		config->name     = FindUnknownGRFName(config->grfid, config->md5sum, true);
-		config->status   = GCS_NOT_FOUND;
+		config->name   = FindUnknownGRFName(config->grfid, config->md5sum, true);
+		config->status = GCS_NOT_FOUND;
 	} else {
-		config->filename = f->filename;
-		config->name     = f->name;
-		config->info     = f->info;
+		config->filename  = f->filename;
+		config->full_path = f->full_path;
+		config->name      = f->name;
+		config->info      = f->info;
 	}
 	SETBIT(config->flags, GCF_COPY);
 }
--- a/src/newgrf.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -2539,7 +2539,7 @@
 			StationSpec *statspec = _cur_grffile->stations[stid];
 
 			statspec->spritegroup[CT_DEFAULT] = _cur_grffile->spritegroups[groupid];
-			statspec->grfid = _cur_grffile->grfid;
+			statspec->grffile = _cur_grffile;
 			statspec->localidx = stid;
 			SetCustomStationSpec(statspec);
 		}
@@ -4305,7 +4305,7 @@
 
 	if (newfile == NULL) error ("Out of memory");
 
-	newfile->filename = strdup(config->filename);
+	newfile->filename = strdup(config->full_path);
 	newfile->sprite_offset = sprite_offset;
 
 	/* Copy the initial parameter list */
@@ -4583,7 +4583,7 @@
 
 void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
 {
-	const char *filename = config->filename;
+	const char *filename = config->full_path;
 	uint16 num;
 
 	/* A .grf file is activated only if it was active when the game was
@@ -4699,7 +4699,7 @@
 			if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
 
 			/* @todo usererror() */
-			if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);
+			if (!FileExists(c->full_path)) error("NewGRF file is missing '%s'", c->filename);
 
 			if (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
 			LoadNewGRFFile(c, slot++, stage);
--- a/src/newgrf_callbacks.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_callbacks.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,10 +1,11 @@
 /* $Id$ */
 
+/** @file newgrf_callbacks.h
+ */
+
 #ifndef NEWGRF_CALLBACKS_H
 #define NEWGRF_CALLBACKS_H
 
-/** @file newgrf_callbacks.h
- */
 
 /**
  * List of implemented NewGRF callbacks.
@@ -73,6 +74,9 @@
 	 * determine if a house should be destroyed. */
 	CBID_HOUSE_DESTRUCTION          = 0x21,
 
+	/* Called to determine if the given industry type is available */
+	CBID_INDUSTRY_AVAILABLE         = 0x22, // not yet implemented
+
 	/* This callback is called from vehicle purchase lists. It returns a value to be
 	 * used as a custom string ID in the 0xD000 range. */
 	CBID_VEHICLE_ADDITIONAL_TEXT    = 0x23,
@@ -80,10 +84,31 @@
 	/* Called when building a station to customize the tile layout */
 	CBID_STATION_TILE_LAYOUT        = 0x24,
 
+	/* Called for periodically starting or stopping the animation. */
+	CBID_INDTILE_ANIM_START_STOP    = 0x25, // not yet implemented
+
+	/* Called to determine industry tile next animation frame. */
+	CBID_INDTILE_ANIM_NEXT_FRAME    = 0x26, // not yet implemented
+
+	/* Called to indicate how long the current animation frame should last. */
+	CBID_INDTILE_ANIMATION_SPEED    = 0x27, // not yet implemented
+
+	/* Called to determine if the given industry can be built on specific area */
+	CBID_INDUSTRY_LOCATION          = 0x28, // not yet implemented
+
+	/* Called on production changes, so it can be adjusted */
+	CBID_INDUSTRY_PRODUCTION_CHANGE = 0x29, // not yet implemented
+
 	/* Called (if appropriate bit in callback mask is set) to determine which
 	 * cargoes a town building should accept. */
 	CBID_HOUSE_ACCEPT_CARGO         = 0x2A, // not yet implemented
 
+	/* Called to query the cargo acceptance of the industry tile */
+	CBID_INDTILE_ACCEPT_CARGO       = 0x2B, // not yet implemented
+
+	/* Called to determine which cargoes an industry should accept. */
+	CBID_INDUSTRY_ACCEPT_CARGO      = 0x2C, // not yet implemented
+
 	/* Called to determine if a specific colour map should be used for a vehicle
 	 * instead of the default livery */
 	CBID_VEHICLE_COLOUR_MAPPING     = 0x2D,
@@ -92,6 +117,12 @@
 	 * cargo a town building produces. */
 	CBID_HOUSE_PRODUCE_CARGO        = 0x2E, // not yet implemented
 
+	/* Called to determine if the given industry tile can be built on specific tile */
+	CBID_INDTILE_SHAPE_CHECK        = 0x2F, // not yet implemented
+
+	/* Called to determine the type (if any) of foundation to draw for industry tile */
+	CBID_INDUSTRY_DRAW_FOUNDATIONS  = 0x30, // not yet implemented
+
 	/* Called when the player (or AI) tries to start or stop a vehicle. Mainly
 	 * used for preventing a vehicle from leaving the depot. */
 	CBID_VEHICLE_START_STOP_CHECK   = 0x31,
@@ -99,9 +130,30 @@
 	/* Called to play a special sound effect */
 	CBID_VEHICLE_SOUND_EFFECT       = 0x33,
 
+	/* Called monthly on production changes, so it can be adjusted more frequently */
+	CBID_INDUSTRY_MONTHLYPROD_CHANGE= 0x35, // not yet implemented
+
+	/* Called to determine text to display after cargo name */
+	CBID_INDUSTRY_CARGO_SUFFIX      = 0x37, // not yet implemented
+
+	/* Called to determine more text in the fund industry window */
+	CBID_INDUSTRY_FUND_MORE_TEXT    = 0x38, // not yet implemented
+
 	/* Called to calculate the income of delivered cargo */
 	CBID_CARGO_PROFIT_CALC          = 0x39,
 
+	/* Called to determine more text in the industry window */
+	CBID_INDUSTRY_WINDOW_MORE_TEXT  = 0x3A, // not yet implemented
+
+	/* Called to determine industry special effects */
+	CBID_INDUSTRY_SPECIAL_EFFECT    = 0x3B, // not yet implemented
+
+	/* Called to determine if industry can alter the ground below industry tile */
+	CBID_INDUSTRY_AUTOSLOPE         = 0x3C, // not yet implemented
+
+	/* Called to determine if the industry can still accept or refuse  more cargo arrival */
+	CBID_INDUSTRY_REFUSE_CARGO      = 0x3D, // not yet implemented
+
 	/* Called (if appropriate bit in callback mask set) to determine whether a
 	 * town building can be destroyed. */
 	CBID_HOUSE_DENY_DESTRUCTION     = 0x143,
@@ -159,6 +211,36 @@
 };
 
 /**
+ * Callback masks for Industries
+ */
+enum IndustryCallbackMask {
+	CBM_IND_AVAILABLE                 = 0,  ///< industry availability callback
+	CBM_IND_PRODUCTION_CARGO_ARRIVAL  = 1,  ///< call production callback when cargo arrives at the industry
+	CBM_IND_PRODUCTION_256_TICKS      = 2,  ///< call production callback every 256 ticks
+	CBM_IND_LOCATION                  = 3,  ///< check industry construction on given area
+	CBM_IND_PRODUCTION_CHANGE         = 4,  ///< controls random production change
+	CBM_IND_MONTHLYPROD_CHANGE        = 5,  ///< controls monthly random production change
+	CBM_IND_CARGO_SUFFIX              = 6,  ///< cargo sub-type display
+	CBM_IND_FUND_MORE_TEXT            = 7,  ///< additional text in fund window
+	CBM_IND_WINDOW_MORE_TEXT          = 8,  ///< additional text in industry window
+	CBM_IND_SPECIAL_EFFECT            = 9,  ///< control special effects
+	CBM_IND_REFUSE_CARGO              = 10, ///< option out of accepting cargo
+};
+
+/**
+ * Callback masks for industry tiles
+ */
+enum IndustryTileCallbackMask {
+	CBM_INDT_ANIM_NEXT_FRAME          = 0,  ///< decides next animation frame
+	CBM_INDT_ANIM_SPEED               = 1,  ///< decides animation speed
+	CBM_INDT_ACCEPTANCE_CARGO         = 2,  ///< decides amount of cargo acceptance
+	CBM_INDT_ACCEPT_CARGO             = 3,  ///< decides accepted types
+	CBM_INDT_SHAPE_CHECK              = 4,  ///< decides slope suitability
+	CBM_INDT_DRAW_FOUNDATIONS         = 5,  ///< decides if default foundations need to be drawn
+	CBM_INDT_AUTOSLOPE                = 6,  ///< decides allowance of autosloping
+};
+
+/**
  * Result of a failed callback.
  */
 enum {
--- a/src/newgrf_cargo.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_cargo.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -94,3 +94,17 @@
 
 	return group->g.callback.result;
 }
+
+
+CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile)
+{
+	/* Pre-version 7 uses the 'climate dependent' ID, i.e. cargo is the cargo ID */
+	if (grffile->grf_version < 7) return HASBIT(_cargo_mask, cargo) ? cargo : (CargoID) CT_INVALID;
+
+	/* If the GRF contains a translation table (and the cargo is in bounds)
+	 * then get the cargo ID for the label */
+	if (cargo < grffile->cargo_max) return GetCargoIDByLabel(grffile->cargo_list[cargo]);
+
+	/* Else the cargo value is a 'climate independent' 'bitnum' */
+	return GetCargoIDByBitnum(cargo);
+}
--- a/src/newgrf_cargo.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_cargo.h	Tue Jun 12 11:56:35 2007 +0000
@@ -21,9 +21,12 @@
 static const CargoID CT_PURCHASE     = NUM_CARGO + 1;
 static const CargoID CT_DEFAULT_NA   = NUM_CARGO + 2;
 
+/* Forward declarations of structs used */
 struct CargoSpec;
+struct GRFFile;
 
 SpriteID GetCustomCargoSprite(const CargoSpec *cs);
 uint16 GetCargoCallback(uint16 callback, uint32 param1, uint32 param2, const CargoSpec *cs);
+CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile);
 
 #endif /* NEWGRF_CARGO_H */
--- a/src/newgrf_config.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_config.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file newgfr_config.cpp */
+/** @file newgrf_config.cpp */
 
 #include "stdafx.h"
 #include "openttd.h"
@@ -35,14 +35,12 @@
 static bool CalcGRFMD5Sum(GRFConfig *config)
 {
 	FILE *f;
-	char filename[MAX_PATH];
 	md5_state_t md5state;
 	md5_byte_t buffer[1024];
 	size_t len;
 
 	/* open the file */
-	snprintf(filename, lengthof(filename), "%s%s", _paths.data_dir, config->filename);
-	f = fopen(filename, "rb");
+	f = fopen(config->full_path, "rb");
 	if (f == NULL) return false;
 
 	/* calculate md5sum */
@@ -61,11 +59,15 @@
 /* Find the GRFID and calculate the md5sum */
 bool FillGRFDetails(GRFConfig *config, bool is_static)
 {
-	if (!FioCheckFileExists(config->filename)) {
+	if (!FileExists(config->full_path)) {
 		config->status = GCS_NOT_FOUND;
 		return false;
 	}
 
+	if (config->filename == NULL) {
+		config->filename = strdup(strrchr(config->full_path, PATHSEPCHAR) + 1);
+	}
+
 	/* Find and load the Action 8 information */
 	/* 62 is the last file slot before sample.cat.
 	 * Should perhaps be some "don't care" value */
@@ -91,6 +93,7 @@
 	/* GCF_COPY as in NOT strdupped/alloced the filename, name and info */
 	if (!HASBIT((*config)->flags, GCF_COPY)) {
 		free((*config)->filename);
+		free((*config)->full_path);
 		free((*config)->name);
 		free((*config)->info);
 		free((*config)->error);
@@ -123,10 +126,11 @@
 	for (; src != NULL; src = src->next) {
 		GRFConfig *c = CallocT<GRFConfig>(1);
 		*c = *src;
-		if (src->filename != NULL) c->filename = strdup(src->filename);
-		if (src->name     != NULL) c->name     = strdup(src->name);
-		if (src->info     != NULL) c->info     = strdup(src->info);
-		if (src->error    != NULL) {
+		if (src->filename  != NULL) c->filename  = strdup(src->filename);
+		if (src->full_path != NULL) c->full_path = strdup(src->full_path);
+		if (src->name      != NULL) c->name      = strdup(src->name);
+		if (src->info      != NULL) c->info      = strdup(src->info);
+		if (src->error     != NULL) {
 			c->error = CallocT<GRFError>(1);
 			memcpy(c->error, src->error, sizeof(GRFError));
 		}
@@ -255,7 +259,9 @@
 			 * already a local one, so there is no need to replace it. */
 			if (!HASBIT(c->flags, GCF_COPY)) {
 				free(c->filename);
+				free(c->full_path);
 				c->filename = strdup(f->filename);
+				c->full_path = strdup(f->full_path);
 				memcpy(c->md5sum, f->md5sum, sizeof(c->md5sum));
 				if (c->name == NULL && f->name != NULL) c->name = strdup(f->name);
 				if (c->info == NULL && f->info != NULL) c->info = strdup(f->info);
@@ -278,7 +284,7 @@
 	struct dirent *dirent;
 	DIR *dir;
 
-	if ((dir = ttd_opendir(path)) == NULL) return 0;
+	if (path == NULL || (dir = ttd_opendir(path)) == NULL) return 0;
 
 	while ((dirent = readdir(dir)) != NULL) {
 		const char *d_name = FS2OTTD(dirent->d_name);
@@ -286,24 +292,25 @@
 
 		if (!FiosIsValidFile(path, dirent, &sb)) continue;
 
-		snprintf(filename, lengthof(filename), "%s" PATHSEP "%s", path, d_name);
+		snprintf(filename, lengthof(filename), "%s%s", path, d_name);
 
 		if (sb.st_mode & S_IFDIR) {
 			/* Directory */
 			if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
+			AppendPathSeparator(filename, lengthof(filename));
 			num += ScanPath(filename);
 		} else if (sb.st_mode & S_IFREG) {
 			/* File */
 			char *ext = strrchr(filename, '.');
-			char *file = filename + strlen(_paths.data_dir) + 1; // Crop base path
 
 			/* If no extension or extension isn't .grf, skip the file */
 			if (ext == NULL) continue;
 			if (strcasecmp(ext, ".grf") != 0) continue;
 
 			GRFConfig *c = CallocT<GRFConfig>(1);
-			c->filename = strdup(file);
+			c->full_path = strdup(filename);
 
+			bool added = true;
 			if (FillGRFDetails(c, false)) {
 				if (_all_grfs == NULL) {
 					_all_grfs = c;
@@ -312,20 +319,28 @@
 					 * name, so the list is sorted as we go along */
 					GRFConfig **pd, *d;
 					for (pd = &_all_grfs; (d = *pd) != NULL; pd = &d->next) {
+						if (c->grfid == d->grfid && memcmp(c->md5sum, d->md5sum, sizeof(c->md5sum)) == 0) added = false;
 						if (strcasecmp(c->name, d->name) <= 0) break;
 					}
-					c->next = d;
-					*pd = c;
+					if (added) {
+						c->next = d;
+						*pd = c;
+					}
 				}
+			} else {
+				added = false;
+			}
 
-				num++;
-			} else {
+			if (!added) {
 				/* File couldn't be opened, or is either not a NewGRF or is a
-				 * 'system' NewGRF, so forget about it. */
+				 * 'system' NewGRF or it's already known, so forget about it. */
 				free(c->filename);
+				free(c->full_path);
 				free(c->name);
 				free(c->info);
 				free(c);
+			} else {
+				num++;
 			}
 		}
 	}
@@ -344,7 +359,8 @@
 	ClearGRFConfigList(&_all_grfs);
 
 	DEBUG(grf, 1, "Scanning for NewGRFs");
-	num = ScanPath(_paths.data_dir);
+	num  = ScanPath(_paths.data_dir);
+	num += ScanPath(_paths.second_data_dir);
 	DEBUG(grf, 1, "Scan complete, found %d files", num);
 }
 
--- a/src/newgrf_config.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_config.h	Tue Jun 12 11:56:35 2007 +0000
@@ -45,6 +45,7 @@
 
 struct GRFConfig : public GRFIdentifier {
 	char *filename;
+	char *full_path;
 	char *name;
 	char *info;
 	GRFError *error;
--- a/src/newgrf_house.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_house.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -406,7 +406,7 @@
 		image = dtss->image + stage;
 		pal   = dtss->pal;
 
-		if (!HASBIT(image, SPRITE_MODIFIER_OPAQUE) && ((_display_opt & DO_TRANS_BUILDINGS))) {
+		if (!HASBIT(image, SPRITE_MODIFIER_OPAQUE) && HASBIT(_transparent_opt, TO_HOUSES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) {
--- a/src/newgrf_station.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_station.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -184,7 +184,7 @@
 		for (j = 0; j < station_classes[i].stations; j++) {
 			const StationSpec *statspec = station_classes[i].spec[j];
 			if (statspec == NULL) continue;
-			if (statspec->grfid == grfid && statspec->localidx == localidx) return statspec;
+			if (statspec->grffile->grfid == grfid && statspec->localidx == localidx) return statspec;
 		}
 	}
 
@@ -409,12 +409,7 @@
 		case 0x49: return GetPlatformInfoHelper(tile, false, true, false);
 
 		/* Variables which use the parameter */
-		case 0x60: return GB(st->goods[parameter].waiting_acceptance, 0, 12);
-		case 0x61: return st->goods[parameter].days_since_pickup;
-		case 0x62: return st->goods[parameter].rating;
-		case 0x63: return st->goods[parameter].enroute_time;
-		case 0x64: return st->goods[parameter].last_speed | (st->goods[parameter].last_age << 8);
-		case 0x65: return GB(st->goods[parameter].waiting_acceptance, 12, 4);
+		/* Variables 0x60 to 0x65 are handled separately below */
 
 		/* General station properties */
 		case 0x82: return 50;
@@ -430,6 +425,23 @@
 		case 0xFA: return max(st->build_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0);
 	}
 
+	/* Handle cargo variables with parameter, 0x60 to 0x65 */
+	if (variable >= 0x60 && variable <= 0x65) {
+		CargoID c = GetCargoTranslation(parameter, object->u.station.statspec->grffile);
+
+		if (c == CT_INVALID) return 0;
+		const GoodsEntry *ge = &st->goods[c];
+
+		switch (variable) {
+			case 0x60: return GB(ge->waiting_acceptance, 0, 12);
+			case 0x61: return ge->days_since_pickup;
+			case 0x62: return ge->rating;
+			case 0x63: return ge->enroute_time;
+			case 0x64: return ge->last_speed | (ge->last_age << 8);
+			case 0x65: return GB(ge->waiting_acceptance, 12, 4);
+		}
+	}
+
 	/* Handle cargo variables (deprecated) */
 	if (variable >= 0x8C && variable <= 0xEC) {
 		const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];
@@ -638,7 +650,7 @@
 		}
 
 		st->speclist[i].spec     = statspec;
-		st->speclist[i].grfid    = statspec->grfid;
+		st->speclist[i].grfid    = statspec->grffile->grfid;
 		st->speclist[i].localidx = statspec->localidx;
 	}
 
--- a/src/newgrf_station.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/newgrf_station.h	Tue Jun 12 11:56:35 2007 +0000
@@ -28,7 +28,7 @@
 typedef byte *StationLayout;
 
 struct StationSpec {
-	uint32 grfid; ///< ID of GRF file station belongs to.
+	const struct GRFFile *grffile; ///< ID of GRF file station belongs to.
 	int localidx; ///< Index within GRF file of station.
 
 	bool allocated; ///< Flag whether this station has been added to a station class list
--- a/src/news_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/news_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -128,10 +128,11 @@
 					DrawStringMultiCenter(215, ni->display_mode == NM_NORMAL ? 76 : 56,
 						ni->string_id, w->width - 4);
 				} else {
-					byte bk = _display_opt;
-					_display_opt &= ~DO_TRANS_BUILDINGS;
+					/* Back up transparency options to draw news view */
+					byte to_backup = _transparent_opt;
+					_transparent_opt = 0;
 					DrawWindowViewport(w);
-					_display_opt = bk;
+					_transparent_opt = to_backup;
 
 					/* Shade the viewport into gray, or color*/
 					vp = w->viewport;
--- a/src/npf.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/npf.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -7,6 +7,7 @@
 #include "bridge_map.h"
 #include "debug.h"
 #include "functions.h"
+#include "landscape.h"
 #include "npf.h"
 #include "aystar.h"
 #include "macros.h"
--- a/src/openttd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/openttd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -24,6 +24,7 @@
 #include "gfx.h"
 #include "gfxinit.h"
 #include "gui.h"
+#include "landscape.h"
 #include "station.h"
 #include "station_map.h"
 #include "town_map.h"
@@ -57,6 +58,7 @@
 #include "date.h"
 #include "clear_map.h"
 #include "fontcache.h"
+#include "newgrf.h"
 #include "newgrf_config.h"
 #include "newgrf_house.h"
 #include "player_face.h"
@@ -303,7 +305,10 @@
 	char filename[256];
 
 	_game_mode = GM_MENU;
-	CLRBITS(_display_opt, DO_TRANS_BUILDINGS); // don't make buildings transparent in intro
+
+	/* Clear transparency options */
+	_transparent_opt = 0;
+
 	_opt_ptr = &_opt_newgame;
 	ResetGRFConfig(false);
 
@@ -1583,7 +1588,7 @@
 
 				if (statspec != NULL) {
 					wp->stat_id = _m[wp->xy].m4 + 1;
-					wp->grfid = statspec->grfid;
+					wp->grfid = statspec->grffile->grfid;
 					wp->localidx = statspec->localidx;
 				} else {
 					/* No custom graphics set, so set to default. */
--- a/src/openttd.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/openttd.h	Tue Jun 12 11:56:35 2007 +0000
@@ -175,10 +175,18 @@
 	DO_SHOW_STATION_NAMES = 1 << 1,
 	DO_SHOW_SIGNS         = 1 << 2,
 	DO_FULL_ANIMATION     = 1 << 3,
-	DO_TRANS_BUILDINGS    = 1 << 4,
 	DO_FULL_DETAIL        = 1 << 5,
 	DO_WAYPOINTS          = 1 << 6,
-	DO_TRANS_SIGNS        = 1 << 7,
+};
+
+enum {
+	TO_SIGNS,
+	TO_TREES,
+	TO_HOUSES,
+	TO_INDUSTRIES,
+	TO_BUILDINGS,
+	TO_BRIDGES,
+	TO_STRUCTURES,
 };
 
 /* Landscape types */
@@ -409,6 +417,7 @@
 	WC_GENERATE_LANDSCAPE,
 	WC_GENERATE_PROGRESS_WINDOW,
 	WC_CONFIRM_POPUP_QUERY,
+	WC_TRANSPARENCY_TOOLBAR,
 };
 
 
--- a/src/pathfind.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/pathfind.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -8,6 +8,7 @@
 #include "station_map.h"
 #include "depot.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "tile.h"
 #include "pathfind.h"
--- a/src/players.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/players.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -821,8 +821,8 @@
 		}
 
 		/* This is the joining client who wants a new company */
-		if (_local_player != _network_playas) {
-			assert(_local_player == PLAYER_SPECTATOR && _network_playas == p->index);
+		if (_local_player != _network_playas && _network_playas == p->index) {
+			assert(_local_player == PLAYER_SPECTATOR);
 			SetLocalPlayer(p->index);
 			MarkWholeScreenDirty();
 		}
--- a/src/rail.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/rail.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file rail.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
@@ -79,7 +81,7 @@
 	{TRACKDIR_RIGHT_N,  TRACKDIR_RIGHT_S,  INVALID_TRACKDIR,  INVALID_TRACKDIR}
 };
 
-extern const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END] = { // TODO: replace magic with enums
+extern const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END] = {
 	{TRACKDIR_X_NE,     INVALID_TRACKDIR,  TRACKDIR_X_SW,     INVALID_TRACKDIR},
 	{INVALID_TRACKDIR,  TRACKDIR_Y_SE,     INVALID_TRACKDIR,  TRACKDIR_Y_NW},
 	{INVALID_TRACKDIR,  TRACKDIR_UPPER_E,  TRACKDIR_UPPER_W,  INVALID_TRACKDIR},
--- a/src/rail.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/rail.h	Tue Jun 12 11:56:35 2007 +0000
@@ -223,7 +223,7 @@
 	 * 1) All the sprites in a railset MUST be in the same order. This order
 	 *    is determined by normal rail. Check sprites 1005 and following for this order<p>
 	 * 2) The position where the railtype is loaded must always be the same, otherwise
-	 *    the offset will fail.<p>
+	 *    the offset will fail.
 	 * @note: Something more flexible might be desirable in the future.
 	 */
 	SpriteID total_offset;
@@ -240,10 +240,10 @@
 };
 
 
-// these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block
+/** these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block */
 enum {
-	NUM_SSD_ENTRY = 256, // max amount of blocks
-	NUM_SSD_STACK =  32, // max amount of blocks to check recursively
+	NUM_SSD_ENTRY = 256, ///< max amount of blocks
+	NUM_SSD_STACK =  32, ///< max amount of blocks to check recursively
 };
 
 /**
--- a/src/rail_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/rail_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file rail_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
@@ -77,8 +79,8 @@
 
 static bool CheckTrackCombination(TileIndex tile, TrackBits to_build, uint flags)
 {
-	TrackBits current; /* The current track layout */
-	TrackBits future; /* The track layout we want to build */
+	TrackBits current; // The current track layout
+	TrackBits future;  // The track layout we want to build
 	_error_message = STR_1001_IMPOSSIBLE_TRACK_COMBINATION;
 
 	if (!IsPlainRailTile(tile)) return false;
@@ -109,7 +111,7 @@
 
 static const TrackBits _valid_tileh_slopes[][15] = {
 
-// set of normal ones
+/* set of normal ones */
 {
 	TRACK_BIT_ALL,
 	TRACK_BIT_RIGHT,
@@ -131,7 +133,7 @@
 	TRACK_BIT_RIGHT,
 },
 
-// allowed rail for an evenly raised platform
+/* allowed rail for an evenly raised platform */
 {
 	TRACK_BIT_NONE,
 	TRACK_BIT_LEFT,
@@ -190,20 +192,20 @@
 static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
 {
 	if (IsSteepSlope(tileh)) {
-		if (existing == 0) {
+		if (_patches.build_on_slopes && existing == 0) {
 			TrackBits valid = TRACK_BIT_CROSS | (HASBIT(1 << SLOPE_STEEP_W | 1 << SLOPE_STEEP_E, tileh) ? TRACK_BIT_VERT : TRACK_BIT_HORZ);
 			if (valid & rail_bits) return _eco->GetPrice(CEconomy::TERRAFORM);
 		}
 	} else {
 		rail_bits |= existing;
 
-		// don't allow building on the lower side of a coast
+		/* don't allow building on the lower side of a coast */
 		if (IsTileType(tile, MP_WATER) &&
 				~_valid_tileh_slopes[1][tileh] & rail_bits) {
 			return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
 		}
 
-		// no special foundation
+		/* no special foundation */
 		if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0)
 			return 0;
 
@@ -252,12 +254,12 @@
 	switch (GetTileType(tile)) {
 		case MP_RAILWAY:
 			if (!CheckTrackCombination(tile, trackbit, flags) ||
-					!EnsureNoVehicle(tile)) {
+					!EnsureNoVehicleOnGround(tile)) {
 				return CMD_ERROR;
 			}
 			if (!IsTileOwner(tile, _current_player) ||
 					!IsCompatibleRail(GetRailType(tile), railtype)) {
-				// Get detailed error message
+				/* Get detailed error message */
 				return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 			}
 
@@ -288,7 +290,7 @@
 			}
 #undef M
 
-			if (!EnsureNoVehicle(tile)) return CMD_ERROR;
+			if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 
 			if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) {
 				if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS);
@@ -352,7 +354,7 @@
 			if (!IsLevelCrossing(tile) ||
 					GetCrossingRailBits(tile) != trackbit ||
 					(_current_player != OWNER_WATER && !CheckTileOwnership(tile)) ||
-					!EnsureNoVehicle(tile)) {
+					!EnsureNoVehicleOnGround(tile)) {
 				return CMD_ERROR;
 			}
 
@@ -368,7 +370,7 @@
 
 			if (!IsPlainRailTile(tile) ||
 					(_current_player != OWNER_WATER && !CheckTileOwnership(tile)) ||
-					!EnsureNoVehicle(tile)) {
+					!EnsureNoVehicleOnGround(tile)) {
 				return CMD_ERROR;
 			}
 
@@ -436,11 +438,11 @@
 
 	if (!ValParamTrackOrientation(TrackdirToTrack(*trackdir))) return CMD_ERROR;
 
-	// calculate delta x,y from start to end tile
+	/* calculate delta x,y from start to end tile */
 	dx = ex - x;
 	dy = ey - y;
 
-	// calculate delta x,y for the first direction
+	/* calculate delta x,y for the first direction */
 	trdx = _trackdelta[*trackdir].x;
 	trdy = _trackdelta[*trackdir].y;
 
@@ -449,7 +451,7 @@
 		trdy += _trackdelta[*trackdir ^ 1].y;
 	}
 
-	// validate the direction
+	/* validate the direction */
 	while (
 		(trdx <= 0 && dx > 0) ||
 		(trdx >= 0 && dx < 0) ||
@@ -465,8 +467,8 @@
 		}
 	}
 
-	// (for diagonal tracks, this is already made sure of by above test), but:
-	// for non-diagonal tracks, check if the start and end tile are on 1 line
+	/* (for diagonal tracks, this is already made sure of by above test), but:
+	 * for non-diagonal tracks, check if the start and end tile are on 1 line */
 	if (!IsDiagonalTrackdir(*trackdir)) {
 		trdx = _trackdelta[*trackdir].x;
 		trdy = _trackdelta[*trackdir].y;
@@ -519,7 +521,7 @@
 
 		tile += ToTileIndexDiff(_trackdelta[trackdir]);
 
-		// toggle railbit for the non-diagonal tracks
+		/* toggle railbit for the non-diagonal tracks */
 		if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
 	}
 
@@ -627,7 +629,7 @@
 	SignalVariant sigvar = (pre_signal ^ HASBIT(p1, 4)) ? SIG_SEMAPHORE : SIG_ELECTRIC;
 	int32 cost;
 
-	if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicle(tile))
+	if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicleOnGround(tile))
 		return CMD_ERROR;
 
 	/* Protect against invalid signal copying */
@@ -653,35 +655,35 @@
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
 	if (!HasSignalOnTrack(tile, track)) {
-		// build new signals
+		/* build new signals */
 		cost = _eco->GetPrice(CEconomy::BUILD_SIGNALS);
 	} else {
 		if (p2 != 0 && sigvar != GetSignalVariant(tile)) {
-			// convert signals <-> semaphores
+			/* convert signals <-> semaphores */
 			cost = _eco->GetPrice(CEconomy::BUILD_SIGNALS) + _eco->GetPrice(CEconomy::REMOVE_SIGNALS);
 		} else {
-			// it is free to change orientation/pre-exit-combo signals
+			/* it is free to change orientation/pre-exit-combo signals */
 			cost = 0;
 		}
 	}
 
 	if (flags & DC_EXEC) {
 		if (!HasSignals(tile)) {
-			// there are no signals at all on this tile yet
+			/* there are no signals at all on this tile yet */
 			SetHasSignals(tile, true);
 			_m[tile].m2 |= 0xF0;              // all signals are on
-			_m[tile].m3 &= ~0xF0;          // no signals built by default
+			_m[tile].m3 &= ~0xF0;             // no signals built by default
 			SetSignalType(tile, SIGTYPE_NORMAL);
 			SetSignalVariant(tile, sigvar);
 		}
 
 		if (p2 == 0) {
 			if (!HasSignalOnTrack(tile, track)) {
-				// build new signals
+				/* build new signals */
 				_m[tile].m3 |= SignalOnTrack(track);
 			} else {
 				if (pre_signal) {
-					// cycle between normal -> pre -> exit -> combo -> ...
+					/* cycle between normal -> pre -> exit -> combo -> ... */
 					SignalType type = GetSignalType(tile);
 
 					SetSignalType(tile, type == SIGTYPE_COMBO ? SIGTYPE_NORMAL : (SignalType)(type + 1));
@@ -745,12 +747,12 @@
 
 	track = TrackdirToTrack(trackdir); /* trackdir might have changed, keep track in sync */
 
-	// copy the signal-style of the first rail-piece if existing
+	/* copy the signal-style of the first rail-piece if existing */
 	if (HasSignals(tile)) {
 		signals = _m[tile].m3 & SignalOnTrack(track);
 		if (signals == 0) signals = SignalOnTrack(track); /* Can this actually occur? */
 
-		// copy signal/semaphores style (independent of CTRL)
+		/* copy signal/semaphores style (independent of CTRL) */
 		semaphores = GetSignalVariant(tile) != SIG_ELECTRIC;
 	} else { // no signals exist, drag a two-way signal stretch
 		signals = SignalOnTrack(track);
@@ -766,7 +768,7 @@
 	 * remove     - 1 remove signals, 0 build signals */
 	signal_ctr = total_cost = 0;
 	for (;;) {
-		// only build/remove signals with the specified density
+		/* only build/remove signals with the specified density */
 		if (signal_ctr % signal_density == 0) {
 			uint32 p1 = GB(TrackdirToTrack(trackdir), 0, 3);
 			SB(p1, 3, 1, mode);
@@ -785,7 +787,7 @@
 		tile += ToTileIndexDiff(_trackdelta[trackdir]);
 		signal_ctr++;
 
-		// toggle railbit for the non-diagonal tracks (|, -- tracks)
+		/* toggle railbit for the non-diagonal tracks (|, -- tracks) */
 		if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
 	}
 
@@ -814,7 +816,7 @@
 
 	if (!ValParamTrackOrientation(track) ||
 			!IsTileType(tile, MP_RAILWAY) ||
-			!EnsureNoVehicle(tile) ||
+			!EnsureNoVehicleOnGround(tile) ||
 			!HasSignalOnTrack(tile, track)) {
 		return CMD_ERROR;
 	}
@@ -871,17 +873,17 @@
 
 	if (GetRailType(tile) == totype) return CMD_ERROR;
 
-	if (!EnsureNoVehicle(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
+	if (!EnsureNoVehicleOnGround(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
 
-	// 'hidden' elrails can't be downgraded to normal rail when elrails are disabled
+	/* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
 	if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
 
-	// change type.
+	/* change type. */
 	if (exec) {
 		SetRailType(tile, totype);
 		MarkTileDirtyByTile(tile);
 
-		// notify YAPF about the track layout change
+		/* notify YAPF about the track layout change */
 		TrackBits tracks = GetTrackBits(tile);
 		while (tracks != TRACK_BIT_NONE) {
 			YapfNotifyTrackLayoutChange(tile, RemoveFirstTrack(&tracks));
@@ -927,7 +929,7 @@
 	if (!ValParamRailtype(p2)) return CMD_ERROR;
 	if (p1 >= MapSize()) return CMD_ERROR;
 
-	// make sure sx,sy are smaller than ex,ey
+	/* make sure sx,sy are smaller than ex,ey */
 	ex = TileX(tile);
 	ey = TileY(tile);
 	sx = TileX(p1);
@@ -975,7 +977,7 @@
 	if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
 		return CMD_ERROR;
 
-	if (!EnsureNoVehicle(tile))
+	if (!EnsureNoVehicleOnGround(tile))
 		return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
@@ -1192,7 +1194,7 @@
 	SpriteID pal = PAL_NONE;
 	bool junction = false;
 
-	// Select the sprite to use.
+	/* Select the sprite to use. */
 	(image = rti->base_sprites.track_y, track == TRACK_BIT_Y) ||
 	(image++,                           track == TRACK_BIT_X) ||
 	(image++,                           track == TRACK_BIT_UPPER) ||
@@ -1216,8 +1218,8 @@
 
 		if (foundation != 0) DrawFoundation(ti, foundation);
 
-		// DrawFoundation() modifies ti.
-		// Default sloped sprites..
+		/* DrawFoundation() modifies it.
+		 * Default sloped sprites.. */
 		if (ti->tileh != SLOPE_FLAT)
 			image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y;
 	}
@@ -1230,7 +1232,7 @@
 
 	DrawGroundSprite(image, pal);
 
-	// Draw track pieces individually for junction tiles
+	/* Draw track pieces individually for junction tiles */
 	if (junction) {
 		if (track & TRACK_BIT_X)     DrawGroundSprite(rti->base_sprites.single_y, PAL_NONE);
 		if (track & TRACK_BIT_Y)     DrawGroundSprite(rti->base_sprites.single_x, PAL_NONE);
@@ -1292,7 +1294,7 @@
 
 		if (HasSignals(ti->tile)) DrawSignals(ti->tile, rails);
 	} else {
-		// draw depot/waypoint
+		/* draw depot/waypoint */
 		const DrawTileSprites* dts;
 		const DrawTileSeqStruct* dtss;
 		uint32 relocation;
@@ -1307,8 +1309,8 @@
 			image = dts->ground_sprite;
 			if (image != SPR_FLAT_GRASS_TILE) image += rti->total_offset;
 
-			// adjust ground tile for desert
-			// don't adjust for snow, because snow in depots looks weird
+			/* adjust ground tile for desert
+			 * don't adjust for snow, because snow in depots looks weird */
 			if (IsSnowRailGround(ti->tile) && _opt.landscape == LT_TROPIC) {
 				if (image != SPR_FLAT_GRASS_TILE) {
 					image += rti->snow_offset; // tile with tracks
@@ -1317,12 +1319,12 @@
 				}
 			}
 		} else {
-			// look for customization
+			/* look for customization */
 			byte stat_id = GetWaypointByTile(ti->tile)->stat_id;
 			const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, stat_id);
 
 			if (statspec != NULL) {
-				// emulate station tile - open with building
+				/* emulate station tile - open with building */
 				const Station* st = ComposeWaypointStation(ti->tile);
 				uint gfx = 2;
 
@@ -1352,7 +1354,7 @@
 				}
 			} else {
 default_waypoint:
-				// There is no custom layout, fall back to the default graphics
+				/* There is no custom layout, fall back to the default graphics */
 				dts = &_waypoint_gfx_table[GetWaypointAxis(ti->tile)];
 				relocation = 0;
 				image = dts->ground_sprite + rti->total_offset;
@@ -1377,7 +1379,7 @@
 				image += relocation;
 			}
 
-			if (_display_opt & DO_TRANS_BUILDINGS) {
+			if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
 				SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 				pal = PALETTE_TO_TRANSPARENT;
 			} else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) {
@@ -1439,15 +1441,15 @@
 	bool stop;
 	bool has_presignal;
 
-	// presignal info
+	/* presignal info */
 	int presignal_exits;
 	int presignal_exits_free;
 
-	// these are used to keep track of the signals that change.
+	/* these are used to keep track of the signals that change. */
 	TrackdirByte bit[NUM_SSD_ENTRY];
 	TileIndex tile[NUM_SSD_ENTRY];
 
-	// these are used to keep track of the stack that modifies presignals recursively
+	/* these are used to keep track of the stack that modifies presignals recursively */
 	TileIndex next_tile[NUM_SSD_STACK];
 	DiagDirectionByte next_dir[NUM_SSD_STACK];
 
@@ -1459,22 +1461,22 @@
 
 	if (!IsTileType(tile, MP_RAILWAY)) return false;
 
-	// the tile has signals?
+	/* the tile has signals? */
 	if (HasSignalOnTrack(tile, TrackdirToTrack(trackdir))) {
 		if (HasSignalOnTrackdir(tile, ReverseTrackdir(trackdir))) {
-			// yes, add the signal to the list of signals
+			/* yes, add the signal to the list of signals */
 			if (ssd->cur != NUM_SSD_ENTRY) {
 				ssd->tile[ssd->cur] = tile; // remember the tile index
 				ssd->bit[ssd->cur] = trackdir; // and the controlling bit number
 				ssd->cur++;
 			}
 
-			// remember if this block has a presignal.
+			/* remember if this block has a presignal. */
 			ssd->has_presignal |= IsPresignalEntry(tile);
 		}
 
 		if (HasSignalOnTrackdir(tile, trackdir) && IsPresignalExit(tile)) {
-			// this is an exit signal that points out from the segment
+			/* this is an exit signal that points out from the segment */
 			ssd->presignal_exits++;
 			if (GetSignalStateByTrackdir(tile, trackdir) != SIGNAL_STATE_RED)
 				ssd->presignal_exits_free++;
@@ -1532,21 +1534,21 @@
 
 		dest.track = 1 << (direction & 1); // get the trackbit the vehicle would have if it has not entered the tunnel yet (ie is still visible)
 
-		// check for a vehicle with that trackdir on the start tile of the tunnel
+		/* check for a vehicle with that trackdir on the start tile of the tunnel */
 		if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL) return true;
 
-		// check for a vehicle with that trackdir on the end tile of the tunnel
+		/* check for a vehicle with that trackdir on the end tile of the tunnel */
 		if (VehicleFromPos(end, &dest, SignalVehicleCheckProc) != NULL) return true;
 
-		// now check all tiles from start to end for a warping vehicle
-		// NOTE: the hashes for tiles may overlap, so this could maybe be optimised a bit by not checking every tile?
+		/* now check all tiles from start to end for a warping vehicle
+		 * NOTE: the hashes for tiles may overlap, so this could maybe be optimised a bit by not checking every tile? */
 		dest.track = 0x40;   //Vehicle inside a tunnel or on a bridge
 		for (; tile != end; tile += TileOffsByDiagDir(direction)) {
 			if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL)
 				return true;
 		}
 
-		// no vehicle found
+		/* no vehicle found */
 		return false;
 	}
 
@@ -1601,39 +1603,39 @@
 {
 	int i;
 
-	// thinking about presignals...
-	// the presignal is green if,
-	//   if no train is in the segment AND
-	//   there is at least one green exit signal OR
-	//   there are no exit signals in the segment
+	/* thinking about presignals...
+	 * the presignal is green if,
+	 *   if no train is in the segment AND
+	 *   there is at least one green exit signal OR
+	 *   there are no exit signals in the segment */
 
-	// then mark the signals in the segment accordingly
+	/* then mark the signals in the segment accordingly */
 	for (i = 0; i != ssd->cur; i++) {
 		TileIndex tile = ssd->tile[i];
 		byte bit = SignalAgainstTrackdir(ssd->bit[i]);
 		uint16 m2 = _m[tile].m2;
 
-		// presignals don't turn green if there is at least one presignal exit and none are free
+		/* presignals don't turn green if there is at least one presignal exit and none are free */
 		if (IsPresignalEntry(tile)) {
 			int ex = ssd->presignal_exits, exfree = ssd->presignal_exits_free;
 
-			// subtract for dual combo signals so they don't count themselves
+			/* subtract for dual combo signals so they don't count themselves */
 			if (IsPresignalExit(tile) && HasSignalOnTrackdir(tile, ssd->bit[i])) {
 				ex--;
 				if (GetSignalStateByTrackdir(tile, ssd->bit[i]) != SIGNAL_STATE_RED) exfree--;
 			}
 
-			// if we have exits and none are free, make red.
+			/* if we have exits and none are free, make red. */
 			if (ex && !exfree) goto make_red;
 		}
 
-		// check if the signal is unaffected.
+		/* check if the signal is unaffected. */
 		if (ssd->stop) {
 make_red:
-			// turn red
+			/* turn red */
 			if ((bit & m2) == 0) continue;
 		} else {
-			// turn green
+			/* turn green */
 			if ((bit & m2) != 0) continue;
 		}
 
@@ -1648,7 +1650,7 @@
 			}
 		}
 
-		// it changed, so toggle it
+		/* it changed, so toggle it */
 		_m[tile].m2 = m2 ^ bit;
 		MarkTileDirtyByTile(tile);
 	}
@@ -1663,23 +1665,23 @@
 	ssd.cur_stack = 0;
 
 	for (;;) {
-		// go through one segment and update all signals pointing into that segment.
+		/* go through one segment and update all signals pointing into that segment. */
 		ssd.cur = ssd.presignal_exits = ssd.presignal_exits_free = 0;
 		ssd.has_presignal = false;
 
 		FollowTrack(tile, 0xC000 | TRANSPORT_RAIL, direction, SetSignalsEnumProc, SetSignalsAfterProc, &ssd);
 		ChangeSignalStates(&ssd);
 
-		// remember the result only for the first iteration.
+		/* remember the result only for the first iteration. */
 		if (result < 0) {
-			// stay in depot while segment is occupied or while all presignal exits are blocked
+			/* stay in depot while segment is occupied or while all presignal exits are blocked */
 			result = ssd.stop || (ssd.presignal_exits > 0 && ssd.presignal_exits_free == 0);
 		}
 
-		// if any exit signals were changed, we need to keep going to modify the stuff behind those.
+		/* if any exit signals were changed, we need to keep going to modify the stuff behind those. */
 		if (ssd.cur_stack == 0) break;
 
-		// one or more exit signals were changed, so we need to update another segment too.
+		/* one or more exit signals were changed, so we need to update another segment too. */
 		tile = ssd.next_tile[--ssd.cur_stack];
 		direction = ssd.next_dir[ssd.cur_stack];
 	}
@@ -1772,7 +1774,7 @@
 
 	new_ground = RAIL_GROUND_GRASS;
 
-	if (old_ground != RAIL_GROUND_BARREN) { /* wait until bottom is green */
+	if (old_ground != RAIL_GROUND_BARREN) { // wait until bottom is green
 		/* determine direction of fence */
 		TrackBits rail = GetTrackBits(tile);
 
@@ -1966,7 +1968,7 @@
 	DiagDirection dir;
 	int length;
 
-	// this routine applies only to trains in depot tiles
+	/* this routine applies only to trains in depot tiles */
 	if (v->type != VEH_TRAIN || !IsTileDepotType(tile, TRANSPORT_RAIL)) return VETSB_CONTINUE;
 
 	/* depot direction */
--- a/src/rail_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/rail_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -7,6 +7,7 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "landscape.h"
 #include "date.h"
 #include "map.h"
 #include "tile.h"
--- a/src/rail_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/rail_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file rail_map.h Hides the direct accesses to the map array with map accessors */
+
 #ifndef RAIL_MAP_H
 #define RAIL_MAP_H
 
--- a/src/railtypes.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/railtypes.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,12 +1,12 @@
 /* $Id$ */
 
-#ifndef RAILTYPES_H
-#define RAILTYPES_H
-
 /** @file railtypes.h
  * All the railtype-specific information is stored here.
  */
 
+#ifndef RAILTYPES_H
+#define RAILTYPES_H
+
 /** Global Railtype definition
  */
 RailtypeInfo _railtypes[] = {
--- a/src/resource.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/resource.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file resource.h */
+
 //{{NO_DEPENDENCIES}}
 // Microsoft Developer Studio generated include file.
 // Used by ttd.rc
--- a/src/road.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/road.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file road.h */
+
 #ifndef ROAD_H
 #define ROAD_H
 
--- a/src/road_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/road_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file road_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
@@ -46,16 +48,16 @@
 
 	if (_game_mode == GM_EDITOR) return true;
 
-	// Only do the special processing for actual players.
+	/* Only do the special processing for actual players. */
 	if (!IsValidPlayer(_current_player)) return true;
 
-	// Only do the special processing if the road is owned
-	// by a town
+	/* Only do the special processing if the road is owned
+	 * by a town */
 	if (owner != OWNER_TOWN) return (owner == OWNER_NONE) || CheckOwnership(owner);
 
 	if (_cheats.magic_bulldozer.value) return true;
 
-	// Get a bitmask of which neighbouring roads has a tile
+	/* 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;
@@ -63,12 +65,12 @@
 	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 0 or 1 bits are set in n, or if no bits that match the bits to remove,
-	// then allow it
+	/* If 0 or 1 bits are set in n, or if no bits that match the bits to remove,
+	 * then allow it */
 	if ((n & (n - 1)) != 0 && (n & remove) != 0) {
 		Town *t;
 		*edge_road = false;
-		// you can remove all kind of roads with extra dynamite
+		/* you can remove all kind of roads with extra dynamite */
 		if (_patches.extra_dynamite) return true;
 
 		t = ClosestTownFromTile(tile, (uint)-1);
@@ -93,7 +95,7 @@
  */
 int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	// cost for removing inner/edge -roads
+	/* cost for removing inner/edge -roads */
 	static const uint16 road_remove_cost[2] = {50, 18};
 
 	Owner owner;
@@ -118,10 +120,10 @@
 
 	if (!CheckAllowRemoveRoad(tile, pieces, &edge_road)) return CMD_ERROR;
 
-	if (!EnsureNoVehicle(tile)) return CMD_ERROR;
+	if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 
-	// check if you're allowed to remove the street owned by a town
-	// removal allowance depends on difficulty setting
+	/* check if you're allowed to remove the street owned by a town
+	 * removal allowance depends on difficulty setting */
 	if (!CheckforTownRating(flags, t, ROAD_REMOVE)) return CMD_ERROR;
 
 	switch (GetRoadTileType(tile)) {
@@ -137,7 +139,7 @@
 				c |= (RoadBits)((c & 0x3) << 2);
 			}
 
-			// limit the bits to delete to the existing bits.
+			/* limit the bits to delete to the existing bits. */
 			c &= present;
 			if (c == 0) return CMD_ERROR;
 
@@ -178,7 +180,7 @@
 
 
 static const RoadBits _valid_tileh_slopes_road[][15] = {
-	// set of normal ones
+	/* set of normal ones */
 	{
 		ROAD_ALL, ROAD_NONE, ROAD_NONE,
 		ROAD_X,   ROAD_NONE, ROAD_NONE,  // 3, 4, 5
@@ -186,7 +188,7 @@
 		ROAD_Y,   ROAD_NONE, ROAD_NONE,  // 9, 10, 11
 		ROAD_X,   ROAD_NONE, ROAD_NONE
 	},
-	// allowed road for an evenly raised platform
+	/* allowed road for an evenly raised platform */
 	{
 		ROAD_NONE,
 		ROAD_SW | ROAD_NW,
@@ -216,7 +218,7 @@
 
 	if (IsSteepSlope(tileh)) {
 		if (existing == 0) {
-			// force full pieces.
+			/* force full pieces. */
 			*pieces |= (RoadBits)((*pieces & 0xC) >> 2);
 			*pieces |= (RoadBits)((*pieces & 0x3) << 2);
 			if (*pieces == ROAD_X || *pieces == ROAD_Y) return _eco->GetPrice(CEconomy::TERRAFORM);
@@ -225,21 +227,21 @@
 	}
 	road_bits = *pieces | existing;
 
-	// no special foundation
+	/* no special foundation */
 	if ((~_valid_tileh_slopes_road[0][tileh] & road_bits) == 0) {
-		// force that all bits are set when we have slopes
+		/* force that all bits are set when we have slopes */
 		if (tileh != SLOPE_FLAT) *pieces |= _valid_tileh_slopes_road[0][tileh];
 		return 0; // no extra cost
 	}
 
-	// foundation is used. Whole tile is leveled up
+	/* foundation is used. Whole tile is leveled up */
 	if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) {
 		return existing != 0 ? 0 : _eco->GetPrice(CEconomy::TERRAFORM);
 	}
 
-	// partly leveled up tile, only if there's no road on that tile
+	/* partly leveled up tile, only if there's no road on that tile */
 	if (existing == 0 && (tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)) {
-		// force full pieces.
+		/* force full pieces. */
 		*pieces |= (RoadBits)((*pieces & 0xC) >> 2);
 		*pieces |= (RoadBits)((*pieces & 0x3) << 2);
 		if (*pieces == ROAD_X || *pieces == ROAD_Y) return _eco->GetPrice(CEconomy::TERRAFORM);
@@ -279,7 +281,7 @@
 					if ((existing & pieces) == pieces) {
 						return_cmd_error(STR_1007_ALREADY_BUILT);
 					}
-					if (!EnsureNoVehicle(tile)) return CMD_ERROR;
+					if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 					break;
 
 				case ROAD_TILE_CROSSING:
@@ -323,7 +325,7 @@
 				default: goto do_clear;
 			}
 
-			if (!EnsureNoVehicle(tile)) return CMD_ERROR;
+			if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 
 			if (flags & DC_EXEC) {
 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
@@ -350,7 +352,7 @@
 	cost += ret;
 
 	if (IsTileType(tile, MP_STREET)) {
-		// Don't put the pieces that already exist
+		/* Don't put the pieces that already exist */
 		pieces &= ComplementRoadBits(existing);
 		cost += CountRoadBits(pieces) * _eco->GetPrice(CEconomy::BUILD_ROAD);
 	} else {
@@ -381,15 +383,15 @@
  */
 int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
 {
-	// not a railroad crossing?
+	/* not a railroad crossing? */
 	if (!IsLevelCrossing(tile)) return CMD_ERROR;
 
-	// not owned by me?
-	if (!CheckTileOwnership(tile) || !EnsureNoVehicle(tile)) return CMD_ERROR;
+	/* not owned by me? */
+	if (!CheckTileOwnership(tile) || !EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 
 	if (GetRailType(tile) == totype) return CMD_ERROR;
 
-	// 'hidden' elrails can't be downgraded to normal rail when elrails are disabled
+	/* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
 	if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
 
 	if (exec) {
@@ -435,7 +437,7 @@
 
 	cost = 0;
 	tile = start_tile;
-	// Start tile is the small number.
+	/* Start tile is the small number. */
 	for (;;) {
 		RoadBits bits = HASBIT(p2, 2) ? ROAD_Y : ROAD_X;
 
@@ -491,14 +493,14 @@
 
 	cost = 0;
 	tile = start_tile;
-	// Start tile is the small number.
+	/* Start tile is the small number. */
 	for (;;) {
 		RoadBits bits = HASBIT(p2, 2) ? ROAD_Y : ROAD_X;
 
 		if (tile == end_tile && !HASBIT(p2, 1)) bits &= ROAD_NW | ROAD_NE;
 		if (tile == start_tile && HASBIT(p2, 0)) bits &= ROAD_SE | ROAD_SW;
 
-		// try to remove the halves.
+		/* try to remove the halves. */
 		if (bits != 0) {
 			ret = DoCommand(tile, bits, 0, flags, CMD_REMOVE_ROAD);
 			if (!CmdFailed(ret)) cost += ret;
@@ -627,13 +629,13 @@
 {
 	uint i;
 
-	// normal level sloped building
+	/* normal level sloped building */
 	if (!IsSteepSlope(tileh) &&
 			(~_valid_tileh_slopes_road[1][tileh] & bits) == 0) {
 		return tileh;
 	}
 
-	// inclined sloped building
+	/* inclined sloped building */
 	switch (bits) {
 		case ROAD_X: i = 0; break;
 		case ROAD_Y: i = 1; break;
@@ -678,8 +680,8 @@
 
 		if (foundation != 0) DrawFoundation(ti, foundation);
 
-		// DrawFoundation() modifies ti.
-		// Default sloped sprites..
+		/* DrawFoundation() modifies ti.
+		 * Default sloped sprites.. */
 		if (ti->tileh != SLOPE_FLAT) image = _road_sloped_sprites[ti->tileh - 1] + 0x53F;
 	}
 
@@ -701,15 +703,15 @@
 	DrawGroundSprite(image, pal);
 
 	if (HasRoadWorks(ti->tile)) {
-		// Road works
+		/* Road works */
 		DrawGroundSprite(road & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_NONE);
 		return;
 	}
 
-	// Return if full detail is disabled, or we are zoomed fully out.
+	/* Return if full detail is disabled, or we are zoomed fully out. */
 	if (!(_display_opt & DO_FULL_DETAIL) || _cur_dpi->zoom == 2) return;
 
-	// Draw extra details.
+	/* Draw extra details. */
 	for (drts = _road_display_table[roadside][road]; drts->image != 0; drts++) {
 		int x = ti->x | drts->subcoord_x;
 		int y = ti->y | drts->subcoord_y;
@@ -769,7 +771,7 @@
 				SpriteID image = dtss->image;
 				SpriteID pal;
 
-				if (_display_opt & DO_TRANS_BUILDINGS) {
+				if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
 					SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 					pal = PALETTE_TO_TRANSPARENT;
 				} else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) {
@@ -902,11 +904,11 @@
 		if (t != NULL) {
 			grp = t->GetRadiusGroup(tile);
 
-			// Show an animation to indicate road work
+			/* Show an animation to indicate road work */
 			if (t->road_build_months != 0 &&
 					(DistanceManhattan(t->xy, tile) < 8 || grp != 0) &&
 					GetRoadTileType(tile) == ROAD_TILE_NORMAL && (GetRoadBits(tile) == ROAD_X || GetRoadBits(tile) == ROAD_Y)) {
-				if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicle(tile) && CHANCE16(1, 20)) {
+				if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicleOnGround(tile) && CHANCE16(1, 20)) {
 					StartRoadWorks(tile);
 
 					SndPlayTileFx(SND_21_JACKHAMMER, tile);
--- a/src/road_cmd.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/road_cmd.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file road_cmd.h */
+
 #ifndef ROAD_CMD_H
 #define ROAD_CMD_H
 
--- a/src/road_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/road_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file road_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "road_cmd.h"
--- a/src/road_map.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/road_map.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,9 +1,12 @@
 /* $Id$ */
 
+/** @file road_map.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
 #include "functions.h"
+#include "landscape.h"
 #include "road_map.h"
 #include "station.h"
 #include "tunnel_map.h"
@@ -45,7 +48,7 @@
 {
 	uint32 r;
 
-	// Don't allow local authorities to build roads through road depots or road stops.
+	/* Don't allow local authorities to build roads through road depots or road stops. */
 	if ((IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) || (IsTileType(tile, MP_STATION) && !IsDriveThroughStopTile(tile))) {
 		return TRACK_BIT_NONE;
 	}
--- a/src/road_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/road_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file road_map.h */
+
 #ifndef ROAD_MAP_H
 #define ROAD_MAP_H
 
@@ -171,10 +173,19 @@
  * - road tunnels: entrance is treated as road piece
  * - bridge ramps: start of the ramp is treated as road piece
  * - bridge middle parts: bridge itself is ignored
+ * @param tile the tile to get the road bits for
+ * @return the road bits of the given tile
  */
-RoadBits GetAnyRoadBits(TileIndex);
+RoadBits GetAnyRoadBits(TileIndex tile);
 
-
+/**
+ * Get the accessible track bits for the given tile.
+ * Special behaviour:
+ *  - road depots: no track bits
+ *  - non-drive-through stations: no track bits
+ * @param tile the tile to get the track bits for
+ * @return the track bits for the given tile
+ */
 TrackBits GetAnyRoadTrackBits(TileIndex tile);
 
 
--- a/src/roadveh.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/roadveh.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file src/roadveh.h Road vehicle states */
+
 #ifndef ROADVEH_H
 #define ROADVEH_H
 
--- a/src/roadveh_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/roadveh_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,9 +1,12 @@
 /* $Id$ */
 
+/** @file roadveh_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
 #include "functions.h"
+#include "landscape.h"
 #include "road_map.h"
 #include "roadveh.h"
 #include "station_map.h"
@@ -129,7 +132,7 @@
 	UnitID unit_num;
 	Engine *e;
 
-	if (!IsEngineBuildable(p1, VEH_ROAD, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
+	if (!IsEngineBuildable(p1, VEH_ROAD, _current_player)) return_cmd_error(STR_ROAD_VEHICLE_NOT_AVAILABLE);
 
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 
@@ -533,7 +536,7 @@
 {
 	byte new_z, old_z;
 
-	// need this hint so it returns the right z coordinate on bridges.
+	/* need this hint so it returns the right z coordinate on bridges. */
 	v->x_pos = x;
 	v->y_pos = y;
 	new_z = GetSlopeZ(x, y);
@@ -663,7 +666,7 @@
 
 	switch (v->current_order.type) {
 		case OT_GOTO_DEPOT:
-			// Let a depot order in the orderlist interrupt.
+			/* Let a depot order in the orderlist interrupt. */
 			if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
 			if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
 					!VehicleNeedsService(v)) {
@@ -723,7 +726,7 @@
 				}
 				v->dest_tile = dest;
 			} else {
-				// There is no stop left at the station, so don't even TRY to go there
+				/* There is no stop left at the station, so don't even TRY to go there */
 				v->cur_order_index++;
 				v->dest_tile = 0;
 			}
@@ -828,10 +831,10 @@
 	rvf.veh = v;
 	u = (Vehicle*)VehicleFromPos(TileVirtXY(x, y), &rvf, EnumCheckRoadVehClose);
 
-	// This code protects a roadvehicle from being blocked for ever
-	//  If more than 1480 / 74 days a road vehicle is blocked, it will
-	//  drive just through it. The ultimate backup-code of TTD.
-	// It can be disabled.
+	/* This code protects a roadvehicle from being blocked for ever
+	 * If more than 1480 / 74 days a road vehicle is blocked, it will
+	 * drive just through it. The ultimate backup-code of TTD.
+	 * It can be disabled. */
 	if (u == NULL) {
 		v->u.road.blocked_ctr = 0;
 		return NULL;
@@ -881,13 +884,13 @@
 	uint spd = v->cur_speed + 1 + (v->u.road.overtaking != 0 ? 1 : 0);
 	byte t;
 
-	// Clamp
+	/* Clamp */
 	spd = min(spd, v->max_speed);
 	if (v->u.road.state == RVSB_WORMHOLE && !(v->vehstatus & VS_HIDDEN)) {
 		spd = min(spd, GetBridge(GetBridgeType(v->tile))->speed * 2);
 	}
 
-	//updates statusbar only if speed have changed to save CPU time
+	/* updates statusbar only if speed have changed to save CPU time */
 	if (spd != v->cur_speed) {
 		v->cur_speed = spd;
 		if (_patches.vehicle_speed) {
@@ -895,7 +898,7 @@
 		}
 	}
 
-	// Decrease somewhat when turning
+	/* Decrease somewhat when turning */
 	if (!(v->direction & 1)) spd = spd * 3 >> 2;
 
 	if (spd == 0) return false;
@@ -1153,9 +1156,9 @@
 
 		ftd = PerfNPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, &fstd, TRANSPORT_ROAD, v->owner, INVALID_RAILTYPE);
 		if (ftd.best_trackdir == INVALID_TRACKDIR) {
-			/* We are already at our target. Just do something */
-			//TODO: maybe display error?
-			//TODO: go straight ahead if possible?
+			/* We are already at our target. Just do something
+			 * @todo: maybe display error?
+			 * @todo: go straight ahead if possible? */
 			return_track(FindFirstBit2x64(trackdirs));
 		} else {
 			/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
@@ -1223,10 +1226,10 @@
 {
 	uint dist;
 	if (_patches.yapf.road_use_yapf) {
-		// use YAPF
+		/* use YAPF */
 		dist = YapfRoadVehDistanceToTile(v, tile);
 	} else {
-		// use NPF
+		/* use NPF */
 		NPFFindStationOrTileData fstd;
 		Trackdir trackdir = GetVehicleTrackdir(v);
 		assert(trackdir != INVALID_TRACKDIR);
@@ -1235,7 +1238,7 @@
 		fstd.station_index = INVALID_STATION; // indicates that the destination is a tile, not a station
 
 		dist = NPFRouteToStationOrTile(v->tile, trackdir, &fstd, TRANSPORT_ROAD, v->owner, INVALID_RAILTYPE).best_path_dist;
-		// change units from NPF_TILE_LENGTH to # of tiles
+		/* change units from NPF_TILE_LENGTH to # of tiles */
 		if (dist != UINT_MAX)
 			dist = (dist + NPF_TILE_LENGTH - 1) / NPF_TILE_LENGTH;
 	}
@@ -1277,11 +1280,11 @@
 	int x,y;
 	uint32 r;
 
-	// decrease counters
+	/* decrease counters */
 	v->tick_counter++;
 	if (v->u.road.reverse_ctr != 0) v->u.road.reverse_ctr--;
 
-	// handle crashed
+	/* handle crashed */
 	if (v->u.road.crashed_ctr != 0) {
 		RoadVehIsCrashed(v);
 		return;
@@ -1289,7 +1292,7 @@
 
 	RoadVehCheckTrainCrash(v);
 
-	// road vehicle has broken down?
+	/* road vehicle has broken down? */
 	if (v->breakdown_ctr != 0) {
 		if (v->breakdown_ctr <= 2) {
 			HandleBrokenRoadVeh(v);
@@ -1628,9 +1631,9 @@
 			/* We are leaving the correct station */
 			ClearSlot(v);
 		} else if (v->u.road.slot != NULL) {
-			/* We are leaving the wrong station */
-			//XXX The question is .. what to do? Actually we shouldn't be here
-			//but I guess we need to clear the slot
+			/* We are leaving the wrong station
+			 * XXX The question is .. what to do? Actually we shouldn't be here
+			 * but I guess we need to clear the slot */
 			DEBUG(ms, 0, "Vehicle %d (index %d) arrived at wrong stop", v->unitnumber, v->index);
 			if (v->tile != v->dest_tile) {
 				DEBUG(ms, 2, " current tile 0x%X is not destination tile 0x%X. Route problem", v->tile, v->dest_tile);
@@ -1692,13 +1695,13 @@
 	if (v->vehstatus & VS_STOPPED) return;
 	if (_patches.gotodepot && VehicleHasDepotOrders(v)) return;
 
-	// Don't interfere with a depot visit scheduled by the user, or a
-	// depot visit by the order list.
+	/* Don't interfere with a depot visit scheduled by the user, or a
+	 * depot visit by the order list. */
 	if (v->current_order.type == OT_GOTO_DEPOT &&
 			(v->current_order.flags & (OF_HALT_IN_DEPOT | OF_PART_OF_ORDERS)) != 0)
 		return;
 
-	// If we already got a slot at a stop, use that FIRST, and go to a depot later
+	/* If we already got a slot at a stop, use that FIRST, and go to a depot later */
 	if (v->u.road.slot != NULL) return;
 
 	if (IsRoadVehInDepot(v)) {
@@ -1706,7 +1709,7 @@
 		return;
 	}
 
-	// XXX If we already have a depot order, WHY do we search over and over?
+	/* XXX If we already have a depot order, WHY do we search over and over? */
 	depot = FindClosestRoadDepot(v);
 
 	if (depot == NULL || DistanceManhattan(v->tile, depot->xy) > 12) {
@@ -1743,7 +1746,7 @@
 
 	CheckOrders(v);
 
-	//Current slot has expired
+	/* Current slot has expired */
 	if (v->current_order.type == OT_GOTO_STATION && v->u.road.slot != NULL && v->u.road.slot_age-- == 0) {
 		DEBUG(ms, 3, "Slot expired for vehicle %d (index %d) at stop 0x%X",
 			v->unitnumber, v->index, v->u.road.slot->xy);
--- a/src/roadveh_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/roadveh_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file roadveh_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -34,7 +36,7 @@
 		StringID str;
 
 		SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
-		// disable service-scroller when interval is set to disabled
+		/* disable service-scroller when interval is set to disabled */
 		SetWindowWidgetDisabledState(w, 5, !_patches.servint_roadveh);
 		SetWindowWidgetDisabledState(w, 6, !_patches.servint_roadveh);
 
--- a/src/saveload.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/saveload.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -412,8 +412,8 @@
 /** Write the value of a setting
  * @param ptr pointer to the variable
  * @param conv type of variable, can be a non-clean type, eg
- * with other flags. It is parsed upon read
- * @param var the new value being given to the variable */
+ *             with other flags. It is parsed upon read
+ * @param val the new value being given to the variable */
 void WriteValue(void *ptr, VarType conv, int64 val)
 {
 	switch (GetVarMemType(conv)) {
@@ -498,6 +498,7 @@
  * by SlCalcNetStringLen and the length that the index will occupy.
  * @param ptr pointer to the stringbuffer
  * @param length maximum length of the string (buffer size, etc.)
+ * @param conv type of data been used
  * @return return the gross length of the string */
 static inline size_t SlCalcStringLen(const void *ptr, size_t length, VarType conv)
 {
@@ -525,7 +526,7 @@
 /**
  * Save/Load a string.
  * @param ptr the string being manipulated
- * @param the length of the string (full length)
+ * @param length of the string (full length)
  * @param conv must be SLE_FILE_STRING */
 static void SlString(void *ptr, size_t length, VarType conv)
 {
@@ -650,7 +651,9 @@
 
 /**
  * Calculate the size of an object.
+ * @param object to be measured
  * @param sld The SaveLoad description of the object so we know how to manipulate it
+ * @return size of given objetc
  */
 static size_t SlCalcObjLength(const void *object, const SaveLoad *sld)
 {
@@ -768,7 +771,7 @@
 
 /**
  * Save or Load (a list of) global variables
- * @param desc The global variable that is being loaded or saved
+ * @param sldg The global variable that is being loaded or saved
  */
 void SlGlobList(const SaveLoadGlobVarList *sldg)
 {
--- a/src/saveload.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/saveload.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file saveload.h */
+
 #ifndef SAVELOAD_H
 #define SAVELOAD_H
 
@@ -10,9 +12,9 @@
 #define SIZE_MAX ((size_t)-1)
 
 enum SaveOrLoadResult {
-	SL_OK     = 0, // completed successfully
-	SL_ERROR  = 1, // error that was caught before internal structures were modified
-	SL_REINIT = 2, // error that was caught in the middle of updating game state, need to clear it. (can only happen during load)
+	SL_OK     = 0, ///< completed successfully
+	SL_ERROR  = 1, ///< error that was caught before internal structures were modified
+	SL_REINIT = 2, ///< error that was caught in the middle of updating game state, need to clear it. (can only happen during load)
 };
 
 enum SaveOrLoadMode {
--- a/src/screenshot.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/screenshot.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -20,7 +20,7 @@
 uint _cur_screenshot_format;
 ScreenshotType current_screenshot_type;
 
-// called by the ScreenShot proc to generate screenshot lines.
+/* called by the ScreenShot proc to generate screenshot lines. */
 typedef void ScreenshotCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n);
 typedef bool ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette);
 
@@ -62,7 +62,7 @@
 };
 assert_compile(sizeof(RgbQuad) == 4);
 
-// generic .BMP writer
+/* generic .BMP writer */
 static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)
 {
 	BitmapFileHeader bfh;
@@ -72,23 +72,23 @@
 	uint i, padw;
 	uint n, maxlines;
 
-	// only implemented for 8bit images so far.
+	/* only implemented for 8bit images so far. */
 	if (pixelformat != 8)
 		return false;
 
 	f = fopen(name, "wb");
 	if (f == NULL) return false;
 
-	// each scanline must be aligned on a 32bit boundary
+	/* each scanline must be aligned on a 32bit boundary */
 	padw = ALIGN(w, 4);
 
-	// setup the file header
+	/* setup the file header */
 	bfh.type = TO_LE16('MB');
 	bfh.size = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256 + padw * h);
 	bfh.reserved = 0;
 	bfh.off_bits = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256);
 
-	// setup the info header
+	/* setup the info header */
 	bih.size = TO_LE32(sizeof(BitmapInfoHeader));
 	bih.width = TO_LE32(w);
 	bih.height = TO_LE32(h);
@@ -101,7 +101,7 @@
 	bih.clrused = 0;
 	bih.clrimp = 0;
 
-	// convert the palette to the windows format
+	/* convert the palette to the windows format */
 	for (i = 0; i != 256; i++) {
 		rq[i].red   = palette[i].r;
 		rq[i].green = palette[i].g;
@@ -109,15 +109,15 @@
 		rq[i].reserved = 0;
 	}
 
-	// write file header and info header and palette
+	/* write file header and info header and palette */
 	if (fwrite(&bfh, sizeof(bfh), 1, f) != 1) return false;
 	if (fwrite(&bih, sizeof(bih), 1, f) != 1) return false;
 	if (fwrite(rq, sizeof(rq), 1, f) != 1) return false;
 
-	// use by default 64k temp memory
+	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / padw, 16, 128);
 
-	// now generate the bitmap bits
+	/* now generate the bitmap bits */
 	Pixel *buff = MallocT<Pixel>(padw * maxlines); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		fclose(f);
@@ -125,16 +125,16 @@
 	}
 	memset(buff, 0, padw * maxlines); // zero the buffer to have the padding bytes set to 0
 
-	// start at the bottom, since bitmaps are stored bottom up.
+	/* start at the bottom, since bitmaps are stored bottom up. */
 	do {
-		// determine # lines
+		/* determine # lines */
 		n = min(h, maxlines);
 		h -= n;
 
-		// render the pixels
+		/* render the pixels */
 		callb(userdata, buff, h, padw, n);
 
-		// write each line
+		/* write each line */
 		while (n)
 			if (fwrite(buff + (--n) * padw, padw, 1, f) != 1) {
 				free(buff);
@@ -175,7 +175,7 @@
 	png_structp png_ptr;
 	png_infop info_ptr;
 
-	// only implemented for 8bit images so far.
+	/* only implemented for 8bit images so far. */
 	if (pixelformat != 8)
 		return false;
 
@@ -209,7 +209,7 @@
 	png_set_IHDR(png_ptr, info_ptr, w, h, pixelformat, PNG_COLOR_TYPE_PALETTE,
 		PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
-	// convert the palette to the .PNG format.
+	/* convert the palette to the .PNG format. */
 	for (i = 0; i != 256; i++) {
 		rq[i].red   = palette[i].r;
 		rq[i].green = palette[i].g;
@@ -220,10 +220,10 @@
 	png_write_info(png_ptr, info_ptr);
 	png_set_flush(png_ptr, 512);
 
-	// use by default 64k temp memory
+	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / w, 16, 128);
 
-	// now generate the bitmap bits
+	/* now generate the bitmap bits */
 	Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		png_destroy_write_struct(&png_ptr, &info_ptr);
@@ -234,14 +234,14 @@
 
 	y = 0;
 	do {
-		// determine # lines to write
+		/* determine # lines to write */
 		n = min(h - y, maxlines);
 
-		// render the pixels into the buffer
+		/* render the pixels into the buffer */
 		callb(userdata, buff, y, w, n);
 		y += n;
 
-		// write them to png
+		/* write them to png */
 		for (i = 0; i != n; i++)
 			png_write_row(png_ptr, buff + i * w);
 	} while (y != h);
@@ -295,7 +295,7 @@
 
 	memset(&pcx, 0, sizeof(pcx));
 
-	// setup pcx header
+	/* setup pcx header */
 	pcx.manufacturer = 10;
 	pcx.version = 5;
 	pcx.rle = 1;
@@ -310,16 +310,16 @@
 	pcx.width = pcx.pitch = TO_LE16(w);
 	pcx.height = TO_LE16(h);
 
-	// write pcx header
+	/* write pcx header */
 	if (fwrite(&pcx, sizeof(pcx), 1, f) != 1) {
 		fclose(f);
 		return false;
 	}
 
-	// use by default 64k temp memory
+	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / w, 16, 128);
 
-	// now generate the bitmap bits
+	/* now generate the bitmap bits */
 	Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		fclose(f);
@@ -329,22 +329,22 @@
 
 	y = 0;
 	do {
-		// determine # lines to write
+		/* determine # lines to write */
 		uint n = min(h - y, maxlines);
 		uint i;
 
-		// render the pixels into the buffer
+		/* render the pixels into the buffer */
 		callb(userdata, buff, y, w, n);
 		y += n;
 
-		// write them to pcx
+		/* write them to pcx */
 		for (i = 0; i != n; i++) {
 			const Pixel* bufp = buff + i * w;
 			byte runchar = bufp[0];
 			uint runcount = 1;
 			uint j;
 
-			// for each pixel...
+			/* for each pixel... */
 			for (j = 1; j < w; j++) {
 				Pixel ch = bufp[j];
 
@@ -366,7 +366,7 @@
 				runcount++;
 			}
 
-			// write remaining bytes..
+			/* write remaining bytes.. */
 			if (runcount > 1 || (runchar & 0xC0) == 0xC0)
 				if (fputc(0xC0 | runcount, f) == EOF) {
 					free(buff);
@@ -383,7 +383,7 @@
 
 	free(buff);
 
-	// write 8-bit color palette
+	/* write 8-bit color palette */
 	if (fputc(12, f) == EOF) {
 		fclose(f);
 		return false;
@@ -445,7 +445,7 @@
 	strcpy(_screenshot_format_name, _screenshot_formats[i].extension);
 }
 
-// screenshot generator that dumps the current video buffer
+/* screenshot generator that dumps the current video buffer */
 static void CurrentScreenCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
 {
 	for (; n > 0; --n) {
@@ -455,7 +455,7 @@
 	}
 }
 
-// generate a large piece of the world
+/* generate a large piece of the world */
 static void LargeWorldCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
 {
 	ViewPort *vp = (ViewPort *)userdata;
--- a/src/screenshot.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/screenshot.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file screenshot.h */
+
 #ifndef SCREENSHOT_H
 #define SCREENSHOT_H
 
--- a/src/sdl.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/sdl.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file sdl.cpp */
+
 #include "stdafx.h"
 
 #ifdef WITH_SDL
--- a/src/sdl.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/sdl.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file sdl.h */
+
 #ifndef SDL_H
 #define SDL_H
 
--- a/src/settings.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/settings.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,6 +1,6 @@
 /* $Id$ */
 
-/** @file
+/** @file settings.cpp
  * All actions handling saving and loading of the settings/configuration goes on in this file.
  * The file consists of four parts:
  * <ol>
@@ -95,10 +95,10 @@
 
 	size = ALIGN(size, sizeof(void*));
 
-	// first check if there's memory in the next pool
+	/* first check if there's memory in the next pool */
 	if (p->next && p->next->pos + size <= p->next->size) {
 		p = p->next;
-	// then check if there's not memory in the cur pool
+	/* then check if there's not memory in the cur pool */
 	} else if (p->pos + size > p->size) {
 		SettingsMemoryPool *n = pool_new(size);
 		*pool = n;
@@ -130,7 +130,7 @@
 	}
 }
 
-// structs describing the ini format.
+/** structs describing the ini format. */
 struct IniItem {
 	char *name;
 	char *value;
@@ -139,21 +139,21 @@
 };
 
 struct IniGroup {
-	char *name; // name of group
-	char *comment; //comment for group
+	char *name;        ///< name of group
+	char *comment;     ///<comment for group
 	IniItem *item, **last_item;
 	IniGroup *next;
 	IniFile *ini;
-	IniGroupType type; // type of group
+	IniGroupType type; ///< type of group
 };
 
 struct IniFile {
 	SettingsMemoryPool *pool;
 	IniGroup *group, **last_group;
-	char *comment; // last comment in file
+	char *comment;     ///< last comment in file
 };
 
-// allocate an inifile object
+/** allocate an inifile object */
 static IniFile *ini_alloc()
 {
 	IniFile *ini;
@@ -167,7 +167,7 @@
 	return ini;
 }
 
-// allocate an ini group object
+/** allocate an ini group object */
 static IniGroup *ini_group_alloc(IniFile *ini, const char *grpt, int len)
 {
 	IniGroup *grp = (IniGroup*)pool_alloc(&ini->pool, sizeof(IniGroup));
@@ -199,7 +199,7 @@
 	return item;
 }
 
-// load an ini file into the "abstract" format
+/** load an ini file into the "abstract" format */
 static IniFile *ini_load(const char *filename)
 {
 	char buffer[1024], c, *s, *t, *e;
@@ -217,23 +217,23 @@
 	in = fopen(filename, "r");
 	if (in == NULL) return ini;
 
-	// for each line in the file
+	/* for each line in the file */
 	while (fgets(buffer, sizeof(buffer), in)) {
 
-		// trim whitespace from the left side
+		/* trim whitespace from the left side */
 		for (s = buffer; *s == ' ' || *s == '\t'; s++);
 
-		// trim whitespace from right side.
+		/* trim whitespace from right side. */
 		e = s + strlen(s);
 		while (e > s && ((c=e[-1]) == '\n' || c == '\r' || c == ' ' || c == '\t')) e--;
 		*e = '\0';
 
-		// skip comments and empty lines
+		/* skip comments and empty lines */
 		if (*s == '#' || *s == ';' || *s == '\0') {
 			uint ns = comment_size + (e - s + 1);
 			uint a = comment_alloc;
 			uint pos;
-			// add to comment
+			/* add to comment */
 			if (ns > a) {
 				a = max(a, 128U);
 				do a*=2; while (a < ns);
@@ -246,7 +246,7 @@
 			continue;
 		}
 
-		// it's a group?
+		/* it's a group? */
 		if (s[0] == '[') {
 			if (e[-1] != ']') {
 				ShowInfoF("ini: invalid group name '%s'", buffer);
@@ -260,30 +260,36 @@
 				comment_size = 0;
 			}
 		} else if (group) {
-			// find end of keyname
-			for (t = s; *t != '\0' && *t != '=' && *t != '\t' && *t != ' '; t++);
+			/* find end of keyname */
+			if (*s == '\"') {
+				s++;
+				for (t = s; *t != '\0' && *t != '\"'; t++);
+				if (*t == '\"') *t = ' ';
+			} else {
+				for (t = s; *t != '\0' && *t != '=' && *t != '\t' && *t != ' '; t++);
+			}
 
-			// it's an item in an existing group
+			/* it's an item in an existing group */
 			item = ini_item_alloc(group, s, t-s);
 			if (comment_size) {
 				item->comment = (char*)pool_strdup(&ini->pool, comment, comment_size);
 				comment_size = 0;
 			}
 
-			// find start of parameter
+			/* find start of parameter */
 			while (*t == '=' || *t == ' ' || *t == '\t') t++;
 
 
-			// remove starting quotation marks
+			/* remove starting quotation marks */
 			if (*t == '\"') t++;
-			// remove ending quotation marks
+			/* remove ending quotation marks */
 			e = t + strlen(t);
 			if (e > t && e[-1] == '\"') e--;
 			*e = '\0';
 
 			item->value = (char*)pool_strdup(&ini->pool, t, e - t);
 		} else {
-			// it's an orphan item
+			/* it's an orphan item */
 			ShowInfoF("ini: '%s' outside of group", buffer);
 		}
 	}
@@ -299,25 +305,25 @@
 	return ini;
 }
 
-// lookup a group or make a new one
+/** lookup a group or make a new one */
 static IniGroup *ini_getgroup(IniFile *ini, const char *name, int len)
 {
 	IniGroup *group;
 
 	if (len == -1) len = strlen(name);
 
-	// does it exist already?
+	/* does it exist already? */
 	for (group = ini->group; group; group = group->next)
 		if (!memcmp(group->name, name, len) && group->name[len] == 0)
 			return group;
 
-	// otherwise make a new one
+	/* otherwise make a new one */
 	group = ini_group_alloc(ini, name, len);
 	group->comment = (char*)pool_strdup(&ini->pool, "\n", 1);
 	return group;
 }
 
-// lookup an item or make a new one
+/** lookup an item or make a new one */
 static IniItem *ini_getitem(IniGroup *group, const char *name, bool create)
 {
 	IniItem *item;
@@ -328,11 +334,11 @@
 
 	if (!create) return NULL;
 
-	// otherwise make a new one
+	/* otherwise make a new one */
 	return ini_item_alloc(group, name, len);
 }
 
-// save ini file from the "abstract" format.
+/** save ini file from the "abstract" format. */
 static bool ini_save(const char *filename, IniFile *ini)
 {
 	FILE *f;
@@ -349,11 +355,18 @@
 			assert(item->value != NULL);
 			if (item->comment != NULL) fputs(item->comment, f);
 
+			/* protect item->name with quotes if needed */
+			if (strchr(item->name, ' ') != NULL) {
+				fprintf(f, "\"%s\"", item->name);
+			} else {
+				fprintf(f, "%s", item->name);
+			}
+
 			/* Don't give an equal sign to list items that don't have a parameter */
 			if (group->type == IGT_LIST && *item->value == '\0') {
-				fprintf(f, "%s\n", item->name);
+				fprintf(f, "\n");
 			} else {
-				fprintf(f, "%s = %s\n", item->name, item->value);
+				fprintf(f, " = %s\n", item->value);
 			}
 		}
 	}
@@ -380,13 +393,13 @@
 
 	if (onelen == -1) onelen = strlen(one);
 
-	// check if it's an integer
+	/* check if it's an integer */
 	if (*one >= '0' && *one <= '9')
 		return strtoul(one, NULL, 0);
 
 	idx = 0;
 	for (;;) {
-		// find end of item
+		/* find end of item */
 		s = many;
 		while (*s != '|' && *s != 0) s++;
 		if (s - many == onelen && !memcmp(one, many, onelen)) return idx;
@@ -408,7 +421,7 @@
 	uint32 res = 0;
 
 	for (;;) {
-		// skip "whitespace"
+		/* skip "whitespace" */
 		while (*str == ' ' || *str == '\t' || *str == '|') str++;
 		if (*str == 0) break;
 
@@ -522,7 +535,7 @@
 {
 	int orig_id = id;
 
-	// Look for the id'th element
+	/* Look for the id'th element */
 	while (--id >= 0) {
 		for (; *many != '|'; many++) {
 			if (*many == '\0') { // not found
@@ -533,7 +546,7 @@
 		many++; // pass the |-character
 	}
 
-	// copy string until next item (|) or the end of the list if this is the last one
+	/* copy string until next item (|) or the end of the list if this is the last one */
 	while (*many != '\0' && *many != '|') *buf++ = *many++;
 	*buf = '\0';
 }
@@ -685,7 +698,7 @@
 
 		if (!SlIsObjectCurrentlyValid(sld->version_from, sld->version_to)) continue;
 
-		// XXX - wtf is this?? (group override?)
+		/* XXX - wtf is this?? (group override?) */
 		s = strchr(sdb->name, '.');
 		if (s != NULL) {
 			group = ini_getgroup(ini, sdb->name, s - sdb->name);
@@ -761,7 +774,7 @@
 		if (!SlIsObjectCurrentlyValid(sld->version_from, sld->version_to)) continue;
 		if (sld->conv & SLF_CONFIG_NO) continue;
 
-		// XXX - wtf is this?? (group override?)
+		/* XXX - wtf is this?? (group override?) */
 		s = strchr(sdb->name, '.');
 		if (s != NULL) {
 			group = ini_getgroup(ini, sdb->name, s - sdb->name);
@@ -776,7 +789,7 @@
 		ptr = GetVariableAddress(object, sld);
 
 		if (item->value != NULL) {
-			// check if the value is the same as the old value
+			/* check if the value is the same as the old value */
 			const void *p = string_to_val(sdb, item->value);
 
 			/* The main type of a variable/setting is in bytes 8-15
@@ -929,7 +942,8 @@
  * 2. SDT_something
  * The 'G' stands for global, so this is the one you will use for a
  * SettingDescGlobVarList section meaning global variables. The other uses a
- * Base/Offset and runtime variable selection mechanism, known from the saveload * convention (it also has global so it should not be hard).
+ * Base/Offset and runtime variable selection mechanism, known from the saveload
+ * convention (it also has global so it should not be hard).
  * Of each type there are again two versions, the normal one and one prefixed
  * with 'COND'.
  * COND means that the setting is only valid in certain savegame versions
@@ -1052,7 +1066,6 @@
 /* Shortcuts for macros below. Logically if we don't save the value
  * we also don't sync it in a network game */
 #define S SLF_SAVE_NO | SLF_NETWORK_NO
-#define NS SLF_SAVE_NO
 #define C SLF_CONFIG_NO
 #define N SLF_NETWORK_NO
 
@@ -1069,7 +1082,7 @@
 #include "gui.h"
 #include "town.h"
 #include "gfx.h"
-// virtual PositionMainToolbar function, calls the right one.
+/* virtual PositionMainToolbar function, calls the right one.*/
 static int32 v_PositionMainToolbar(int32 p1)
 {
 	if (_game_mode != GM_MENU) PositionMainToolbar(NULL);
@@ -1205,7 +1218,7 @@
 #endif /* WIN32 */
 
 static const SettingDescGlobVarList _misc_settings[] = {
-	SDTG_MMANY("display_opt",     SLE_UINT8, S, 0, _display_opt,       (DO_SHOW_TOWN_NAMES|DO_SHOW_STATION_NAMES|DO_SHOW_SIGNS|DO_FULL_ANIMATION|DO_FULL_DETAIL|DO_TRANS_BUILDINGS|DO_WAYPOINTS), "SHOW_TOWN_NAMES|SHOW_STATION_NAMES|SHOW_SIGNS|FULL_ANIMATION|TRANS_BUILDINGS|FULL_DETAIL|WAYPOINTS", STR_NULL, NULL),
+	SDTG_MMANY("display_opt",     SLE_UINT8, S, 0, _display_opt,       (DO_SHOW_TOWN_NAMES|DO_SHOW_STATION_NAMES|DO_SHOW_SIGNS|DO_FULL_ANIMATION|DO_FULL_DETAIL|DO_WAYPOINTS), "SHOW_TOWN_NAMES|SHOW_STATION_NAMES|SHOW_SIGNS|FULL_ANIMATION|FULL_DETAIL|WAYPOINTS", STR_NULL, NULL),
 	 SDTG_BOOL("news_ticker_sound",          S, 0, _news_ticker_sound,     true,    STR_NULL, NULL),
 	 SDTG_BOOL("fullscreen",                 S, 0, _fullscreen,           false,    STR_NULL, NULL),
 	  SDTG_STR("videodriver",      SLE_STRB,C|S,0, _ini_videodriver,       NULL,    STR_NULL, NULL),
@@ -1380,6 +1393,8 @@
 	 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),
 
 	/***************************************************************************/
 	/* AI section of the GUI-configure patches window */
@@ -1461,7 +1476,7 @@
 	SDT_CONDVAR (Patches, npf_road_drive_through_penalty, SLE_UINT, 47, SL_MAX_VERSION, 0, 0,  8 * NPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 
 
-	// The maximum number of nodes to search
+	/* The maximum number of nodes to search */
 	SDT_CONDBOOL(Patches, yapf.disable_node_optimization  ,           28, SL_MAX_VERSION, 0, 0, false                   ,                       STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.max_search_nodes           , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10000                   ,      500, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDBOOL(Patches, yapf.rail_firstred_twoway_eol   ,           28, SL_MAX_VERSION, 0, 0,  true                   ,                       STR_NULL, NULL),
@@ -1473,22 +1488,22 @@
 	SDT_CONDVAR (Patches, yapf.rail_slope_penalty         , SLE_UINT, 28, SL_MAX_VERSION, 0, 0,     2 * YAPF_TILE_LENGTH,        0, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_curve45_penalty       , SLE_UINT, 28, SL_MAX_VERSION, 0, 0,     1 * YAPF_TILE_LENGTH,        0, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_curve90_penalty       , SLE_UINT, 28, SL_MAX_VERSION, 0, 0,     6 * YAPF_TILE_LENGTH,        0, 1000000, 0, STR_NULL, NULL),
-	// This penalty is applied when a train reverses inside a depot
+	/* This penalty is applied when a train reverses inside a depot */
 	SDT_CONDVAR (Patches, yapf.rail_depot_reverse_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0,    50 * YAPF_TILE_LENGTH,        0, 1000000, 0, STR_NULL, NULL),
-	// This is the penalty for level crossings (for trains only)
+	/* This is the penalty for level crossings (for trains only) */
 	SDT_CONDVAR (Patches, yapf.rail_crossing_penalty      , SLE_UINT, 28, SL_MAX_VERSION, 0, 0,     3 * YAPF_TILE_LENGTH,        0, 1000000, 0, STR_NULL, NULL),
-	// look-ahead how many signals are checked
+	/* look-ahead how many signals are checked */
 	SDT_CONDVAR (Patches, yapf.rail_look_ahead_max_signals, SLE_UINT, 28, SL_MAX_VERSION, 0, 0,    10                   ,        1,     100, 0, STR_NULL, NULL),
-	// look-ahead n-th red signal penalty polynomial: penalty = p2 * n^2 + p1 * n + p0
+	/* look-ahead n-th red signal penalty polynomial: penalty = p2 * n^2 + p1 * n + p0 */
 	SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p0  , SLE_INT , 28, SL_MAX_VERSION, 0, 0,   500                   , -1000000, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p1  , SLE_INT , 28, SL_MAX_VERSION, 0, 0,  -100                   , -1000000, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p2  , SLE_INT , 28, SL_MAX_VERSION, 0, 0,     5                   , -1000000, 1000000, 0, STR_NULL, NULL),
-	// penalties for too long or too short station platforms
+	/* penalties for too long or too short station platforms */
 	SDT_CONDVAR (Patches, yapf.rail_longer_platform_penalty,           SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  8 * YAPF_TILE_LENGTH, 0,   20000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_longer_platform_per_tile_penalty,  SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  0 * YAPF_TILE_LENGTH, 0,   20000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_shorter_platform_penalty,          SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 40 * YAPF_TILE_LENGTH, 0,   20000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_shorter_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  0 * YAPF_TILE_LENGTH, 0,   20000, 0, STR_NULL, NULL),
-	// road vehicles - penalties
+	/* road vehicles - penalties */
 	SDT_CONDVAR (Patches, yapf.road_slope_penalty                    , SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.road_curve_penalty                    , SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.road_crossing_penalty                 , SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
@@ -1577,7 +1592,7 @@
 
 	for (item = group->item; item != NULL; item = item->next) {
 		GRFConfig *c = CallocT<GRFConfig>(1);
-		c->filename = strdup(item->name);
+		c->full_path = strdup(item->name);
 
 		/* Parse parameters */
 		if (*item->value != '\0') {
@@ -1654,7 +1669,7 @@
 		char params[512];
 		GRFBuildParamList(params, c, lastof(params));
 
-		*item = ini_item_alloc(group, c->filename, strlen(c->filename));
+		*item = ini_item_alloc(group, c->full_path, strlen(c->full_path));
 		(*item)->value = (char*)pool_strdup(&ini->pool, params, strlen(params));
 		item = &(*item)->next;
 	}
@@ -1830,6 +1845,25 @@
 		name, value, (sd->desc.flags & SGF_0ISDISABLED) ? "(0) " : "", sd->desc.min, sd->desc.max);
 }
 
+void IConsoleListPatches()
+{
+	IConsolePrintF(_icolour_warn, "All patches with their current value:");
+
+	for (const SettingDesc *sd = _patch_settings; sd->save.cmd != SL_END; sd++) {
+		char value[80];
+		const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_patches_newgame : &_patches, &sd->save);
+
+		if (sd->desc.cmd == SDT_BOOLX) {
+			snprintf(value, lengthof(value), (*(bool*)ptr == 1) ? "on" : "off");
+		} else {
+			snprintf(value, lengthof(value), "%d", (uint32)ReadValue(ptr, sd->save.conv));
+		}
+		IConsolePrintF(_icolour_def, "%s = %s", sd->desc.name, value);
+	}
+
+	IConsolePrintF(_icolour_warn, "Use 'patch' command to change a value");
+}
+
 /** Save and load handler for patches/settings
  * @param osd SettingDesc struct containing all information
  * @param object can be either NULL in which case we load global variables or
--- a/src/settings.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/settings.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file settings.h */
+
 #ifndef SETTINGS_H
 #define SETTINGS_H
 
@@ -12,12 +14,12 @@
 enum SettingDescTypeLong {
 	/* 4 bytes allocated a maximum of 16 types for GenericType */
 	SDT_BEGIN       = 0,
-	SDT_NUMX        = 0, // any number-type
-	SDT_BOOLX       = 1, // a boolean number
-	SDT_ONEOFMANY   = 2, // bitmasked number where only ONE bit may be set
-	SDT_MANYOFMANY  = 3, // bitmasked number where MULTIPLE bits may be set
-	SDT_INTLIST     = 4, // list of integers seperated by a comma ','
-	SDT_STRING      = 5, // string with a pre-allocated buffer
+	SDT_NUMX        = 0, ///< any number-type
+	SDT_BOOLX       = 1, ///< a boolean number
+	SDT_ONEOFMANY   = 2, ///< bitmasked number where only ONE bit may be set
+	SDT_MANYOFMANY  = 3, ///< bitmasked number where MULTIPLE bits may be set
+	SDT_INTLIST     = 4, ///< list of integers seperated by a comma ','
+	SDT_STRING      = 5, ///< string with a pre-allocated buffer
 	SDT_END,
 	/* 10 more possible primitives */
 };
@@ -84,6 +86,7 @@
 
 bool IConsoleSetPatchSetting(const char *name, int32 value);
 void IConsoleGetPatchSetting(const char *name);
+void IConsoleListPatches();
 const SettingDesc *GetPatchFromName(const char *name, uint *i);
 bool SetPatchValue(uint index, const Patches *object, int32 value);
 
--- a/src/settings_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/settings_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file settings_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "currency.h"
@@ -397,7 +399,7 @@
 	GAMEDIFF_WND_ROWSIZE    = 9
 };
 
-// Temporary holding place of values in the difficulty window until 'Save' is clicked
+/* Temporary holding place of values in the difficulty window until 'Save' is clicked */
 static GameOptions _opt_mod_temp;
 // 0x383E = (1 << 13) | (1 << 12) | (1 << 11) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1)
 #define DIFF_INGAME_DISABLED_BUTTONS 0x383E
@@ -461,7 +463,7 @@
 			uint btn, dis;
 			int16 val;
 
-			// Don't allow clients to make any changes
+			/* Don't allow clients to make any changes */
 			if  (_networking && !_network_server)
 				return;
 
@@ -473,12 +475,12 @@
 			if (y < 0)
 				return;
 
-			// Get button from Y coord.
+			/* Get button from Y coord. */
 			btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
 			if (btn >= GAME_DIFFICULTY_NUM || y % (GAMEDIFF_WND_ROWSIZE + 2) >= 9)
 				return;
 
-			// Clicked disabled button?
+			/* Clicked disabled button? */
 			dis = (_game_mode == GM_NORMAL) ? DIFF_INGAME_DISABLED_BUTTONS : 0;
 
 			if (HASBIT(dis, btn))
@@ -639,6 +641,8 @@
 	"ending_year",
 	"smooth_economy",
 	"allow_shares",
+	"town_growth_rate",
+	"larger_towns",
 };
 
 static const char *_patches_ai[] = {
--- a/src/ship.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/ship.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file ship.h */
+
 #ifndef SHIP_H
 #define SHIP_H
 
--- a/src/ship_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/ship_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,10 +1,13 @@
 /* $Id$ */
 
+/** @file ship_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "ship.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
@@ -62,8 +65,8 @@
 
 /** Get the size of the sprite of a ship sprite heading west (used for lists)
  * @param engine The engine to get the sprite from
- * @param &width The width of the sprite
- * @param &height The height of the sprite
+ * @param width The width of the sprite
+ * @param height The height of the sprite
  */
 void GetShipSpriteSize(EngineID engine, uint &width, uint &height)
 {
@@ -191,7 +194,7 @@
 	SubtractMoneyFromPlayerFract(v->owner, cost);
 
 	InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
-	//we need this for the profit
+	/* we need this for the profit */
 	InvalidateWindowClasses(WC_SHIPS_LIST);
 }
 
@@ -376,10 +379,10 @@
 	tile = v->tile;
 	axis = GetShipDepotAxis(tile);
 
-	// Check first side
+	/* Check first side */
 	if (_ship_sometracks[axis] & GetTileShipTrackStatus(TILE_ADD(tile, ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
 		m = (axis == AXIS_X) ? 0x101 : 0x207;
-	// Check second side
+	/* Check second side */
 	} else if (_ship_sometracks[axis + 2] & GetTileShipTrackStatus(TILE_ADD(tile, -2 * ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
 		m = (axis == AXIS_X) ? 0x105 : 0x203;
 	} else {
@@ -405,14 +408,14 @@
 
 	spd = min(v->cur_speed + 1, v->max_speed);
 
-	//updates statusbar only if speed have changed to save CPU time
+	/*updates statusbar only if speed have changed to save CPU time */
 	if (spd != v->cur_speed) {
 		v->cur_speed = spd;
 		if (_patches.vehicle_speed)
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	}
 
-	// Decrease somewhat when turning
+	/* Decrease somewhat when turning */
 	if (!(v->direction & 1)) spd = spd * 3 / 4;
 
 	if (spd == 0) return false;
@@ -455,7 +458,7 @@
 
 static bool ShipTrackFollower(TileIndex tile, PathFindShip *pfs, int track, uint length, byte *state)
 {
-	// Found dest?
+	/* Found dest? */
 	if (tile == pfs->dest_coords) {
 		pfs->best_bird_dist = 0;
 
@@ -463,7 +466,7 @@
 		return true;
 	}
 
-	// Skip this tile in the calculation
+	/* Skip this tile in the calculation */
 	if (tile != pfs->skiptile) {
 		pfs->best_bird_dist = minu(pfs->best_bird_dist, DistanceMaxPlusManhattan(pfs->dest_coords, tile));
 	}
@@ -543,7 +546,7 @@
 	return ret;
 }
 
-/* returns the track to choose on the next tile, or -1 when it's better to
+/** returns the track to choose on the next tile, or -1 when it's better to
  * reverse. The tile given is the tile we are about to enter, enterdir is the
  * direction in which we are entering the tile */
 static Track ChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks)
@@ -558,7 +561,7 @@
 		NPFFoundTargetData ftd;
 		TileIndex src_tile = TILE_ADD(tile, TileOffsByDiagDir(ReverseDiagDir(enterdir)));
 		Trackdir trackdir = GetVehicleTrackdir(v);
-		assert(trackdir != INVALID_TRACKDIR); /* Check that we are not in a depot */
+		assert(trackdir != INVALID_TRACKDIR); // Check that we are not in a depot
 
 		NPFFillWithOrderData(&fstd, v);
 
@@ -731,7 +734,7 @@
 
 							/* Process station in the orderlist. */
 							st = GetStation(v->current_order.dest);
-							if (st->facilities & FACIL_DOCK) { /* ugly, ugly workaround for problem with ships able to drop off cargo at wrong stations */
+							if (st->facilities & FACIL_DOCK) { // ugly, ugly workaround for problem with ships able to drop off cargo at wrong stations
 								v->BeginLoading();
 								v->current_order.flags &= OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER;
 								v->current_order.flags |= OF_NON_STOP;
@@ -743,7 +746,7 @@
 									MarkShipDirty(v);
 								}
 								InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
-							} else { /* leave stations without docks right aways */
+							} else { // leave stations without docks right aways
 								v->current_order.type = OT_LEAVESTATION;
 								v->cur_order_index++;
 								InvalidateVehicleOrder(v);
@@ -834,6 +837,7 @@
 
 /** Build a ship.
  * @param tile tile of depot where ship is built
+ * @param flags type of operation
  * @param p1 ship type being built (engine)
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  */
@@ -844,7 +848,7 @@
 	UnitID unit_num;
 	Engine *e;
 
-	if (!IsEngineBuildable(p1, VEH_SHIP, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
+	if (!IsEngineBuildable(p1, VEH_SHIP, _current_player)) return_cmd_error(STR_SHIP_NOT_AVAILABLE);
 
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 
@@ -930,6 +934,7 @@
 
 /** Sell a ship.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 vehicle ID to be sold
  * @param p2 unused
  */
@@ -963,6 +968,7 @@
 
 /** Start/Stop a ship.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 ship ID to start/stop
  * @param p2 unused
  */
@@ -1001,6 +1007,7 @@
 
 /** Send a ship to the depot.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 vehicle ID to send to the depot
  * @param p2 various bitmasked elements
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
@@ -1073,6 +1080,7 @@
 
 /** Refits a ship to the specified cargo type.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 vehicle ID of the ship to refit
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to (p2 & 0xFF)
--- a/src/ship_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/ship_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file ship_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -32,7 +34,7 @@
 		StringID str;
 
 		SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
-		// disable service-scroller when interval is set to disabled
+		/* disable service-scroller when interval is set to disabled */
 		SetWindowWidgetDisabledState(w, 5, !_patches.servint_ships);
 		SetWindowWidgetDisabledState(w, 6, !_patches.servint_ships);
 
--- a/src/signs.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/signs.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,9 +1,12 @@
 /* $Id$ */
 
+/** @file signs.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "landscape.h"
 #include "player.h"
 #include "signs.h"
 #include "saveload.h"
@@ -30,6 +33,7 @@
 /**
  *
  * Update the coordinate of one sign
+ * @param si Pointer to the Sign
  *
  */
 static void UpdateSignVirtCoords(Sign *si)
@@ -97,6 +101,10 @@
 	return NULL;
 }
 
+/**
+ * Destroy a sign placed on the map
+ * @param si Pointer to the Sign to remove
+ */
 void DestroySign(Sign *si)
 {
 	DeleteName(si->str);
@@ -107,6 +115,7 @@
  * no effect whatsoever except for the colour the sign gets for easy recognition,
  * but everybody is able to rename/remove it.
  * @param tile tile to place sign at
+ * @param flags type of operation
  * @param p1 unused
  * @param p2 unused
  */
@@ -142,8 +151,10 @@
  * the user wanted to delete it. So delete it. Ownership of signs
  * has no meaning/effect whatsoever except for eyecandy
  * @param tile unused
+ * @param flags type of operation
  * @param p1 index of the sign to be renamed/removed
  * @param p2 unused
+ * @return 0 if succesfull, otherwise CMD_ERROR
  */
 int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -175,7 +186,7 @@
 			/* Free the name, because we did not assign it yet */
 			DeleteName(str);
 		}
-	} else { /* Delete sign */
+	} else { // Delete sign
 		if (flags & DC_EXEC) {
 			Sign *si = GetSign(p1);
 
@@ -191,9 +202,11 @@
 }
 
 /**
- *
  * Callback function that is called after a sign is placed
- *
+ * @param success of the operation
+ * @param tile unused
+ * @param p1 unused
+ * @param p2 unused
  */
 void CcPlaceSign(bool success, TileIndex tile, uint32 p1, uint32 p2)
 {
@@ -207,7 +220,7 @@
  *
  * PlaceProc function, called when someone pressed the button if the
  *  sign-tool is selected
- *
+ * @param tile on which to place the sign
  */
 void PlaceProc_Sign(TileIndex tile)
 {
--- a/src/signs.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/signs.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file signs.h */
+
 #ifndef SIGNS_H
 #define SIGNS_H
 
@@ -62,7 +64,7 @@
 void UpdateAllSignVirtCoords();
 void PlaceProc_Sign(TileIndex tile);
 
-/* misc.c */
+/* misc.cpp */
 void ShowRenameSignWindow(const Sign *si);
 
 void ShowSignList();
--- a/src/signs_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/signs_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file signs_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "table/strings.h"
--- a/src/slope.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/slope.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file slope.h */
+
 #ifndef SLOPE_H
 #define SLOPE_H
 
--- a/src/smallmap_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/smallmap_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file smallmap_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
@@ -9,6 +11,7 @@
 #include "station_map.h"
 #include "table/strings.h"
 #include "table/sprites.h"
+#include "landscape.h"
 #include "map.h"
 #include "tile.h"
 #include "gui.h"
@@ -332,13 +335,13 @@
 	Pixel *dst_ptr_end = _screen.dst_ptr + _screen.width * _screen.height - _screen.width;
 
 	do {
-		// check if the tile (xc,yc) is within the map range
+		/* check if the tile (xc,yc) is within the map range */
 		if (xc < MapMaxX() && yc < MapMaxY()) {
-			// check if the dst pointer points to a pixel inside the screen buffer
+			/* check if the dst pointer points to a pixel inside the screen buffer */
 			if (dst > _screen.dst_ptr && dst < dst_ptr_end)
 				WRITE_PIXELS_OR(dst, proc(TileXY(xc, yc)) & mask);
 		}
-	// switch to next tile in the column
+	/* switch to next tile in the column */
 	} while (xc++, yc++, dst += pitch, --reps != 0);
 }
 
@@ -390,32 +393,6 @@
 	return ApplyMask(MKCOLOR(0x54545454), &_smallmap_vehicles_andor[t]);
 }
 
-/* Industry colours... a total of 175 gfx - XXX - increase if more industries */
-static const byte _industry_smallmap_colors[175] = {
-	215, 215, 215, 215, 215, 215, 215, 184,
-	184, 184, 184, 194, 194, 194, 194, 194,
-	 86,  86, 191, 191, 191, 191, 191, 191,
-	152, 152, 152, 152, 152, 152, 152, 152,
-	152,  48,  48,  48,  48,  48,  48, 174,
-	174, 174, 174, 174, 174, 174, 174,  10,
-	 10,  10,  10,  10,  10,  10,  10,  10,
-	 10,  10,  15,  15,  55,  55,  55,  55,
-	 10,  10,  10,  10,  10,  10,  10,  10,
-	194, 194, 194, 194, 194, 194, 194, 194,
-	194, 194, 194, 194, 194, 194, 194, 194,
-	194,  15,  15, 184, 184, 184, 184, 184,
-	184, 184, 184, 184,  55,  55,  55,  55,
-	 55,  55,  55,  55,  55,  55,  55,  55,
-	 55,  55,  55,  55,  86,  39,  37,  37,
-	208, 174, 174, 174, 174, 194, 194, 194,
-	194,  48,  48, 174, 174, 174, 174,  39,
-	 39,  55, 208, 208, 208, 208,  10,  10,
-	 10,  10,  10,  10,  37,  37,  37,  37,
-	 37,  37,  37,  37, 184, 184, 184, 184,
-	152, 152, 152, 152, 194, 194, 194,  15,
-	 15,  15,  15,  15,  15,  15,  15,
-};
-
 /**
  * Return the color a tile would be displayed with in the small map in mode "Industries".
  *
@@ -427,7 +404,7 @@
 	TileType t = GetEffectiveTileType(tile);
 
 	if (t == MP_INDUSTRY) {
-		return _industry_smallmap_colors[GetIndustryGfx(tile)] * 0x01010101;
+		return GetIndustrySpec(GetIndustryByTile(tile)->type)->map_colour * 0x01010101;
 	}
 
 	return ApplyMask(MKCOLOR(0x54545454), &_smallmap_vehicles_andor[t]);
@@ -454,7 +431,7 @@
 			default:              bits = MKCOLOR(0xFFFFFFFF); break;
 		}
 	} else {
-		// ground color
+		/* ground color */
 		bits = ApplyMask(MKCOLOR(0x54545454), &_smallmap_contours_andor[t]);
 	}
 	return bits;
@@ -693,7 +670,7 @@
 		FOR_ALL_VEHICLES(v) {
 			if (v->type != VEH_SPECIAL &&
 					(v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) == 0) {
-				// Remap into flat coordinates.
+				/* Remap into flat coordinates. */
 				Point pt = RemapCoords(
 					v->x_pos / TILE_SIZE - WP(w,smallmap_d).scroll_x / TILE_SIZE, // divide each one separately because (a-b)/c != a/c-b/c in integer world
 					v->y_pos / TILE_SIZE - WP(w,smallmap_d).scroll_y / TILE_SIZE, //    dtto
@@ -701,32 +678,32 @@
 				x = pt.x;
 				y = pt.y;
 
-				// Check if y is out of bounds?
+				/* Check if y is out of bounds? */
 				y -= dpi->top;
 				if (!IS_INT_INSIDE(y, 0, dpi->height)) continue;
 
-				// Default is to draw both pixels.
+				/* Default is to draw both pixels. */
 				skip = false;
 
-				// Offset X coordinate
+				/* Offset X coordinate */
 				x -= WP(w,smallmap_d).subscroll + 3 + dpi->left;
 
 				if (x < 0) {
-					// if x+1 is 0, that means we're on the very left edge,
-					//  and should thus only draw a single pixel
+					/* if x+1 is 0, that means we're on the very left edge,
+					 *  and should thus only draw a single pixel */
 					if (++x != 0) continue;
 					skip = true;
 				} else if (x >= dpi->width - 1) {
-					// Check if we're at the very right edge, and if so draw only a single pixel
+					/* Check if we're at the very right edge, and if so draw only a single pixel */
 					if (x != dpi->width - 1) continue;
 					skip = true;
 				}
 
-				// Calculate pointer to pixel and the color
+				/* Calculate pointer to pixel and the color */
 				ptr = dpi->dst_ptr + y * dpi->pitch + x;
 				color = (type == 1) ? _vehicle_type_colors[v->type] : 0xF;
 
-				// And draw either one or two pixels depending on clipping
+				/* And draw either one or two pixels depending on clipping */
 				ptr[0] = color;
 				if (!skip) ptr[1] = color;
 			}
@@ -737,7 +714,7 @@
 		const Town *t;
 
 		FOR_ALL_TOWNS(t) {
-			// Remap the town coordinate
+			/* Remap the town coordinate */
 			Point pt = RemapCoords(
 				(int)(TileX(t->xy) * TILE_SIZE - WP(w, smallmap_d).scroll_x) / TILE_SIZE,
 				(int)(TileY(t->xy) * TILE_SIZE - WP(w, smallmap_d).scroll_y) / TILE_SIZE,
@@ -745,23 +722,23 @@
 			x = pt.x - WP(w,smallmap_d).subscroll + 3 - (t->sign.width_2 >> 1);
 			y = pt.y;
 
-			// Check if the town sign is within bounds
+			/* Check if the town sign is within bounds */
 			if (x + t->sign.width_2 > dpi->left &&
 					x < dpi->left + dpi->width &&
 					y + 6 > dpi->top &&
 					y < dpi->top + dpi->height) {
-				// And draw it.
+				/* And draw it. */
 				SetDParam(0, t->index);
 				DrawString(x, y, STR_2056, 12);
 			}
 		}
 	}
 
-	// Draw map indicators
+	/* Draw map indicators */
 	{
 		Point pt;
 
-		// Find main viewport.
+		/* Find main viewport. */
 		vp = FindWindowById(WC_MAIN_WINDOW,0)->viewport;
 
 		pt = RemapCoords(WP(w, smallmap_d).scroll_x, WP(w, smallmap_d).scroll_y, 0);
@@ -1033,7 +1010,7 @@
 			int x = WP(w, vp_d).scrollpos_x; // Where is the main looking at
 			int y = WP(w, vp_d).scrollpos_y;
 
-			// set this view to same location. Based on the center, adjusting for zoom
+			/* set this view to same location. Based on the center, adjusting for zoom */
 			WP(w2, vp_d).scrollpos_x =  x - (w2->viewport->virtual_width -  w->viewport->virtual_width) / 2;
 			WP(w2, vp_d).scrollpos_y =  y - (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
 		} break;
@@ -1094,18 +1071,18 @@
 	Window *w, *v;
 	int i = 0;
 
-	// find next free window number for extra viewport
+	/* find next free window number for extra viewport */
 	while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != NULL) i++;
 
 	w = AllocateWindowDescFront(&_extra_view_port_desc, i);
 	if (w != NULL) {
 		int x, y;
-		// the main window with the main view
+		/* the main window with the main view */
 		v = FindWindowById(WC_MAIN_WINDOW, 0);
-		// New viewport start ats (zero,zero)
+		/* New viewport start ats (zero,zero) */
 		AssignWindowViewport(w, 3, 17, 294, 214, 0 , 0);
 
-		// center on same place as main window (zoom is maximum, no adjustment needed)
+		/* center on same place as main window (zoom is maximum, no adjustment needed) */
 		x = WP(v, vp_d).scrollpos_x;
 		y = WP(v, vp_d).scrollpos_y;
 		WP(w, vp_d).scrollpos_x = x + (v->viewport->virtual_width  - (294)) / 2;
--- a/src/sound.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/sound.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,8 +1,11 @@
 /* $Id$ */
 
+/** @file sound.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "mixer.h"
 #include "sound.h"
@@ -51,12 +54,12 @@
 
 		FioSeekTo(fe->file_offset, SEEK_SET);
 
-		// Check for special case, see else case
+		/* Check for special case, see else case */
 		FioReadBlock(name, FioReadByte()); // Read the name of the sound
 		if (strcmp(name, "Corrupt sound") != 0) {
 			FioSeekTo(12, SEEK_CUR); // Skip past RIFF header
 
-			// Read riff tags
+			/* Read riff tags */
 			for (;;) {
 				uint32 tag = FioReadDword();
 				uint32 size = FioReadDword();
@@ -130,7 +133,7 @@
 	return true;
 }
 
-// Low level sound player
+/* Low level sound player */
 static void StartSound(uint sound, int panning, uint volume)
 {
 	MixerChannel *mc;
--- a/src/sound.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/sound.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file sound.h */
+
 #ifndef SOUND_H
 #define SOUND_H
 
--- a/src/sprite.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/sprite.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file sprite.h */
+
 #ifndef SPRITE_H
 #define SPRITE_H
 
@@ -40,7 +42,7 @@
 	byte draw_proc;  /* this allows to specify a special drawing procedure.*/
 };
 
-// Iterate through all DrawTileSeqStructs in DrawTileSprites.
+/** Iterate through all DrawTileSeqStructs in DrawTileSprites. */
 #define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++)
 
 
--- a/src/spritecache.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/spritecache.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file spritechache.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -237,7 +239,7 @@
 
 void IncreaseSpriteLRU()
 {
-	// Increase all LRU values
+	/* Increase all LRU values */
 	if (_sprite_lru_counter > 16384) {
 		SpriteID i;
 
@@ -256,15 +258,15 @@
 		_sprite_lru_counter = 0;
 	}
 
-	// Compact sprite cache every now and then.
+	/* Compact sprite cache every now and then. */
 	if (++_compact_cache_counter >= 740) {
 		CompactSpriteCache();
 		_compact_cache_counter = 0;
 	}
 }
 
-// Called when holes in the sprite cache should be removed.
-// That is accomplished by moving the cached data.
+/** Called when holes in the sprite cache should be removed.
+ * That is accomplished by moving the cached data. */
 static void CompactSpriteCache()
 {
 	MemBlock *s;
@@ -277,26 +279,26 @@
 			MemBlock temp;
 			SpriteID i;
 
-			// Since free blocks are automatically coalesced, this should hold true.
+			/* Since free blocks are automatically coalesced, this should hold true. */
 			assert(!(next->size & S_FREE_MASK));
 
-			// If the next block is the sentinel block, we can safely return
+			/* If the next block is the sentinel block, we can safely return */
 			if (next->size == 0)
 				break;
 
-			// Locate the sprite belonging to the next pointer.
+			/* Locate the sprite belonging to the next pointer. */
 			for (i = 0; GetSpriteCache(i)->ptr != next->data; i++) {
 				assert(i != _spritecache_items);
 			}
 
 			GetSpriteCache(i)->ptr = s->data; // Adjust sprite array entry
-			// Swap this and the next block
+			/* Swap this and the next block */
 			temp = *s;
 			memmove(s, next, next->size);
 			s = NextBlock(s);
 			*s = temp;
 
-			// Coalesce free blocks
+			/* Coalesce free blocks */
 			while (NextBlock(s)->size & S_FREE_MASK) {
 				s->size += NextBlock(s)->size & ~S_FREE_MASK;
 			}
@@ -324,18 +326,18 @@
 		}
 	}
 
-	// Display an error message and die, in case we found no sprite at all.
-	// This shouldn't really happen, unless all sprites are locked.
+	/* Display an error message and die, in case we found no sprite at all.
+	 * This shouldn't really happen, unless all sprites are locked. */
 	if (best == (uint)-1)
 		error("Out of sprite memory");
 
-	// Mark the block as free (the block must be in use)
+	/* Mark the block as free (the block must be in use) */
 	s = (MemBlock*)GetSpriteCache(best)->ptr - 1;
 	assert(!(s->size & S_FREE_MASK));
 	s->size |= S_FREE_MASK;
 	GetSpriteCache(best)->ptr = NULL;
 
-	// And coalesce adjacent free blocks
+	/* And coalesce adjacent free blocks */
 	for (s = _spritecache_ptr; s->size != 0; s = NextBlock(s)) {
 		if (s->size & S_FREE_MASK) {
 			while (NextBlock(s)->size & S_FREE_MASK) {
@@ -364,10 +366,10 @@
 				 * big enough for an additional free block? */
 				if (cur_size == mem_req ||
 						cur_size >= mem_req + sizeof(MemBlock)) {
-					// Set size and in use
+					/* Set size and in use */
 					s->size = mem_req;
 
-					// Do we need to inject a free block too?
+					/* Do we need to inject a free block too? */
 					if (cur_size != mem_req) {
 						NextBlock(s)->size = (cur_size - mem_req) | S_FREE_MASK;
 					}
@@ -377,7 +379,7 @@
 			}
 		}
 
-		// Reached sentinel, but no block found yet. Delete some old entry.
+		/* Reached sentinel, but no block found yet. Delete some old entry. */
 		DeleteEntryFromSpriteCache();
 	}
 }
@@ -392,12 +394,12 @@
 
 	sc = GetSpriteCache(sprite);
 
-	// Update LRU
+	/* Update LRU */
 	sc->lru = ++_sprite_lru_counter;
 
 	p = sc->ptr;
 
-	// Load the sprite, if it is not loaded, yet
+	/* Load the sprite, if it is not loaded, yet */
 	if (p == NULL) p = ReadSprite(sc, sprite);
 	return p;
 }
@@ -405,12 +407,12 @@
 
 void GfxInitSpriteMem()
 {
-	// initialize sprite cache heap
+	/* initialize sprite cache heap */
 	if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)malloc(SPRITE_CACHE_SIZE);
 
-	// A big free block
+	/* A big free block */
 	_spritecache_ptr->size = (SPRITE_CACHE_SIZE - sizeof(MemBlock)) | S_FREE_MASK;
-	// Sentinel block (identified by size == 0)
+	/* Sentinel block (identified by size == 0) */
 	NextBlock(_spritecache_ptr)->size = 0;
 
 	/* Reset the spritecache 'pool' */
--- a/src/spritecache.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/spritecache.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file spritecache.h */
+
 #ifndef SPRITECACHE_H
 #define SPRITECACHE_H
 
--- a/src/station.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/station.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -55,12 +55,12 @@
 }
 
 /**
-	* Clean up a station by clearing vehicle orders and invalidating windows.
-	* 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
-	*/
+ * Clean up a station by clearing vehicle orders and invalidating windows.
+ * 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()
 {
 	DEBUG(station, cDebugCtorLevel, "I-%3d", index);
@@ -106,7 +106,7 @@
 }
 
 /** Called when new facility is built on the station. If it is the first facility
-	* it initializes also 'xy' and 'random_bits' members */
+ * it initializes also 'xy' and 'random_bits' members */
 void Station::AddFacility(byte new_facility_bit, TileIndex facil_xy)
 {
 	if (facilities == 0) {
@@ -182,7 +182,7 @@
 /** Obtain the length of a platform
  * @pre tile must be a railway station tile
  * @param tile A tile that contains the platform in question
- * @returns The length of the platform
+ * @return The length of the platform
  */
 uint Station::GetPlatformLength(TileIndex tile) const
 {
--- a/src/station.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/station.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file station.h */
+
 #ifndef STATION_H
 #define STATION_H
 
@@ -82,8 +84,8 @@
 
 struct StationSpecList {
 	const StationSpec *spec;
-	uint32 grfid;      /// GRF ID of this custom station
-	uint8  localidx;   /// Station ID within GRF of station
+	uint32 grfid;      ///< GRF ID of this custom station
+	uint8  localidx;   ///< Station ID within GRF of station
 };
 
 /** StationRect - used to track station spread out rectangle - cheaper than scanning whole map */
@@ -118,7 +120,7 @@
 
 		const AirportFTAClass *Airport() const
 		{
-			assert(airport_tile != 0);
+			if (airport_tile == 0) return GetAirport(AT_DUMMY);
 			return GetAirport(airport_type);
 		}
 
@@ -142,7 +144,7 @@
 	byte facilities;
 	byte airport_type;
 
-	// trainstation width/height
+	/* trainstation width/height */
 	byte trainst_w, trainst_h;
 
 	/** List of custom stations (StationSpecs) allocated to the station */
@@ -151,7 +153,7 @@
 
 	Date build_date;
 
-	uint64 airport_flags;   /// stores which blocks on the airport are taken. was 16 bit earlier on, then 32
+	uint64 airport_flags;   ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32
 	StationID index;
 
 	byte last_vehicle_type;
--- a/src/station_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/station_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -9,6 +9,7 @@
 #include "cmd_helper.h"
 #include "debug.h"
 #include "functions.h"
+#include "landscape.h"
 #include "station_map.h"
 #include "table/sprites.h"
 #include "table/strings.h"
@@ -118,7 +119,7 @@
 
 static Station* GetStationAround(TileIndex tile, int w, int h, StationID closest_station)
 {
-	// check around to see if there's any stations there
+	/* check around to see if there's any stations there */
 	BEGIN_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1))
 		if (IsTileType(tile_cur, MP_STATION)) {
 			StationID t = GetStationIndex(tile_cur);
@@ -1190,9 +1191,12 @@
 	/* If it is a drive-through stop check for valid axis */
 	if (is_drive_through && !IsValidAxis((Axis)p1)) return CMD_ERROR;
 	/* Road bits in the wrong direction */
-	if (build_over_road && (GetRoadBits(tile) & ((Axis)p1 == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return CMD_ERROR;
+	if (build_over_road && (GetRoadBits(tile) & ((Axis)p1 == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return_cmd_error(STR_DRIVE_THROUGH_ERROR_DIRECTION);
 	/* Not allowed to build over this road */
-	if (build_over_road && !IsTileOwner(tile, _current_player) && !(IsTileOwner(tile, OWNER_TOWN) && _patches.road_stop_on_town_road)) return CMD_ERROR;
+	if (build_over_road) {
+		if (IsTileOwner(tile, OWNER_TOWN) && !_patches.road_stop_on_town_road) return_cmd_error(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD);
+		if (!IsTileOwner(tile, OWNER_TOWN) && !CheckOwnership(GetTileOwner(tile))) return CMD_ERROR;
+	}
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -1600,6 +1604,13 @@
 
 	int32 cost = w * h * _eco->GetPrice(CEconomy::REMOVE_AIRPORT);
 
+	Vehicle *v;
+	FOR_ALL_VEHICLES(v) {
+		if (!(v->type == VEH_AIRCRAFT && IsNormalAircraft(v))) continue;
+
+		if (v->u.air.targetairport == st->index && v->u.air.state != FLYING) return CMD_ERROR;
+	}
+
 	BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
 		if (!EnsureNoVehicle(tile_cur)) return CMD_ERROR;
 
@@ -1949,7 +1960,7 @@
 		}
 
 		SpriteID pal;
-		if (_display_opt & DO_TRANS_BUILDINGS) {
+		if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) {
--- a/src/station_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/station_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file station_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -51,7 +53,8 @@
  * goes for the rating: at above 90% orso (224) it is also 'full'
  * Each cargo-bar is 16 pixels wide and 6 pixels high
  * Each rating 14 pixels wide and 1 pixel high and is 1 pixel below the cargo-bar
- * @param x,y X/Y coordinate to draw the box at
+ * @param x coordinate to draw the box at
+ * @param y coordinate to draw the box at
  * @param type Cargo type
  * @param amount Cargo amount
  * @param rating ratings data for that particular cargo */
@@ -230,7 +233,7 @@
 						}
 					}
 				}
-				//stations without waiting cargo
+				/* stations without waiting cargo */
 				if (num_waiting_cargo == 0 && include_empty) {
 					station_sort[n++] = st;
 				}
@@ -320,7 +323,7 @@
 			int cg_ofst;
 			int x = 89;
 			int y = 14;
-			int xb = 2; // offset from left of widget
+			int xb = 2; ///< offset from left of widget
 
 			uint i = 0;
 			for (CargoID c = 0; c < NUM_CARGO; c++) {
@@ -363,7 +366,7 @@
 				SetDParam(1, st->facilities);
 				x = DrawString(xb, y, STR_3049_0, 0) + 5;
 
-				// show cargo waiting and station ratings
+				/* show cargo waiting and station ratings */
 				for (CargoID j = 0; j < NUM_CARGO; j++) {
 					uint amount = GB(st->goods[j].waiting_acceptance, 0, 12);
 					if (amount != 0) {
@@ -510,7 +513,7 @@
 
 		case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
 			if (sl->sort_type != e->we.dropdown.index) {
-				// value has changed -> resort
+				/* value has changed -> resort */
 				sl->sort_type = e->we.dropdown.index;
 				station_sort.criteria = sl->sort_type;
 				sl->flags |= SL_RESORT;
--- a/src/station_map.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/station_map.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file station_map.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "station_map.h"
--- a/src/station_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/station_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file station_map.h */
+
 #ifndef STATION_MAP_H
 #define STATION_MAP_H
 
--- a/src/stdafx.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/stdafx.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file stdfax.h */
+
 #ifndef STDAFX_H
 #define STDAFX_H
 
--- a/src/string.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/string.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file string.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
@@ -123,7 +125,8 @@
  * not found, this is sufficient. If more, or general functionality is
  * needed, look to r7271 where it was removed because it was broken when
  * using certain locales: eg in Turkish the uppercase 'I' was converted to
- * '?', so just revert to the old functionality */
+ * '?', so just revert to the old functionality
+ * @param str string to convert */
 void strtolower(char *str)
 {
 	for (; *str != '\0'; str++) *str = tolower(*str);
--- a/src/string.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/string.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,26 +1,28 @@
 /* $Id$ */
 
+/** @file string.h */
+
 #ifndef STRING_H
 #define STRING_H
 
 #include "macros.h"
 
-/*
- * dst: destination buffer
- * src: string to copy/concatenate
- * size: size of the destination buffer
- * usage: ttd_strlcpy(dst, src, lengthof(dst));
+/**
+ * usage ttd_strlcpy(dst, src, lengthof(dst));
+ * @param dst destination buffer
+ * @param src string to copy/concatenate
+ * @param size size of the destination buffer
  */
 void ttd_strlcat(char *dst, const char *src, size_t size);
 void ttd_strlcpy(char *dst, const char *src, size_t size);
 
-/*
- * dst: destination buffer
- * src: string to copy
- * last: pointer to the last element in the dst array
- *       if NULL no boundary check is performed
- * returns a pointer to the terminating \0 in the destination buffer
+/**
  * usage: strecpy(dst, src, lastof(dst));
+ * @param dst destination buffer
+ * @param src string to copy
+ * @param last pointer to the last element in the dst array
+ *             if NULL no boundary check is performed
+ * @return a pointer to the terminating \0 in the destination buffer
  */
 char* strecat(char* dst, const char* src, const char* last);
 char* strecpy(char* dst, const char* src, const char* last);
@@ -38,9 +40,9 @@
  * Valid filter types for IsValidChar.
  */
 enum CharSetFilter {
-	CS_ALPHANUMERAL,      //! Both numeric and alphabetic and spaces and stuff
-	CS_NUMERAL,           //! Only numeric ones
-	CS_ALPHA,             //! Only alphabetic values
+	CS_ALPHANUMERAL,      ///< Both numeric and alphabetic and spaces and stuff
+	CS_NUMERAL,           ///< Only numeric ones
+	CS_ALPHA,             ///< Only alphabetic values
 };
 
 /** Convert the given string to lowercase, only works with ASCII! */
@@ -105,6 +107,8 @@
  * Return the length of an UTF-8 encoded value based on a single char. This
  * char should be the first byte of the UTF-8 encoding. If not, or encoding
  * is invalid, return value is 0
+ * @param c char to query length of
+ * @return requested size
  */
 static inline size_t Utf8EncodedCharLen(char c)
 {
@@ -127,7 +131,7 @@
 /**
  * Retrieve the previous UNICODE character in an UTF-8 encoded string.
  * @param s char pointer pointing to (the first char of) the next character
- * @returns a pointer in 's' to the previous UNICODE character's first byte
+ * @return a pointer in 's' to the previous UNICODE character's first byte
  * @note The function should not be used to determine the length of the previous
  * encoded char because it might be an invalid/corrupt start-sequence
  */
--- a/src/strings.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/strings.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file strings.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "currency.h"
@@ -37,7 +39,7 @@
 static char *FormatString(char *buff, const char *str, const int32 *argv, uint casei, const char* last);
 
 struct LanguagePack {
-	uint32 ident;
+	uint32 ident;       // 32-bits identifier
 	uint32 version;     // 32-bits of auto generated version info which is basically a hash of strings.h
 	char name[32];      // the international name of this language
 	char own_name[32];  // the localized name of this language
@@ -45,16 +47,16 @@
 	uint16 offsets[32]; // the offsets
 	byte plural_form;   // how to compute plural forms
 	byte pad[3];        // pad header to be a multiple of 4
-	char data[VARARRAY_SIZE];
+	char data[VARARRAY_SIZE]; // list of strings
 };
 
 static char **_langpack_offs;
 static LanguagePack *_langpack;
-static uint _langtab_num[32]; // Offset into langpack offs
+static uint _langtab_num[32];   // Offset into langpack offs
 static uint _langtab_start[32]; // Offset into langpack offs
 
 
-// Read an int64 from the argv array.
+/** Read an int64 from the argv array. */
 static inline int64 GetInt64(const int32 **argv)
 {
 	int64 result;
@@ -65,14 +67,14 @@
 	return result;
 }
 
-// Read an int32 from the argv array.
+/** Read an int32 from the argv array. */
 static inline int32 GetInt32(const int32 **argv)
 {
 	assert(argv);
 	return *(*argv)++;
 }
 
-// Read an array from the argv array.
+/** Read an array from the argv array. */
 static inline const int32 *GetArgvPtr(const int32 **argv, int n)
 {
 	const int32 *result;
@@ -85,13 +87,13 @@
 
 #define NUM_BOUND_STRINGS 8
 
-// Array to hold the bound strings.
+/* Array to hold the bound strings. */
 static const char *_bound_strings[NUM_BOUND_STRINGS];
 
-// This index is used to implement a "round-robin" allocating of
-// slots for BindCString. NUM_BOUND_STRINGS slots are reserved.
-// Which means that after NUM_BOUND_STRINGS calls to BindCString,
-// the indices will be reused.
+/* This index is used to implement a "round-robin" allocating of
+ * slots for BindCString. NUM_BOUND_STRINGS slots are reserved.
+ * Which means that after NUM_BOUND_STRINGS calls to BindCString,
+ * the indices will be reused. */
 static int _bind_index;
 
 static const char *GetStringPtr(StringID string)
@@ -99,10 +101,16 @@
 	return _langpack_offs[_langtab_start[string >> 11] + (string & 0x7FF)];
 }
 
-// The highest 8 bits of string contain the "case index".
-// These 8 bits will only be set when FormatString wants to print
-// the string in a different case. No one else except FormatString
-// should set those bits, therefore string CANNOT be StringID, but uint32.
+/** The highest 8 bits of string contain the "case index".
+ * These 8 bits will only be set when FormatString wants to print
+ * the string in a different case. No one else except FormatString
+ * should set those bits, therefore string CANNOT be StringID, but uint32.
+ * @param buffr
+ * @param string
+ * @param argv
+ * @param last
+ * @return a formatted string of char
+ */
 static char *GetStringWithArgs(char *buffr, uint string, const int32 *argv, const char* last)
 {
 	uint index = GB(string,  0, 11);
@@ -122,8 +130,8 @@
 				return GetSpecialPlayerNameString(buffr, index - 0xE4, argv, last);
 			break;
 
-		// User defined name
 		case 15:
+			/* User defined name */
 			return GetName(buffr, index, last);
 
 		case 26:
@@ -147,8 +155,8 @@
 			return FormatString(buffr, buff, argv, 0, last);
 
 		case 31:
-			// dynamic strings. These are NOT to be passed through the formatter,
-			// but passed through verbatim.
+			/* dynamic strings. These are NOT to be passed through the formatter,
+			 * but passed through verbatim. */
 			if (index < (STR_SPEC_USERSTRING & 0x7FF)) {
 				return strecpy(buffr, _bound_strings[index], last);
 			}
@@ -184,7 +192,8 @@
  * This function takes a C-string and allocates a temporary string ID.
  * The StringID of the bound string is valid until BindCString is called
  * another NUM_BOUND_STRINGS times. So be careful when using it.
- *
+ * @param str temp string to add
+ * @return the id of that temp string
  * @note formatting a DATE_TINY calls BindCString twice, thus reduces the
  *       amount of 'user' bound strings by 2.
  * @todo rewrite the BindCString system to make the limit flexible and
@@ -198,7 +207,10 @@
 	return idx + STR_SPEC_DYNSTRING;
 }
 
-// This function is used to "bind" a C string to a OpenTTD dparam slot.
+/** This function is used to "bind" a C string to a OpenTTD dparam slot.
+ * @param n slot of the string
+ * @param str string to bind
+ */
 void SetDParamStr(uint n, const char *str)
 {
 	SetDParam(n, BindCString(str));
@@ -331,10 +343,10 @@
 	char* p;
 	int j;
 
-	// multiply by exchange rate
+	/* multiply by exchange rate */
 	number *= spec->rate;
 
-	// convert from negative
+	/* convert from negative */
 	if (number < 0) {
 		buff = strecpy(buff, "-", last);
 		number = -number;
@@ -345,7 +357,7 @@
 	 * The only remaining value is 1 (suffix), so everything that is not 1 */
 	if (spec->symbol_pos != 1) buff = strecpy(buff, spec->prefix, last);
 
-	// for huge numbers, compact the number into k or M
+	/* for huge numbers, compact the number into k or M */
 	if (compact) {
 		if (number >= 1000000000) {
 			number = (number + 500000) / 1000000;
@@ -356,7 +368,7 @@
 		}
 	}
 
-	// convert to ascii number and add commas
+	/* convert to ascii number and add commas */
 	p = endof(buf);
 	*--p = '\0';
 	j = 4;
@@ -381,63 +393,63 @@
 
 static int DeterminePluralForm(int32 n)
 {
-	// The absolute value determines plurality
+	/* The absolute value determines plurality */
 	if (n < 0) n = -n;
 
 	switch (_langpack->plural_form) {
-	// Two forms, singular used for one only
-	// Used in:
-	//   Danish, Dutch, English, German, Norwegian, Swedish, Estonian, Finnish,
-	//   Greek, Hebrew, Italian, Portuguese, Spanish, Esperanto
+	/* Two forms, singular used for one only
+	 * Used in:
+	 *   Danish, Dutch, English, German, Norwegian, Swedish, Estonian, Finnish,
+	 *   Greek, Hebrew, Italian, Portuguese, Spanish, Esperanto */
 	case 0:
 	default:
 		return n != 1;
 
-	// Only one form
-	// Used in:
-	//   Hungarian, Japanese, Korean, Turkish
+	/* Only one form
+	 * Used in:
+	 *   Hungarian, Japanese, Korean, Turkish */
 	case 1:
 		return 0;
 
-	// Two forms, singular used for zero and one
-	// Used in:
-	//   French, Brazilian Portuguese
+	/* Two forms, singular used for zero and one
+	 * Used in:
+	 *   French, Brazilian Portuguese */
 	case 2:
 		return n > 1;
 
-	// Three forms, special case for zero
-	// Used in:
-	//   Latvian
+	/* Three forms, special case for zero
+	 * Used in:
+	 *   Latvian */
 	case 3:
 		return n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;
 
-	// Three forms, special case for one and two
-	// Used in:
-	//   Gaelige (Irish)
+	/* Three forms, special case for one and two
+	 * Used in:
+	 *   Gaelige (Irish) */
 	case 4:
 		return n==1 ? 0 : n==2 ? 1 : 2;
 
-	// Three forms, special case for numbers ending in 1[2-9]
-	// Used in:
-	//   Lithuanian
+	/* 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;
 
-	// 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
+	/* 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;
 
-	// Three forms, special case for one and some numbers ending in 2, 3, or 4
-	// Used in:
-	//   Polish
+	/* 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;
 
-	// Four forms, special case for one and all numbers ending in 02, 03, or 04
-	// Used in:
-	//   Slovenian
+	/* 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;
 	}
@@ -561,9 +573,9 @@
 				break;
 
 			case SCC_CARGO_SHORT: { /* {SHORTCARGO} */
-				// Short description of cargotypes. Layout:
-				// 8-bit = cargo type
-				// 16-bit = cargo count
+				/* Short description of cargotypes. Layout:
+				 * 8-bit = cargo type
+				 * 16-bit = cargo count */
 				StringID cargo_str = GetCargo(GetInt32(&argv))->units_volume;
 				switch (cargo_str) {
 					case STR_TONS: {
@@ -599,13 +611,13 @@
 			} break;
 
 			case SCC_CURRENCY_COMPACT_64: { /* {CURRCOMPACT64} */
-				// 64 bit compact currency-unit
+				/* 64 bit compact currency-unit */
 				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last);
 				break;
 			}
 
 			case SCC_STRING1: { /* {STRING1} */
-				// String that consumes ONE argument
+				/* String that consumes ONE argument */
 				uint str = modifier + GetInt32(&argv);
 				buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 1), last);
 				modifier = 0;
@@ -613,7 +625,7 @@
 			}
 
 			case SCC_STRING2: { /* {STRING2} */
-				// String that consumes TWO arguments
+				/* String that consumes TWO arguments */
 				uint str = modifier + GetInt32(&argv);
 				buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 2), last);
 				modifier = 0;
@@ -621,7 +633,7 @@
 			}
 
 			case SCC_STRING3: { /* {STRING3} */
-				// String that consumes THREE arguments
+				/* String that consumes THREE arguments */
 				uint str = modifier + GetInt32(&argv);
 				buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 3), last);
 				modifier = 0;
@@ -629,7 +641,7 @@
 			}
 
 			case SCC_STRING4: { /* {STRING4} */
-				// String that consumes FOUR arguments
+				/* String that consumes FOUR arguments */
 				uint str = modifier + GetInt32(&argv);
 				buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 4), last);
 				modifier = 0;
@@ -637,7 +649,7 @@
 			}
 
 			case SCC_STRING5: { /* {STRING5} */
-				// String that consumes FIVE arguments
+				/* String that consumes FIVE arguments */
 				uint str = modifier + GetInt32(&argv);
 				buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 5), last);
 				modifier = 0;
@@ -653,11 +665,11 @@
 				const Industry* i = GetIndustry(GetInt32(&argv));
 				int32 args[2];
 
-				// industry not valid anymore?
+				/* industry not valid anymore? */
 				if (!IsValidIndustry(i)) break;
 
-				// First print the town name and the industry type name
-				// The string STR_INDUSTRY_PATTERN controls the formatting
+				/* First print the town name and the industry type name
+				 * The string STR_INDUSTRY_PATTERN controls the formatting */
 				args[0] = i->town->index;
 				args[1] = GetIndustrySpec(i->type)->name;
 				buff = FormatString(buff, GetStringPtr(STR_INDUSTRY_FORMAT), args, modifier >> 24, last);
@@ -690,9 +702,9 @@
 			}
 
 			case SCC_CARGO: { // {CARGO}
-				// Layout now is:
-				//   8bit   - cargo type
-				//   16-bit - cargo count
+				/* Layout now is:
+				 *   8bit   - cargo type
+				 *   16-bit - cargo count */
 				CargoID cargo = GetInt32(&argv);
 				StringID cargo_str = (cargo == CT_INVALID) ? (StringID)STR_8838_N_A : GetCargo(cargo)->quantifier;
 				buff = GetStringWithArgs(buff, cargo_str, argv++, last);
@@ -748,17 +760,17 @@
 				argv++;
 				break;
 
-			// This sets up the gender for the string.
-			// We just ignore this one. It's used in {G 0 Der Die Das} to determine the case.
+			/* This sets up the gender for the string.
+			 * We just ignore this one. It's used in {G 0 Der Die Das} to determine the case. */
 			case SCC_GENDER_INDEX: // {GENDER 0}
 				str++;
 				break;
 
 			case SCC_STRING: {// {STRING}
 				uint str = modifier + GetInt32(&argv);
-				// WARNING. It's prohibited for the included string to consume any arguments.
-				// For included strings that consume argument, you should use STRING1, STRING2 etc.
-				// To debug stuff you can set argv to NULL and it will tell you
+				/* WARNING. It's prohibited for the included string to consume any arguments.
+				 * For included strings that consume argument, you should use STRING1, STRING2 etc.
+				 * To debug stuff you can set argv to NULL and it will tell you */
 				buff = GetStringWithArgs(buff, str, argv, last);
 				modifier = 0;
 				break;
@@ -834,23 +846,23 @@
 			}
 
 			case SCC_SETCASE: { // {SETCASE}
-				// This is a pseudo command, it's outputted when someone does {STRING.ack}
-				// The modifier is added to all subsequent GetStringWithArgs that accept the modifier.
+				/* This is a pseudo command, it's outputted when someone does {STRING.ack}
+				 * The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */
 				modifier = (byte)*str++ << 24;
 				break;
 			}
 
 			case SCC_SWITCH_CASE: { // {Used to implement case switching}
-				// <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT>
-				// Each LEN is printed using 2 bytes in big endian order.
+				/* <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT>
+				 * Each LEN is printed using 2 bytes in big endian order. */
 				uint num = (byte)*str++;
 				while (num) {
 					if ((byte)str[0] == casei) {
-						// Found the case, adjust str pointer and continue
+						/* Found the case, adjust str pointer and continue */
 						str += 3;
 						break;
 					}
-					// Otherwise skip to the next case
+					/* Otherwise skip to the next case */
 					str += 3 + (str[1] << 8) + str[2];
 					num--;
 				}
@@ -1018,20 +1030,20 @@
 			return strecpy(buff, origin_songs_specs[GetInt32(&argv) - 1].song_name, last);
 	}
 
-	// town name?
+	/* town name? */
 	if (IS_INT_INSIDE(ind - 6, 0, SPECSTR_TOWNNAME_LAST-SPECSTR_TOWNNAME_START + 1)) {
 		buff = GetSpecialTownNameString(buff, ind - 6, GetInt32(&argv), last);
 		return strecpy(buff, " Transport", last);
 	}
 
-	// language name?
+	/* language name? */
 	if (IS_INT_INSIDE(ind, (SPECSTR_LANGUAGE_START - 0x70E4), (SPECSTR_LANGUAGE_END - 0x70E4) + 1)) {
 		int i = ind - (SPECSTR_LANGUAGE_START - 0x70E4);
 		return strecpy(buff,
 			i == _dynlang.curr ? _langpack->own_name : _dynlang.ent[i].name, last);
 	}
 
-	// resolution size?
+	/* resolution size? */
 	if (IS_INT_INSIDE(ind, (SPECSTR_RESOLUTION_START - 0x70E4), (SPECSTR_RESOLUTION_END - 0x70E4) + 1)) {
 		int i = ind - (SPECSTR_RESOLUTION_START - 0x70E4);
 		buff += snprintf(
@@ -1040,7 +1052,7 @@
 		return buff;
 	}
 
-	// screenshot format name?
+	/* screenshot format name? */
 	if (IS_INT_INSIDE(ind, (SPECSTR_SCREENSHOT_START - 0x70E4), (SPECSTR_SCREENSHOT_END - 0x70E4) + 1)) {
 		int i = ind - (SPECSTR_SCREENSHOT_START - 0x70E4);
 		return strecpy(buff, GetScreenshotFormatDesc(i), last);
@@ -1050,7 +1062,10 @@
 	return NULL;
 }
 
-// remap a string ID from the old format to the new format
+/**
+ * remap a string ID from the old format to the new format
+ * @param s StringID that requires remapping
+ * @return translated ID*/
 StringID RemapOldStringID(StringID s)
 {
 	switch (s) {
@@ -1103,10 +1118,10 @@
 		tot_count += num;
 	}
 
-	// Allocate offsets
+	/* Allocate offsets */
 	langpack_offs = MallocT<char*>(tot_count);
 
-	// Fill offsets
+	/* Fill offsets */
 	s = lang_pack->data;
 	for (i = 0; i != tot_count; i++) {
 		len = (byte)*s;
@@ -1133,7 +1148,7 @@
 /** Determine the current charset based on the environment
  * First check some default values, after this one we passed ourselves
  * and if none exist return the value for $LANG
- * @param environment variable to check conditionally if default ones are not
+ * @param param environment variable to check conditionally if default ones are not
  *        set. Pass NULL if you don't want additional checks.
  * @return return string containing current charset, or NULL if not-determinable */
 const char *GetCurrentLocale(const char *param)
--- a/src/strings.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/strings.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file strings.h */
+
 #ifndef STRINGS_H
 #define STRINGS_H
 
--- a/src/subsidy_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/subsidy_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file subsidy_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "table/strings.h"
--- a/src/table/build_industry.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/table/build_industry.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1068,28 +1068,14 @@
 #undef MK
 #undef MKEND
 
-/* Procedures that can be run to check whether an industry may
- * build at location the given to the procedure */
-enum CheckProc {
-	CHECK_NOTHING    = 0,
-	CHECK_FOREST     = 1,
-	CHECK_REFINERY   = 2,
-	CHECK_FARM       = 3,
-	CHECK_PLANTATION = 4,
-	CHECK_WATER      = 5,
-	CHECK_LUMBERMILL = 6,
-	CHECK_BUBBLEGEN  = 7,
-	CHECK_OIL_RIG    = 8,
-	CHECK_END,
-};
-
-#define MK(tbl, d, c1, c2, c3, proc, p1, r1, p2, r2, m, a1, a2, a3, pr, clim, bev, in, intx, s1, s2, s3) \
+#define MK(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, in, intx, s1, s2, s3}
+	 {a1, a2, a3}, pr, clim, bev, col, in, intx, s1, s2, s3, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, 0, 0, 0, 0}
 
 static const IndustrySpec _industry_specs[] = {
 	/* Format:
-	   tile table                              cost multiplier
+	   tile table                              cost multiplier   appear chances(4ingame, 4random)  map colour
 	   cannot be close to these industries (3 times)             check proc
 	   (produced cargo + rate) (twice)         minimum cargo moved to station
 	   3 accepted cargo
@@ -1097,7 +1083,7 @@
 	   industry behaviours
 	   industry name                           building text
 	   messages : Closure                      production up                      production down   */
-	MK(_tile_table_coal_mine,                  210,
+	MK(_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,
@@ -1106,7 +1092,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,
+	MK(_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,
@@ -1115,16 +1101,16 @@
 	   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,
+	MK(_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,
 	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TEMPERATE,
-	   INDUSTRYBEH_CUT_TREES,
+	   INDUSTRYBEH_NONE,
 	   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,
+	MK(_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,
@@ -1133,7 +1119,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,
+	MK(_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,
@@ -1142,7 +1128,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,
+	MK(_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,
@@ -1151,7 +1137,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,
+	MK(_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,
@@ -1160,7 +1146,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,
+	MK(_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,
@@ -1169,7 +1155,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,
+	MK(_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,
@@ -1178,7 +1164,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,
+	MK(_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,
@@ -1187,7 +1173,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,
+	MK(_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,
@@ -1196,7 +1182,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,
+	MK(_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,
@@ -1205,7 +1191,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,
+	MK(_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,
@@ -1214,7 +1200,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,
+	MK(_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,
@@ -1223,7 +1209,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,
+	MK(_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,
@@ -1232,16 +1218,16 @@
 	   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,
+	MK(_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,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_PRODUCTION,                1 << LT_ARCTIC,
 	   INDUSTRYBEH_NONE,
 	   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,
+	MK(_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,
@@ -1250,7 +1236,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,
+	MK(_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,
@@ -1259,7 +1245,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,
+	MK(_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,
@@ -1268,7 +1254,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,
+	MK(_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,
@@ -1277,7 +1263,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,
+	MK(_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,
@@ -1286,7 +1272,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,
+	MK(_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,
@@ -1295,7 +1281,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,
+	MK(_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,
@@ -1304,7 +1290,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,
+	MK(_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,
@@ -1313,7 +1299,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,
+	MK(_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,
@@ -1322,7 +1308,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,
+	MK(_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,
@@ -1331,7 +1317,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,
+	MK(_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,
@@ -1340,7 +1326,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,
+	MK(_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,
@@ -1349,7 +1335,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,
+	MK(_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,
@@ -1358,7 +1344,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,
+	MK(_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,
@@ -1367,7 +1353,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,
+	MK(_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,
@@ -1376,7 +1362,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,
+	MK(_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,
@@ -1385,7 +1371,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,
+	MK(_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,
@@ -1394,8 +1380,8 @@
 	   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,
-	   IT_COLA_WELLS,     IT_BUBBLE_GENERATOR, IT_INVALID,     CHECK_NOTHING,
+	MK(_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,
 	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TOYLAND,
@@ -1403,7 +1389,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,
+	MK(_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,
@@ -1412,7 +1398,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,
+	MK(_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,
@@ -1421,7 +1407,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,
+	MK(_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,
@@ -1432,75 +1418,6 @@
 };
 #undef MK
 
-
-static const byte _industry_create_table_0[] = {
-	4, 4,
-	5, 3,
-	5, 2,
-	8, 0,
-	5, 1,
-	4, 11,
-	5, 18,
-	9, 9,
-	5, 8,
-	5, 6,
-	0
-};
-
-static const byte _industry_create_table_1[] = {
-	4, 4,
-	5, 3,
-	5, 14,
-	8, 0,
-	5, 1,
-	5, 11,
-	5, 13,
-	9, 9,
-	4, 15,
-	5, 7,
-	6, 16,
-	0
-};
-
-static const byte _industry_create_table_2[] = {
-	4, 4,
-	5, 11,
-	5, 16,
-	4, 13,
-	4, 17,
-	4, 10,
-	4, 19,
-	4, 20,
-	4, 21,
-	8, 22,
-	4, 13,
-	4, 23,
-	2, 24,
-	0
-};
-
-static const byte _industry_create_table_3[] = {
-	5, 26,
-	5, 27,
-	4, 28,
-	5, 29,
-	4, 30,
-	5, 31,
-	5, 32,
-	4, 33,
-	5, 34,
-	5, 35,
-	4, 36,
-	0
-};
-
-static const byte * const _industry_create_table[4] = {
-	_industry_create_table_0,
-	_industry_create_table_1,
-	_industry_create_table_2,
-	_industry_create_table_3,
-};
-
 /** Writes the properties of a industry tile into the IndustryTileSpec struct.
  * @param c1 first type of cargo accepted for this tile
  * @param c2 second cargo
--- a/src/table/industry_land.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/table/industry_land.h	Tue Jun 12 11:56:35 2007 +0000
@@ -15,8 +15,23 @@
 	byte image_3;
 };
 
+
+/**
+ * Macro to ease the declaration of the array
+ * @param s1 sprite ID of ground sprite
+ * @param p1 palette ID of ground sprite
+ * @param s2 sprite ID of building sprite
+ * @param p2 palette ID of building sprite
+ * @param sx coordinate x of the sprite
+ * @param sy coordinate y of the sprite
+ * @param w width of the sprite
+ * @param h height of the sprite
+ * @param dz virtual height of the sprite
+ * @param p this allows to specify a special drawing procedure.
+ * @see DrawBuildingsTileStruct */
 #define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w - 1, h - 1, dz, p }
 
+/** Structure for industry tiles drawing */
 static const DrawBuildingsTileStruct _industry_draw_tile_data[NUM_INDUSTRY_GFXES * 4] = {
 	M(     0xf54, PAL_NONE,      0x7db, PAL_NONE,  7,  0,  9,  9,  10, 0),
 	M(     0xf54, PAL_NONE,      0x7dc, PAL_NONE,  7,  0,  9,  9,  30, 0),
--- a/src/table/namegen.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/table/namegen.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file table/namegen.h Namepart tables for the town name generator */
+
 #include "../stdafx.h"
 #include "../openttd.h"
 
--- a/src/table/roadveh.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/table/roadveh.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file table/roadveh.h Data about how a road vehicle must drive on a tile */
+
 static const RoadDriveEntry _roadveh_drive_data_0[] = {
 	{15, 5},
 	{14, 5},
--- a/src/table/town_land.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/table/town_land.h	Tue Jun 12 11:56:35 2007 +0000
@@ -5,17 +5,19 @@
 
 /** Writes the data into the Town Tile Drawing Struct
  * @param s1 The first sprite of the building, mostly the ground sprite
+ * @param p1 The first sprite's palette of the building, mostly the ground sprite
  * @param s2 The second sprite of the building.
+ * @param p2 The second sprite's palette of the building.
  * @param sx The x-position of the sprite within the tile
- * @param xy the y-position of the sprite within the tile
+ * @param sy the y-position of the sprite within the tile
  * @param w the width of the sprite
  * @param h the height of the sprite
  * @param dz the virtual height of the sprite
- * @param p set to 1 if a lift is present
- * @see DrawTownTileStruct
- */
+ * @param p set to 1 if a lift is present ()
+ * @see DrawBuildingsTileStruct */
 #define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w - 1, h - 1, dz, p}
 
+/** structure of houses graphics*/
 static const DrawBuildingsTileStruct _town_draw_tile_data[] = {
 	M( 0xf54, PAL_NONE,  0x58d, PAL_NONE,  0,  0, 14, 14,   8, 0),
 	M( 0xf54, PAL_NONE,  0x58e, PAL_NONE,  0,  0, 14, 14,  60, 0),
--- a/src/terraform_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/terraform_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file terraform_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
@@ -91,11 +93,11 @@
 
 /**
  * A central place to handle all X_AND_Y dragged GUI functions.
- * @param e @WindowEvent variable holding in its higher bits (excluding the lower
+ * @param e WindowEvent variable holding in its higher bits (excluding the lower
  * 4, since that defined the X_Y drag) the type of action to be performed
  * @return Returns true if the action was found and handled, and false otherwise. This
  * allows for additional implements that are more local. For example X_Y drag
- * of convertrail which belongs in rail_gui.c and not terraform_gui.c
+ * of convertrail which belongs in rail_gui.cpp and not terraform_gui.cpp
  **/
 bool GUIPlaceProcDragXY(const WindowEvent *e)
 {
--- a/src/texteff.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/texteff.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,11 +1,14 @@
 /* $Id$ */
 
+/** @file texteff.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
 #include "macros.h"
 #include "strings.h"
 #include "gfx.h"
+#include "landscape.h"
 #include "viewport.h"
 #include "saveload.h"
 #include "hal.h"
@@ -121,7 +124,7 @@
 	}
 }
 
-/* Hide the textbox */
+/** Hide the textbox */
 void UndrawTextMessage()
 {
 	if (_textmessage_visible) {
@@ -172,7 +175,7 @@
 	}
 }
 
-/* Check if a message is expired every day */
+/** Check if a message is expired every day */
 void TextMessageDailyLoop()
 {
 	uint i;
@@ -196,7 +199,7 @@
 	}
 }
 
-/* Draw the textmessage-box */
+/** Draw the textmessage-box */
 void DrawTextMessage()
 {
 	if (!_textmessage_dirty) return;
--- a/src/tgp.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tgp.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tgp.cpp OTTD Perlin Noise Landscape Generator, aka TerraGenesis Perlin */
+
 #include "stdafx.h"
 #include <math.h>
 #include "openttd.h"
@@ -17,7 +19,6 @@
 #include "helpers.hpp"
 
 /*
- * OTTD Perlin Noise Landscape Generator, aka TerraGenesis Perlin
  *
  * Quickie guide to Perlin Noise
  * Perlin noise is a predictable pseudo random number sequence. By generating
@@ -167,11 +168,11 @@
 /** Height map - allocated array of heights (MapSizeX() + 1) x (MapSizeY() + 1) */
 struct HeightMap
 {
-	height_t *h;         //! array of heights
-	uint     dim_x;      //! height map size_x MapSizeX() + 1
-	uint     total_size; //! height map total size
-	uint     size_x;     //! MapSizeX()
-	uint     size_y;     //! MapSizeY()
+	height_t *h;         //< array of heights
+	uint     dim_x;      //< height map size_x MapSizeX() + 1
+	uint     total_size; //< height map total size
+	uint     size_x;     //< MapSizeX()
+	uint     size_y;     //< MapSizeY()
 };
 
 /** Global height map instance */
@@ -200,13 +201,13 @@
 /** Noise amplitudes (multiplied by 1024)
  * - indexed by "smoothness setting" and log2(frequency) */
 static const amplitude_t _amplitudes_by_smoothness_and_frequency[4][12] = {
-	// Very smooth
+	/* Very smooth */
 	{1000,  350,  123,   43,   15,    1,     1,    0,    0,    0,    0,    0},
-	// Smooth
+	/* Smooth */
 	{1000, 1000,  403,  200,   64,    8,     1,    0,    0,    0,    0,    0},
-	// Rough
+	/* Rough */
 	{1000, 1200,  800,  500,  200,   16,     4,    0,    0,    0,    0,    0},
-	// Very Rough
+	/* Very Rough */
 	{1500, 1000, 1200, 1000,  500,   32,    20,    0,    0,    0,    0,    0},
 };
 
@@ -215,13 +216,17 @@
 
 /** Desired maximum height - indexed by _opt.diff.terrain_type */
 static const int8 _max_height[4] = {
-	6,       // Very flat
-	9,       // Flat
-	12,      // Hilly
-	15       // Mountainous
+	6,       ///< Very flat
+	9,       ///< Flat
+	12,      ///< Hilly
+	15       ///< Mountainous
 };
 
-/** Check if a X/Y set are within the map. */
+/** Check if a X/Y set are within the map.
+ * @param x coordinate x
+ * @param y coordinate y
+ * @return true if within the map
+ */
 static inline bool IsValidXY(uint x, uint y)
 {
 	return ((int)x) >= 0 && x < _height_map.size_x && ((int)y) >= 0 && y < _height_map.size_y;
@@ -680,10 +685,10 @@
 
 /* The following decimals are the octave power modifiers for the Perlin noise */
 static const double _perlin_p_values[][7] = {    // perlin frequency per power
-	{ 0.35, 0.35, 0.35, 0.35, 0.35, 0.25, 0.539 }, // Very smooth
-	{ 0.45, 0.55, 0.45, 0.45, 0.35, 0.25, 0.89  }, // Smooth
-	{ 0.85, 0.80, 0.70, 0.45, 0.45, 0.35, 1.825 }, // Rough 1.825
-	{ 0.95, 0.85, 0.80, 0.55, 0.55, 0.45, 2.245 }  // Very Rough 2.25
+	{ 0.35, 0.35, 0.35, 0.35, 0.35, 0.25, 0.539 }, ///< Very smooth
+	{ 0.45, 0.55, 0.45, 0.45, 0.35, 0.25, 0.89  }, ///< Smooth
+	{ 0.85, 0.80, 0.70, 0.45, 0.45, 0.35, 1.825 }, ///< Rough 1.825
+	{ 0.95, 0.85, 0.80, 0.55, 0.55, 0.45, 2.245 }  //< Very Rough 2.25
 };
 
 /**
--- a/src/tgp.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tgp.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tgp.h */
+
 #ifndef TGP_H
 #define TGP_H
 
--- a/src/thread.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/thread.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file thread.cpp */
+
 #include "stdafx.h"
 #include "thread.h"
 #include <stdlib.h>
--- a/src/thread.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/thread.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file thread.h */
+
 #ifndef THREAD_H
 #define THREAD_H
 
--- a/src/tile.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tile.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tile.cpp */
+
 #include "stdafx.h"
 #include "tile.h"
 
--- a/src/tile.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tile.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tile.h */
+
 #ifndef TILE_H
 #define TILE_H
 
--- a/src/town.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/town.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file town.h */
+
 #ifndef TOWN_H
 #define TOWN_H
 
@@ -78,34 +80,34 @@
 struct Town : EconomicObject {
 	TileIndex xy;
 
-	// Current population of people and amount of houses.
+	/* Current population of people and amount of houses. */
 	uint16 num_houses;
 	uint32 population;
 
-	// Town name
+	/* Town name */
 	uint16 townnametype;
 	uint32 townnameparts;
 
-	// NOSAVE: Location of name sign, UpdateTownVirtCoord updates this.
+	/* NOSAVE: Location of name sign, UpdateTownVirtCoord updates this. */
 	ViewportSign sign;
 
-	// Makes sure we don't build certain house types twice.
-	// bit 0 = Building funds received
-	// bit 1 = CHURCH
-	// bit 2 = STADIUM
+	/* Makes sure we don't build certain house types twice.
+	 * bit 0 = Building funds received
+	 * bit 1 = CHURCH
+	 * bit 2 = STADIUM */
 	byte flags12;
 
-	// Which players have a statue?
+	/* Which players have a statue? */
 	byte statues;
 
-	// Player ratings as well as a mask that determines which players have a rating.
+	/* Player ratings as well as a mask that determines which players have a rating. */
 	byte have_ratings;
-	uint8 unwanted[MAX_PLAYERS]; // how many months companies aren't wanted by towns (bribe)
-	PlayerByte exclusivity;        // which player has exslusivity
-	uint8 exclusive_counter;     // months till the exclusivity expires
+	uint8 unwanted[MAX_PLAYERS]; ///< how many months companies aren't wanted by towns (bribe)
+	PlayerByte exclusivity;      ///< which player has exslusivity
+	uint8 exclusive_counter;     ///< months till the exclusivity expires
 	int16 ratings[MAX_PLAYERS];
 
-	// Maximum amount of passengers and mail that can be transported.
+	/* Maximum amount of passengers and mail that can be transported. */
 	uint32 max_pass;
 	uint32 max_mail;
 	uint32 new_max_pass;
@@ -115,36 +117,36 @@
 	uint32 new_act_pass;
 	uint32 new_act_mail;
 
-	// Amount of passengers that were transported.
+	/* Amount of passengers that were transported. */
 	byte pct_pass_transported;
 	byte pct_mail_transported;
 
-	// Amount of food and paper that was transported. Actually a bit mask would be enough.
+	/* Amount of food and paper that was transported. Actually a bit mask would be enough. */
 	uint16 act_food;
 	uint16 act_water;
 	uint16 new_act_food;
 	uint16 new_act_water;
 
-	// Time until we rebuild a house.
-	byte time_until_rebuild;
+	/* Time until we rebuild a house. */
+	uint16 time_until_rebuild;
 
-	// When to grow town next time.
-	byte grow_counter;
-	byte growth_rate;
+	/* When to grow town next time. */
+	uint16 grow_counter;
+	int16 growth_rate;
 
-	// Fund buildings program in action?
+	/* Fund buildings program in action? */
 	byte fund_buildings_months;
 
-	// Fund road reconstruction in action?
+	/* Fund road reconstruction in action? */
 	byte road_build_months;
 
-	// Index in town array
+	/* Index in town array */
 	TownID index;
 
-	// NOSAVE: UpdateTownRadius updates this given the house count.
+	/* NOSAVE: UpdateTownRadius updates this given the house count. */
 	uint16 radius[5];
 
-	// NOSAVE: The number of each type of building in the town.
+	/* NOSAVE: The number of each type of building in the town. */
 	BuildingCounts building_counts;
 
 	/**
@@ -267,8 +269,8 @@
 };
 
 enum {
-	// These refer to the maximums, so Appalling is -1000 to -400
-	// MAXIMUM RATINGS BOUNDARIES
+	/* These refer to the maximums, so Appalling is -1000 to -400
+	 * MAXIMUM RATINGS BOUNDARIES */
 	RATING_MINIMUM     = -1000,
 	RATING_APPALLING   =  -400,
 	RATING_VERYPOOR    =  -200,
@@ -277,11 +279,11 @@
 	RATING_GOOD        =   400,
 	RATING_VERYGOOD    =   600,
 	RATING_EXCELLENT   =   800,
-	RATING_OUTSTANDING =  1000,         // OUTSTANDING
+	RATING_OUTSTANDING =  1000,         ///< OUTSTANDING
 
 	RATING_MAXIMUM = RATING_OUTSTANDING,
 
-	// RATINGS AFFECTING NUMBERS
+	/* RATINGS AFFECTING NUMBERS */
 	RATING_TREE_DOWN_STEP = -35,
 	RATING_TREE_MINIMUM   = RATING_MINIMUM,
 	RATING_TREE_UP_STEP   = 7,
@@ -302,25 +304,25 @@
 	RATING_BRIBE_DOWN_TO = -50        // XXX SHOULD BE SOMETHING LOWER?
 };
 
-enum {
-/* This is the base "normal" number of towns on the 8x8 map, when
- * one town should get grown per tick. The other numbers of towns
- * are then scaled based on that. */
-	TOWN_GROWTH_FREQUENCY = 23,
-/* Simple value that indicates the house has reached final stage of construction*/
-	TOWN_HOUSE_COMPLETED  =  3,
-};
+/** This is the number of ticks between towns being processed for building new
+ * houses or roads. This value originally came from the size of the town array
+ * in TTD. */
+static const byte TOWN_GROWTH_FREQUENCY = 70;
 
-/* This enum is used in conjonction with town->flags12.
+/** Simple value that indicates the house has reached the final stage of
+ * construction. */
+static const byte TOWN_HOUSE_COMPLETED = 3;
+
+/** This enum is used in conjonction with town->flags12.
  * IT simply states what bit is used for.
  * It is pretty unrealistic (IMHO) to only have one church/stadium
  * per town, NO MATTER the population of it.
  * And there are 5 more bits available on flags12...
  */
 enum {
-	TOWN_IS_FUNDED      = 0,   // Town has received some funds for
-	TOWN_HAS_CHURCH     = 1,   // There can be only one church by town.
-	TOWN_HAS_STADIUM    = 2    // There can be only one stadium by town.
+	TOWN_IS_FUNDED      = 0,   ///< Town has received some funds for
+	TOWN_HAS_CHURCH     = 1,   ///< There can be only one church by town.
+	TOWN_HAS_STADIUM    = 2    ///< There can be only one stadium by town.
 };
 
 bool CheckforTownRating(uint32 flags, Town *t, byte type);
@@ -337,12 +339,19 @@
 
 /**
  * Check if a Town really exists.
+ * @param town to inquiry
+ * @return true if it exists
  */
 static inline bool IsValidTown(const Town* town)
 {
 	return town->xy != 0;
 }
 
+/**
+ * Check if a TownID is valid.
+ * @param TownID to inquiry
+ * @return true if it exists
+ */
 static inline bool IsValidTownID(TownID index)
 {
 	return index < GetTownPoolSize() && IsValidTown(GetTown(index));
--- a/src/town_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/town_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -152,7 +152,7 @@
 	/* Add a house on top of the ground? */
 	image = dcts->building.sprite;
 	if (image != 0) {
-		if (_display_opt & DO_TRANS_BUILDINGS) {
+		if (HASBIT(_transparent_opt, TO_HOUSES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else {
@@ -168,7 +168,7 @@
 			ti->z
 		);
 
-		if (_display_opt & DO_TRANS_BUILDINGS) return;
+		if (HASBIT(_transparent_opt, TO_HOUSES)) return;
 	}
 
 	{
@@ -199,10 +199,10 @@
 
 	if (_tick_counter & 3) return;
 
-	// If the house is not one with a lift anymore, then stop this animating.
-	// Not exactly sure when this happens, but probably when a house changes.
-	// Before this was just a return...so it'd leak animated tiles..
-	// That bug seems to have been here since day 1??
+	/* If the house is not one with a lift anymore, then stop this animating.
+	 * Not exactly sure when this happens, but probably when a house changes.
+	 * Before this was just a return...so it'd leak animated tiles..
+	 * That bug seems to have been here since day 1?? */
 	if (!(GetHouseSpecs(GetHouseType(tile))->building_flags & BUILDING_IS_ANIMATED)) {
 		DeleteAnimatedTile(tile);
 		return;
@@ -211,7 +211,7 @@
 	if (!LiftHasDestination(tile)) {
 		int i;
 
-		/** Building has 6 floors, number 0 .. 6, where 1 is illegal.
+		/*  Building has 6 floors, number 0 .. 6, where 1 is illegal.
 		 *  This is due to the fact that the first floor is, in the graphics,
 		 *  the height of 2 'normal' floors.
 		 *  Furthermore, there are 6 lift positions from floor N (incl) to floor N + 1 (excl) */
@@ -329,7 +329,7 @@
 	if (house_id >= NEW_HOUSE_OFFSET && !NewHouseTileLoop(tile)) return;
 
 	if (!IsHouseCompleted(tile)) {
-		/*Construction is not completed. See if we can go further in construction*/
+		/* Construction is not completed. See if we can go further in construction*/
 		MakeTownHouseBigger(tile);
 		return;
 	}
@@ -358,11 +358,11 @@
 	_current_player = OWNER_TOWN;
 
 	if (hs->building_flags & BUILDING_HAS_1_TILE && HASBIT(t->flags12, TOWN_IS_FUNDED) && CanDeleteHouse(tile) && --t->time_until_rebuild == 0) {
-		t->time_until_rebuild = GB(r, 16, 6) + 130;
+		t->time_until_rebuild = GB(r, 16, 8) + 192;
 
 		ClearTownHouse(t, tile);
 
-		// rebuild with another house?
+		/* Rebuild with another house? */
 		if (GB(r, 24, 8) >= 12) DoBuildTownHouse(t, tile);
 	}
 
@@ -441,8 +441,8 @@
 	{ 0,  1},
 	{-1,  0},
 
-	// Store the first 3 elements again.
-	// Lets us rotate without using &3.
+	/* Store the first 3 elements again.
+	 * Lets us rotate without using &3. */
 	{ 0, -1},
 	{ 1,  0},
 	{ 0,  1}
@@ -505,16 +505,16 @@
 	Slope k;
 	Slope slope;
 
-	// If this assertion fails, it might be because the world contains
-	//  land at the edges. This is not ok.
+	/* If this assertion fails, it might be because the world contains
+	 *  land at the edges. This is not ok. */
 	TILE_ASSERT(tile);
 
 	for (;;) {
-		// Check if there already is a road at this point?
+		/* Check if there already is a road at this point? */
 		if (GetAnyRoadTrackBits(tile) == 0) {
-			// No, try to build one in the direction.
-			// if that fails clear the land, and if that fails exit.
-			// This is to make sure that we can build a road here later.
+			/* No, try to build one in the direction.
+			 * if that fails clear the land, and if that fails exit.
+			 * This is to make sure that we can build a road here later. */
 			if (CmdFailed(DoCommand(tile, (dir & 1 ? ROAD_X : ROAD_Y), 0, DC_AUTO, CMD_BUILD_ROAD)) &&
 					CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR)))
 				return false;
@@ -523,20 +523,20 @@
 		slope = GetTileSlope(tile, NULL);
 		if (slope == SLOPE_FLAT) {
 no_slope:
-			// Tile has no slope
-			// Disallow the road if any neighboring tile has a road.
+			/* 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))
 				return false;
 
-			// Otherwise allow
+			/* Otherwise allow */
 			return true;
 		}
 
-		// If the tile is not a slope in the right direction, then
-		// maybe terraform some.
+		/* If the tile is not a slope in the right direction, then
+		 * maybe terraform some. */
 		k = (dir & 1) ? SLOPE_NE : SLOPE_NW;
 		if (k != slope && ComplementSlope(k) != slope) {
 			uint32 r = Random();
@@ -552,7 +552,7 @@
 					                      CMD_TERRAFORM_LAND);
 				}
 				if (CmdFailed(res) && CHANCE16I(1, 3, r)) {
-					// We can consider building on the slope, though.
+					/* We can consider building on the slope, though. */
 					goto no_slope;
 				}
 			}
@@ -580,12 +580,12 @@
 
 	TILE_ASSERT(tile);
 
-	// Don't terraform if land is plain or if there's a house there.
+	/* Don't terraform if land is plain or if there's a house there. */
 	if (IsTileType(tile, MP_HOUSE)) return;
 	tileh = GetTileSlope(tile, NULL);
 	if (tileh == SLOPE_FLAT) return;
 
-	// First try up, then down
+	/* First try up, then down */
 	if (!TerraformTownTile(tile, ~tileh & 0xF, 1)) {
 		TerraformTownTile(tile, tileh & 0xF, 0);
 	}
@@ -605,17 +605,17 @@
 		int a;
 		int b;
 
-		// Tile has no road. First reset the status counter
-		// to say that this is the last iteration.
+		/* Tile has no road. First reset the status counter
+		 * to say that this is the last iteration. */
 		_grow_town_result = 0;
 
-		// Remove hills etc
+		/* Remove hills etc */
 		LevelTownLand(tile);
 
-		// Is a road allowed here?
+		/* Is a road allowed here? */
 		if (!IsRoadAllowedHere(tile, block)) return;
 
-		// Randomize new road block numbers
+		/* Randomize new road block numbers */
 		a = block;
 		b = block ^ 2;
 		if (CHANCE16(1, 4)) {
@@ -625,29 +625,29 @@
 		}
 
 		if (!IsRoadAllowedHere(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a])), a)) {
-			// A road is not allowed to continue the randomized road,
-			//   return if the road we're trying to build is curved.
+			/* A road is not allowed to continue the randomized road,
+			 *   return if the road we're trying to build is curved. */
 			if (a != (b ^ 2)) return;
 
-			// Return if neither side of the new road is a house
+			/* Return if neither side of the new road is a house */
 			if (!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 1])), MP_HOUSE) &&
 					!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 3])), MP_HOUSE))
 				return;
 
-			// That means that the road is only allowed if there is a house
-			//  at any side of the new road.
+			/* That means that the road is only allowed if there is a house
+			 *  at any side of the new road. */
 		}
 		rcmd = (RoadBits)((1 << a) + (1 << b));
 
 	} else if (block < 5 && !HASBIT(mask,block^2)) {
-		// Continue building on a partial road.
-		// Always OK.
+		/* Continue building on a partial road.
+		 * Always OK. */
 		_grow_town_result = 0;
 		rcmd = (RoadBits)(1 << (block ^ 2));
 	} else {
 		int i;
 
-		// Reached a tunnel/bridge? Then continue at the other side of it.
+		/* Reached a tunnel/bridge? Then continue at the other side of it. */
 		if (IsTileType(tile, MP_TUNNELBRIDGE)) {
 			if (IsTunnel(tile) && GetTunnelTransportType(tile) == TRANSPORT_ROAD) {
 				*tile_ptr = GetOtherTunnelEnd(tile);
@@ -657,27 +657,27 @@
 			return;
 		}
 
-		// Possibly extend the road in a direction.
-		// Randomize a direction and if it has a road, bail out.
+		/* Possibly extend the road in a direction.
+		 * Randomize a direction and if it has a road, bail out. */
 		i = GB(Random(), 0, 2);
 		if (HASBIT(mask, i)) return;
 
-		// This is the tile we will reach if we extend to this direction.
+		/* This is the tile we will reach if we extend to this direction. */
 		tmptile = TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[i]));
 
-		// Don't do it if it reaches to water.
+		/* Don't do it if it reaches to water. */
 		if (IsClearWaterTile(tmptile)) return;
 
-		// Build a house at the edge. 60% chance or
-		//  always ok if no road allowed.
+		/* Build a house at the edge. 60% chance or
+		 *  always ok if no road allowed. */
 		if (!IsRoadAllowedHere(tmptile, i) || CHANCE16(6, 10)) {
-			// But not if there already is a house there.
+			/* But not if there already is a house there. */
 			if (!IsTileType(tmptile, MP_HOUSE)) {
-				// Level the land if possible
+				/* Level the land if possible */
 				LevelTownLand(tmptile);
 
-				// And build a house.
-				// Set result to -1 if we managed to build it.
+				/* And build a house.
+				 * Set result to -1 if we managed to build it. */
 				if (BuildTownHouse(t1, tmptile)) _grow_town_result = -1;
 			}
 			return;
@@ -687,11 +687,11 @@
 		rcmd = (RoadBits)(1 << i);
 	}
 
-	// Return if a water tile
+	/* Return if a water tile */
 	if (IsClearWaterTile(tile)) return;
 
-	// Determine direction of slope,
-	//  and build a road if not a special slope.
+	/* Determine direction of slope,
+	 *  and build a road if not a special slope. */
 	switch (GetTileSlope(tile, NULL)) {
 		case SLOPE_SW: i = DIAGDIR_NE; break;
 		case SLOPE_SE: i = DIAGDIR_NW; break;
@@ -708,7 +708,7 @@
 
 	tmptile = tile;
 
-	// Now it contains the direction of the slope
+	/* Now it contains the direction of the slope */
 	j = -11; // max 11 tile long bridges
 	do {
 		if (++j == 0)
@@ -716,11 +716,11 @@
 		tmptile = TILE_MASK(tmptile + TileOffsByDiagDir(i));
 	} while (IsClearWaterTile(tmptile));
 
-	// no water tiles in between?
+	/* no water tiles in between? */
 	if (j == -10)
 		goto build_road_and_exit;
 
-	// Quit if it selecting an appropiate bridge type fails a large number of times.
+	/* Quit if it selecting an appropiate bridge type fails a large number of times. */
 	j = 22;
 	{
 		int32 bridge_len = GetBridgeLength(tile, tmptile);
@@ -730,38 +730,42 @@
 				if (!CmdFailed(DoCommand(tile, tmptile, 0x8000 + bridge_type, DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE)))
 					_grow_town_result = -1;
 
-				// obviously, if building any bridge would fail, there is no need to try other bridge-types
+				/* obviously, if building any bridge would fail, there is no need to try other bridge-types */
 				return;
 			}
 		} while (--j != 0);
 	}
 }
 
-// Returns true if a house was built, or no if the build failed.
+/** Returns "growth" if a house was built, or no if the build failed.
+ * @param t town to inquiry
+ * @param tile to inquiry
+ * @return something other than zero(0)if town expansion was possible
+ */
 static int GrowTownAtRoad(Town *t, TileIndex tile)
 {
 	int block = 5; // special case
 
 	TILE_ASSERT(tile);
 
-	// Number of times to search.
+	/* Number of times to search. */
 	_grow_town_result = 10 + t->num_houses * 4 / 9;
 
 	do {
-		// Get a bitmask of the road blocks on a tile
+		/* Get a bitmask of the road blocks on a tile */
 		RoadBits mask = GetTownRoadMask(tile);
 
-		// Try to grow the town from this point
-		GrowTownInTile(&tile,mask,block,t);
+		/* Try to grow the town from this point */
+		GrowTownInTile(&tile, mask, block, t);
 
-		// Exclude the source position from the bitmask
-		// and return if no more road blocks available
+		/* Exclude the source position from the bitmask
+		 * and return if no more road blocks available */
 		ClrBitT(mask, (block ^ 2));
 		if (mask == 0)
 			return _grow_town_result;
 
-		// Select a random bit from the blockmask, walk a step
-		// and continue the search from there.
+		/* Select a random bit from the blockmask, walk a step
+		 * and continue the search from there. */
 		do block = Random() & 3; while (!HASBIT(mask,block));
 		tile += ToTileIndexDiff(_roadblock_tileadd[block]);
 
@@ -777,15 +781,15 @@
 			}
 		}
 
-		// Max number of times is checked.
+		/* Max number of times is checked. */
 	} while (--_grow_town_result >= 0);
 
 	return (_grow_town_result == -2);
 }
 
-// Generate a random road block
-// The probability of a straight road
-// is somewhat higher than a curved.
+/** Generate a random road block
+ * The probability of a straight road
+ * is somewhat higher than a curved. */
 static RoadBits GenRandomRoadBits()
 {
 	uint32 r = Random();
@@ -795,8 +799,8 @@
 	return (RoadBits)((1 << a) + (1 << b));
 }
 
-// Grow the town
-// Returns true if a house was built, or no if the build failed.
+/** Grow the town
+ * @Return true if a house was built, or no if the build failed. */
 static bool GrowTown(Town *t)
 {
 	TileIndex tile;
@@ -819,11 +823,11 @@
 		{ 0,  0}
 	};
 
-	// Current player is a town
+	/* Current player is a town */
 	old_player = _current_player;
 	_current_player = OWNER_TOWN;
 
-	// Find a road that we can base the construction on.
+	/* Find a road that we can base the construction on. */
 	tile = t->xy;
 	for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
 		if (GetAnyRoadTrackBits(tile) != 0) {
@@ -834,8 +838,8 @@
 		tile = TILE_ADD(tile, ToTileIndexDiff(*ptr));
 	}
 
-	// No road available, try to build a random road block by
-	// clearing some land and then building a road there.
+	/* No road available, try to build a random road block by
+	 * clearing some land and then building a road there. */
 	tile = t->xy;
 	for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
 		/* Only work with plain land that not already has a house */
@@ -885,11 +889,11 @@
 		memcpy(t->radius, _town_radius_data[t->num_houses / 4], sizeof(t->radius));
 	} else {
 		int mass = t->num_houses / 8;
-		// At least very roughly extrapolate. Empirical numbers dancing between
-		// overwhelming by cottages and skyscrapers outskirts.
+		/* At least very roughly extrapolate. Empirical numbers dancing between
+		 * overwhelming by cottages and skyscrapers outskirts. */
 		t->radius[0] = mass * mass;
-		// Actually we are proportional to sqrt() but that's right because
-		// we are covering an area.
+		/* Actually we are proportional to sqrt() but that's right because
+		 * we are covering an area. */
 		t->radius[1] = mass * 7;
 		t->radius[2] = 0;
 		t->radius[3] = mass * 4;
@@ -921,12 +925,12 @@
 		SetDParam(0, r);
 		GetString(buf1, townnametype, lastof(buf1));
 
-		// Check size and width
+		/* Check size and width */
 		if (strlen(buf1) >= 31 || GetStringBoundingBox(buf1).width > 130) continue;
 
 		FOR_ALL_TOWNS(t2) {
-			// We can't just compare the numbers since
-			// several numbers may map to a single name.
+			/* We can't just compare the numbers since
+			 * several numbers may map to a single name. */
 			SetDParam(0, t2->index);
 			GetString(buf2, STR_TOWN, lastof(buf2));
 			if (strcmp(buf1, buf2) == 0) {
@@ -949,7 +953,7 @@
 {
 	int x, i;
 
-	// clear the town struct
+	/* clear the town struct */
 	i = t->index;
 	memset(t, 0, sizeof(Town));
 	t->index = i;
@@ -1057,6 +1061,7 @@
  * This obviously only works in the scenario editor. Function not removed
  * 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
  */
@@ -1070,28 +1075,28 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
 
-	// Check if too close to the edge of map
+	/* Check if too close to the edge of map */
 	if (DistanceFromEdge(tile) < 12)
 		return_cmd_error(STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP);
 
-	// Can only build on clear flat areas, possibly with trees.
+	/* Can only build on clear flat areas, possibly with trees. */
 	if ((!IsTileType(tile, MP_CLEAR) && !IsTileType(tile, MP_TREES)) || GetTileSlope(tile, NULL) != SLOPE_FLAT) {
 		return_cmd_error(STR_0239_SITE_UNSUITABLE);
 	}
 
-	// Check distance to all other towns.
+	/* Check distance to all other towns. */
 	if (IsCloseToTown(tile, 20))
 		return_cmd_error(STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN);
 
-	// Get a unique name for the town.
+	/* Get a unique name for the town. */
 	if (!CreateTownName(&townnameparts))
 		return_cmd_error(STR_023A_TOO_MANY_TOWNS);
 
-	// Allocate town struct
+	/* Allocate town struct */
 	t = AllocateTown();
 	if (t == NULL) return_cmd_error(STR_023A_TOO_MANY_TOWNS);
 
-	// Create the town
+	/* Create the town */
 	if (flags & DC_EXEC) {
 		_generating_world = true;
 		DoCreateTown(t, tile, townnameparts, p1);
@@ -1107,20 +1112,20 @@
 	uint32 townnameparts;
 
 	do {
-		// Generate a tile index not too close from the edge
+		/* Generate a tile index not too close from the edge */
 		tile = RandomTile();
 		if (DistanceFromEdge(tile) < 20) continue;
 
-		// Make sure the tile is plain
+		/* Make sure the tile is plain */
 		if (!IsTileType(tile, MP_CLEAR) || GetTileSlope(tile, NULL) != SLOPE_FLAT) continue;
 
-		// Check not too close to a town
+		/* Check not too close to a town */
 		if (IsCloseToTown(tile, 20)) continue;
 
-		// Get a unique name for the town.
+		/* Get a unique name for the town. */
 		if (!CreateTownName(&townnameparts)) break;
 
-		// Allocate a town struct
+		/* Allocate a town struct */
 		t = AllocateTown();
 		if (t == NULL) break;
 
@@ -1141,11 +1146,11 @@
 
 	do {
 		IncreaseGeneratingWorldProgress(GWP_TOWN);
-		// try 20 times to create a random-sized town for the first loop.
+		/* try 20 times to create a random-sized town for the first loop. */
 		if (CreateRandomTown(20, 0) != NULL) num++;
 	} while (--n);
 
-	// give it a last try, but now more aggressive
+	/* give it a last try, but now more aggressive */
 	if (num == 0 && CreateRandomTown(10000, 0) == NULL) {
 		if (GetNumTowns() == 0) {
 			/* XXX - can we handle that more gracefully? */
@@ -1219,10 +1224,10 @@
 	uint oneof = 0;
 	HouseSpec *hs;
 
-	// Above snow?
+	/* Above snow? */
 	slope = GetTileSlope(tile, &z);
 
-	// Get the town zone type
+	/* Get the town zone type */
 	{
 		uint rad = t->GetRadiusGroup(tile);
 
@@ -1232,16 +1237,16 @@
 		bitmask = (1 << rad) + (1 << (land + 12));
 	}
 
-	// bits 0-4 are used
-	// bits 11-15 are used
-	// bits 5-10 are not used.
+	/* bits 0-4 are used
+	 * bits 11-15 are used
+	 * bits 5-10 are not used. */
 	{
 		HouseID houses[HOUSE_MAX];
 		int num = 0;
 		uint cumulative_probs[HOUSE_MAX];
 		uint probability_max = 0;
 
-		// Generate a list of all possible houses that can be built.
+		/* Generate a list of all possible houses that can be built. */
 		for (i = 0; i < HOUSE_MAX; i++) {
 			hs = GetHouseSpecs(i);
 			if ((~hs->building_availability & bitmask) == 0 && hs->enabled) {
@@ -1278,7 +1283,7 @@
 
 			if (_cur_year < hs->min_date || _cur_year > hs->max_date) continue;
 
-			// Special houses that there can be only one of.
+			/* Special houses that there can be only one of. */
 			if (hs->building_flags & BUILDING_IS_CHURCH) {
 				SETBIT(oneof, TOWN_HAS_CHURCH);
 			} else if (hs->building_flags & BUILDING_IS_STADIUM) {
@@ -1289,7 +1294,7 @@
 
 			if (HASBITS(t->flags12 , oneof)) continue;
 
-			// Make sure there is no slope?
+			/* Make sure there is no slope? */
 			if (hs->building_flags & TILE_NOT_SLOPED && slope != SLOPE_FLAT) continue;
 
 			if (hs->building_flags & TILE_SIZE_2x2) {
@@ -1323,7 +1328,7 @@
 	t->num_houses++;
 	IncreaseBuildingCount(t, house);
 
-	// Special houses that there can be only one of.
+	/* Special houses that there can be only one of. */
 	t->flags12 |= oneof;
 
 	{
@@ -1375,7 +1380,7 @@
 
 	assert(IsTileType(tile, MP_HOUSE));
 
-	// need to align the tile to point to the upper left corner of the house
+	/* need to align the tile to point to the upper left corner of the house */
 	if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
 		if (GetHouseSpecs(house-1)->building_flags & TILE_SIZE_2x1) {
 			house--;
@@ -1394,7 +1399,7 @@
 
 	hs = GetHouseSpecs(house);
 
-	// Remove population from the town if the house is finished.
+	/* Remove population from the town if the house is finished. */
 	if (IsHouseCompleted(tile)) {
 		ChangePopulation(t, -hs->population);
 	}
@@ -1402,14 +1407,14 @@
 	t->num_houses--;
 	DecreaseBuildingCount(t, house);
 
-	// Clear flags for houses that only may exist once/town.
+	/* Clear flags for houses that only may exist once/town. */
 	if (hs->building_flags & BUILDING_IS_CHURCH) {
 		CLRBIT(t->flags12, TOWN_HAS_CHURCH);
 	} else if (hs->building_flags & BUILDING_IS_STADIUM) {
 		CLRBIT(t->flags12, TOWN_HAS_STADIUM);
 	}
 
-	// Do the actual clearing of tiles
+	/* Do the actual clearing of tiles */
 	eflags = hs->building_flags;
 	DoClearTownHouseHelper(tile);
 	if (eflags & BUILDING_2_TILES_X)   DoClearTownHouseHelper(tile + TileDiffXY(1, 0));
@@ -1419,6 +1424,7 @@
 
 /** Rename a town (server-only).
  * @param tile unused
+ * @param flags type of operation
  * @param p1 town ID to rename
  * @param p2 unused
  */
@@ -1448,7 +1454,7 @@
 	return 0;
 }
 
-// Called from GUI
+/** Called from GUI */
 void ExpandTown(Town *t)
 {
 	int amount, n;
@@ -1551,16 +1557,16 @@
 	TileIndex tile = t->xy;
 
 	if (CircularTileSearch(tile, 9, SearchTileForStatue, t->index))
-		SETBIT(t->statues, _current_player); ///< Once found and built, "inform" the Town
+		SETBIT(t->statues, _current_player); // Once found and built, "inform" the Town
 }
 
 static void TownActionFundBuildings(Town* t)
 {
-	// Build next tick
+	/* Build next tick */
 	t->grow_counter = 1;
-	// If we were not already growing
+	/* If we were not already growing */
 	SETBIT(t->flags12, TOWN_IS_FUNDED);
-	// And grow for 3 months
+	/* And grow for 3 months */
 	t->fund_buildings_months = 3;
 }
 
@@ -1577,18 +1583,18 @@
 	if (!RandomRange(15)) {
 		Station *st;
 
-		// set as unwanted for 6 months
+		/* set as unwanted for 6 months */
 		t->unwanted[_current_player] = 6;
 
-		// set all close by station ratings to 0
+		/* set all close by station ratings to 0 */
 		FOR_ALL_STATIONS(st) {
 			if (st->town == t && st->owner == _current_player) {
 				for (CargoID i = 0; i < NUM_CARGO; i++) st->goods[i].rating = 0;
 			}
 		}
 
-		// only show errormessage to the executing player. All errors are handled command.c
-		// but this is special, because it can only 'fail' on a DC_EXEC
+		/* only show errormessage to the executing player. All errors are handled command.c
+		 * but this is special, because it can only 'fail' on a DC_EXEC */
 		if (IsLocalPlayer()) ShowErrorMessage(STR_BRIBE_FAILED_2, STR_BRIBE_FAILED, 0, 0);
 
 		/* decrease by a lot!
@@ -1621,6 +1627,7 @@
  * This performs an action such as advertising, building a statue, funding buildings,
  * but also bribing the town-council
  * @param tile unused
+ * @param flags type of operation
  * @param p1 town to do the action at
  * @param p2 action to perform, @see _town_action_proc for the list of available actions
  */
@@ -1651,10 +1658,10 @@
 {
 	int n;
 	Station *st;
-	byte m;
+	uint16 m;
 	Player *p;
 
-	// Reset player ratings if they're low
+	/* Reset player ratings if they're low */
 	FOR_ALL_PLAYERS(p) {
 		if (p->is_active && t->ratings[p->index] <= 200) {
 			t->ratings[p->index] += 5;
@@ -1676,22 +1683,21 @@
 	}
 
 	CLRBIT(t->flags12, TOWN_IS_FUNDED);
+	if (_patches.town_growth_rate == 0 && t->fund_buildings_months == 0) return;
+
+	/** Towns are processed every TOWN_GROWTH_FREQUENCY ticks, and this is the
+	 * number of times towns are processed before a new building is built. */
+	static const uint16 _grow_count_values[2][6] = {
+		{ 120, 120, 120, 100,  80,  60 }, ///< Fund new buildings has been activated
+		{ 320, 420, 300, 220, 160, 100 }  ///< Normal values
+	};
 
 	if (t->fund_buildings_months != 0) {
-		static const byte _grow_count_values[6] = {
-			60, 60, 60, 50, 40, 30
-		};
-		m = _grow_count_values[min(n, 5)];
+		m = _grow_count_values[0][min(n, 5)];
 		t->fund_buildings_months--;
-	} else if (n == 0) {
-		m = 160;
-		if (!CHANCE16(1, 12))
-			return;
 	} else {
-		static const byte _grow_count_values[5] = {
-			210, 150, 110, 80, 50
-		};
-		m = _grow_count_values[min(n, 5) - 1];
+		m = _grow_count_values[1][min(n, 5)];
+		if (n == 0 && !CHANCE16(1, 12)) return;
 	}
 
 	if (_opt.landscape == LT_ARCTIC) {
@@ -1702,6 +1708,13 @@
 			return;
 	}
 
+	/* Use the normal growth rate values if new buildings have been funded in
+	 * this town and the growth rate is set to none. */
+	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;
+
 	t->growth_rate = m / (t->num_houses / 50 + 1);
 	if (m <= t->grow_counter)
 		t->grow_counter = m;
@@ -1711,7 +1724,7 @@
 
 static void UpdateTownAmounts(Town *t)
 {
-	// Using +1 here to prevent overflow and division by zero
+	/* Using +1 here to prevent overflow and division by zero */
 	t->pct_pass_transported = t->new_act_pass * 256 / (t->new_max_pass + 1);
 
 	t->max_pass = t->new_max_pass; t->new_max_pass = 0;
@@ -1719,7 +1732,7 @@
 	t->act_food = t->new_act_food; t->new_act_food = 0;
 	t->act_water = t->new_act_water; t->new_act_water = 0;
 
-	// Using +1 here to prevent overflow and division by zero
+	/* Using +1 here to prevent overflow and division by zero */
 	t->pct_mail_transported = t->new_act_mail * 256 / (t->new_max_mail + 1);
 	t->max_mail = t->new_max_mail; t->new_max_mail = 0;
 	t->act_mail = t->new_act_mail; t->new_act_mail = 0;
@@ -1789,7 +1802,7 @@
 {
 	int rating;
 
-	// if magic_bulldozer cheat is active, town doesn't penaltize for removing stuff
+	/* if magic_bulldozer cheat is active, town doesn't penaltize for removing stuff */
 	if (t == NULL ||
 			!IsValidPlayer(_current_player) ||
 			(_cheats.magic_bulldozer.value && add < 0)) {
@@ -1816,17 +1829,17 @@
 
 /* penalty for removing town-owned stuff */
 static const int _default_rating_settings [3][3] = {
-	// ROAD_REMOVE, TUNNELBRIDGE_REMOVE, INDUSTRY_REMOVE
-	{  0, 128, 384}, // Permissive
-	{ 48, 192, 480}, // Neutral
-	{ 96, 384, 768}, // Hostile
+	/* ROAD_REMOVE, TUNNELBRIDGE_REMOVE, INDUSTRY_REMOVE */
+	{  0, 128, 384}, ///< Permissive
+	{ 48, 192, 480}, ///< Neutral
+	{ 96, 384, 768}, ///< Hostile
 };
 
 bool CheckforTownRating(uint32 flags, Town *t, byte type)
 {
 	int modemod;
 
-	// if magic_bulldozer cheat is active, town doesn't restrict your destructive actions
+	/* if magic_bulldozer cheat is active, town doesn't restrict your destructive actions */
 	if (t == NULL || !IsValidPlayer(_current_player) || _cheats.magic_bulldozer.value)
 		return true;
 
@@ -1912,12 +1925,12 @@
 	    SLE_VAR(Town, flags12,               SLE_UINT8),
 	    SLE_VAR(Town, statues,               SLE_UINT8),
 
-	// sort_index_obsolete was stored here in savegame format 0 - 1
+	/* sort_index_obsolete was stored here in savegame format 0 - 1 */
 	SLE_CONDNULL(1, 0, 1),
 
 	    SLE_VAR(Town, have_ratings,          SLE_UINT8),
 	    SLE_ARR(Town, ratings,               SLE_INT16, 8),
-	// failed bribe attempts are stored since savegame format 4
+	/* failed bribe attempts are stored since savegame format 4 */
 	SLE_CONDARR(Town, unwanted,              SLE_INT8, 8, 4,SL_MAX_VERSION),
 
 	SLE_CONDVAR(Town, max_pass,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
@@ -1947,15 +1960,20 @@
 	    SLE_VAR(Town, new_act_food,          SLE_UINT16),
 	    SLE_VAR(Town, new_act_water,         SLE_UINT16),
 
-	    SLE_VAR(Town, time_until_rebuild,    SLE_UINT8),
-	    SLE_VAR(Town, grow_counter,          SLE_UINT8),
-	    SLE_VAR(Town, growth_rate,           SLE_UINT8),
+	SLE_CONDVAR(Town, time_until_rebuild,    SLE_UINT8,                  0, 53),
+	SLE_CONDVAR(Town, grow_counter,          SLE_UINT8,                  0, 53),
+	SLE_CONDVAR(Town, growth_rate,           SLE_UINT8,                  0, 53),
+
+	SLE_CONDVAR(Town, time_until_rebuild,    SLE_UINT16,                 54, SL_MAX_VERSION),
+	SLE_CONDVAR(Town, grow_counter,          SLE_UINT16,                 54, SL_MAX_VERSION),
+	SLE_CONDVAR(Town, growth_rate,           SLE_INT16,                  54, SL_MAX_VERSION),
+
 	    SLE_VAR(Town, fund_buildings_months, SLE_UINT8),
 	    SLE_VAR(Town, road_build_months,     SLE_UINT8),
 
 	    SLE_VAR(Town, exclusivity,           SLE_UINT8),
 	    SLE_VAR(Town, exclusive_counter,     SLE_UINT8),
-	// reserve extra space in savegame here. (currently 30 bytes)
+	/* reserve extra space in savegame here. (currently 30 bytes) */
 	SLE_CONDNULL(30, 2, SL_MAX_VERSION),
 
 	SLE_END()
--- a/src/town_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/town_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file town_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -32,9 +34,9 @@
 extern const byte _town_action_costs[8];
 
 /** Get a list of available actions to do at a town.
- * @param *nump if not NULL add put the number of available actions in it
+ * @param nump if not NULL add put the number of available actions in it
  * @param pid the player that is querying the town
- * @param *t the town that is queried
+ * @param t the town that is queried
  * @return bitmasked value of enabled actions
  */
 uint GetMaskOfTownActions(int *nump, PlayerID pid, const Town *t)
@@ -47,9 +49,9 @@
 	if (pid != PLAYER_SPECTATOR) {
 		uint i;
 
-		// bribe option enabled?
+		/* bribe option enabled? */
 		if (_patches.bribe) {
-			// if unwanted, disable everything.
+			/* if unwanted, disable everything. */
 			if (t->unwanted[pid]) {
 				avail_buttons = 0;
 			} else if (t->ratings[pid] < RATING_BRIBE_MAXIMUM) {
@@ -57,7 +59,7 @@
 			}
 		}
 
-		// Things worth more than this are not shown
+		/* Things worth more than this are not shown */
 		avail = GetPlayer(pid)->player_money + _eco->GetPrice(CEconomy::STATION_VALUE) * 200;
 		ref = _eco->GetPrice(CEconomy::BUILD_INDUSTRY) >> 8;
 
@@ -119,7 +121,7 @@
 
 			DrawString(2, 15, STR_2023_TRANSPORT_COMPANY_RATINGS, 0);
 
-			// Draw list of players
+			/* Draw list of players */
 			y = 25;
 			FOR_ALL_PLAYERS(p) {
 				if (p->is_active && (HASBIT(t->have_ratings, p->index) || t->exclusivity == p->index)) {
@@ -150,7 +152,7 @@
 			}
 		}
 
-		// Draw actions list
+		/* Draw actions list */
 		{
 			int y = 107, i;
 			int pos = w->vscroll.pos;
@@ -234,7 +236,7 @@
 
 	switch (e->event) {
 	case WE_PAINT:
-		// disable renaming town in network games if you are not the server
+		/* disable renaming town in network games if you are not the server */
 		SetWindowWidgetDisabledState(w, 8, _networking && !_network_server);
 
 		SetDParam(0, t->index);
@@ -375,7 +377,7 @@
 };
 
 
-// used to get a sorted list of the towns
+/* used to get a sorted list of the towns */
 static uint _num_town_sort;
 
 static char _bufcache[64];
--- a/src/town_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/town_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -127,7 +127,7 @@
 /**
  * Set the position of the lift on this animated house
  * @param t the tile
- * @param pos, from 0 to 36
+ * @param pos position, from 0 to 36
  */
 static inline void SetLiftPosition(TileIndex t, byte pos)
 {
@@ -315,7 +315,8 @@
 /**
  * Set the activated triggers bits for this house.
  * This is required for newgrf house
- * @param t the tile of this house
+ * @param t        the tile of this house
+ * @param triggers the activated triggers
  * @pre IsTileType(t, MP_HOUSE)
  */
 static inline void SetHouseTriggers(TileIndex t, byte triggers)
--- a/src/train.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/train.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file train.h */
+
 #ifndef TRAIN_H
 #define TRAIN_H
 
@@ -14,12 +16,12 @@
  */
 
 enum TrainSubtype {
-	Train_Front             = 0, // Leading engine of a train
-	Train_Articulated_Part  = 1, // Articulated part of an engine
-	Train_Wagon             = 2, // Wagon
-	Train_Engine            = 3, // Engine, that can be front engines, but might be placed behind another engine
-	Train_Free_Wagon        = 4, // First in a wagon chain (in depot)
-	Train_Multiheaded       = 5, // Engine is a multiheaded
+	Train_Front             = 0, ///< Leading engine of a train
+	Train_Articulated_Part  = 1, ///< Articulated part of an engine
+	Train_Wagon             = 2, ///< Wagon
+	Train_Engine            = 3, ///< Engine, that can be front engines, but might be placed behind another engine
+	Train_Free_Wagon        = 4, ///< First in a wagon chain (in depot)
+	Train_Multiheaded       = 5, ///< Engine is a multiheaded
 };
 
 
--- a/src/train_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/train_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,10 +1,13 @@
 /* $Id$ */
 
+/** @file train_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
 #include "debug.h"
 #include "functions.h"
+#include "landscape.h"
 #include "gui.h"
 #include "station_map.h"
 #include "table/strings.h"
@@ -105,24 +108,24 @@
 	for (Vehicle *u = v; u != NULL; u = u->next) {
 		uint32 vweight = GetCargo(u->cargo_type)->weight * u->cargo_count * FreightWagonMult(u->cargo_type) / 16;
 
-		// Vehicle weight is not added for articulated parts.
+		/* Vehicle weight is not added for articulated parts. */
 		if (!IsArticulatedPart(u)) {
-			// vehicle weight is the sum of the weight of the vehicle and the weight of its cargo
+			/* vehicle weight is the sum of the weight of the vehicle and the weight of its cargo */
 			vweight += RailVehInfo(u->engine_type)->weight;
 
-			// powered wagons have extra weight added
+			/* powered wagons have extra weight added */
 			if (HASBIT(u->u.rail.flags, VRF_POWEREDWAGON))
 				vweight += RailVehInfo(u->u.rail.first_engine)->pow_wag_weight;
 		}
 
-		// consist weight is the sum of the weight of all vehicles in the consist
+		/* consist weight is the sum of the weight of all vehicles in the consist */
 		weight += vweight;
 
-		// store vehicle weight in cache
+		/* store vehicle weight in cache */
 		u->u.rail.cached_veh_weight = vweight;
 	}
 
-	// store consist weight in cache
+	/* store consist weight in cache */
 	v->u.rail.cached_weight = weight;
 
 	/* Now update train power (tractive effort is dependent on weight) */
@@ -151,10 +154,10 @@
 	for (Vehicle *u = v; u != NULL; u = u->next) {
 		const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type);
 
-		// Update the v->first cache. This is faster than having to brute force it later.
+		/* Update the v->first cache. This is faster than having to brute force it later. */
 		if (u->first == NULL) u->first = v;
 
-		// update the 'first engine'
+		/* update the 'first engine' */
 		u->u.rail.first_engine = v == u ? INVALID_ENGINE : first_engine;
 		u->u.rail.railtype = rvi_u->railtype;
 
@@ -164,13 +167,13 @@
 			u->u.rail.cached_vis_effect = rvi_u->visual_effect;
 		} else {
 			if (IsTrainWagon(u) || IsArticulatedPart(u)) {
-				// Wagons and articulated parts have no effect by default
+				/* Wagons and articulated parts have no effect by default */
 				u->u.rail.cached_vis_effect = 0x40;
 			} else if (rvi_u->engclass == 0) {
-				// Steam is offset by -4 units
+				/* Steam is offset by -4 units */
 				u->u.rail.cached_vis_effect = 4;
 			} else {
-				// Diesel fumes and sparks come from the centre
+				/* Diesel fumes and sparks come from the centre */
 				u->u.rail.cached_vis_effect = 8;
 			}
 		}
@@ -204,13 +207,13 @@
 				u->u.rail.compatible_railtypes |= (1 << RAILTYPE_RAIL);
 			}
 
-			// max speed is the minimum of the speed limits of all vehicles in the consist
+			/* 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);
 		}
 
-		// check the vehicle length (callback)
+		/* check the vehicle length (callback) */
 		uint16 veh_len = CALLBACK_FAILED;
 		if (HASBIT(EngInfo(u->engine_type)->callbackmask, CBM_VEHICLE_LENGTH)) {
 			veh_len = GetVehicleCallback(CBID_TRAIN_VEHICLE_LENGTH, 0, 0, u->engine_type, u);
@@ -221,10 +224,10 @@
 		v->u.rail.cached_total_length += u->u.rail.cached_veh_length;
 	}
 
-	// store consist weight/max speed in cache
+	/* store consist weight/max speed in cache */
 	v->u.rail.cached_max_speed = max_speed;
 
-	// recalculate cached weights and power too (we do this *after* the rest, so it is known which wagons are powered and need extra weight added)
+	/* recalculate cached weights and power too (we do this *after* the rest, so it is known which wagons are powered and need extra weight added) */
 	TrainCargoChanged(v);
 }
 
@@ -263,8 +266,8 @@
 	StationID sid = GetStationIndex(tile);
 
 	assert(v->type == VEH_TRAIN);
-	//When does a train drive through a station
-	//first we deal with the "new nonstop handling"
+	/* When does a train drive through a station
+	 * first we deal with the "new nonstop handling" */
 	if (_patches.new_nonstop && o->flags & OF_NON_STOP && sid == o->dest) {
 		return false;
 	}
@@ -278,14 +281,14 @@
 	return true;
 }
 
-//new acceleration
+/** new acceleration*/
 static int GetTrainAcceleration(Vehicle *v, bool mode)
 {
 	int max_speed = 2000;
 	int speed = v->cur_speed * 10 / 16; //[mph]
 	int curvecount[2] = {0, 0};
 
-	//first find the curve speed limit
+	/*first find the curve speed limit */
 	int numcurve = 0;
 	int sum = 0;
 	int pos = 0;
@@ -309,7 +312,7 @@
 			}
 		}
 
-		//if we have a 90 degree turn, fix the speed limit to 60
+		/*if we have a 90 degree turn, fix the speed limit to 60 */
 		if (_curve_neighbours90[dir][0] == ndir ||
 				_curve_neighbours90[dir][1] == ndir) {
 			max_speed = 61;
@@ -402,7 +405,7 @@
 				break;
 		}
 	} else {
-		//"kickoff" acceleration
+		/* "kickoff" acceleration */
 		force = (mode == AM_ACCEL && v->u.rail.railtype != RAILTYPE_MAGLEV) ? min(max_te, power) : power;
 		force = max(force, (mass * 8) + resistance);
 	}
@@ -521,7 +524,7 @@
 		bool flip_image = HASBIT(callback, 7);
 		const RailVehicleInfo *rvi_artic = RailVehInfo(engine_type);
 
-		// get common values from first engine
+		/* get common values from first engine */
 		u->direction = v->direction;
 		u->owner = v->owner;
 		u->tile = v->tile;
@@ -535,7 +538,7 @@
 		u->vehstatus = v->vehstatus & ~VS_STOPPED;
 		u->u.rail.first_engine = v->engine_type;
 
-		// get more settings from rail vehicle info
+		/* get more settings from rail vehicle info */
 		u->spritenum = rvi_artic->image_index;
 		if (flip_image) u->spritenum++;
 		u->cargo_type = rvi_artic->cargo_type;
@@ -645,7 +648,7 @@
 	return value;
 }
 
-// Move all free vehicles in the depot to the train
+/** Move all free vehicles in the depot to the train */
 static void NormalizeTrainVehInDepot(const Vehicle* u)
 {
 	const Vehicle* v;
@@ -697,6 +700,7 @@
 
 /** Build a railroad vehicle.
  * @param tile tile of the depot where rail-vehicle is built
+ * @param flags type of operation
  * @param p1 engine type id
  * @param p2 bit 0 when set, the train will get number 0, otherwise it will get a free number
  *           bit 1 prevents any free cars from being added to the train
@@ -704,7 +708,7 @@
 int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check if the engine-type is valid (for the player) */
-	if (!IsEngineBuildable(p1, VEH_TRAIN, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
+	if (!IsEngineBuildable(p1, VEH_TRAIN, _current_player)) return_cmd_error(STR_RAIL_VEHICLE_NOT_AVAILABLE);
 
 	/* Check if the train is actually being built in a depot belonging
 	 * to the player. Doesn't matter if only the cost is queried */
@@ -874,7 +878,7 @@
  */
 static Vehicle *UnlinkWagon(Vehicle *v, Vehicle *first)
 {
-	// unlinking the first vehicle of the chain?
+	/* unlinking the first vehicle of the chain? */
 	if (v == first) {
 		v = GetNextVehicle(v);
 		if (v == NULL) return NULL;
@@ -898,7 +902,7 @@
 
 	FOR_ALL_VEHICLES(dst) {
 		if (dst->type == VEH_TRAIN && IsFreeWagon(dst) && dst->tile == tile) {
-			// check so all vehicles in the line have the same engine.
+			/* check so all vehicles in the line have the same engine. */
 			Vehicle *v = dst;
 
 			while (v->engine_type == eng) {
@@ -950,6 +954,7 @@
 
 /** Move a rail vehicle around inside the depot.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 various bitstuffed elements
  * - p1 (bit  0 - 15) source vehicle index
  * - p1 (bit 16 - 31) what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line
@@ -966,7 +971,7 @@
 
 	if (src->type != VEH_TRAIN || !CheckOwnership(src->owner)) return CMD_ERROR;
 
-	// if nothing is selected as destination, try and find a matching vehicle to drag to.
+	/* if nothing is selected as destination, try and find a matching vehicle to drag to. */
 	Vehicle *dst;
 	if (d == INVALID_VEHICLE) {
 		dst = IsTrainEngine(src) ? NULL : FindGoodVehiclePos(src);
@@ -976,13 +981,13 @@
 		if (dst->type != VEH_TRAIN || !CheckOwnership(dst->owner)) return CMD_ERROR;
 	}
 
-	// if an articulated part is being handled, deal with its parent vehicle
+	/* if an articulated part is being handled, deal with its parent vehicle */
 	while (IsArticulatedPart(src)) src = GetPrevVehicleInChain(src);
 	if (dst != NULL) {
 		while (IsArticulatedPart(dst)) dst = GetPrevVehicleInChain(dst);
 	}
 
-	// don't move the same vehicle..
+	/* don't move the same vehicle.. */
 	if (src == dst) return 0;
 
 	/* locate the head of the two chains */
@@ -991,7 +996,7 @@
 	if (dst != NULL) {
 		dst_head = GetFirstVehicleInChain(dst);
 		if (dst_head->tile != src_head->tile) return CMD_ERROR;
-		// Now deal with articulated part of destination wagon
+		/* Now deal with articulated part of destination wagon */
 		dst = GetLastEnginePart(dst);
 	} else {
 		dst_head = NULL;
@@ -1004,7 +1009,7 @@
 			dst = GetPrevVehicleInChain(dst);
 			/* Now if the vehicle we want to link to is the vehicle itself, drop out */
 			if (dst == src) return CMD_ERROR;
-			// if dst is NULL, it means that dst got a rear multiheaded engine as first engine. We can't use that
+			/* if dst is NULL, it means that dst got a rear multiheaded engine as first engine. We can't use that */
 			if (dst == NULL) return CMD_ERROR;
 		} else {
 			/* there are more units on this train, so we will add the wagon after the next one*/
@@ -1032,51 +1037,51 @@
 
 	if (IsMultiheaded(src) && !IsTrainEngine(src)) return_cmd_error(STR_REAR_ENGINE_FOLLOW_FRONT_ERROR);
 
-	// when moving all wagons, we can't have the same src_head and dst_head
+	/* when moving all wagons, we can't have the same src_head and dst_head */
 	if (HASBIT(p2, 0) && src_head == dst_head) return 0;
 
 	{
 		int max_len = _patches.mammoth_trains ? 100 : 9;
 
-		// check if all vehicles in the source train are stopped inside a depot.
+		/* check if all vehicles in the source train are stopped inside a depot. */
 		int src_len = CheckTrainStoppedInDepot(src_head);
 		if (src_len < 0) return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
 
-		// check the destination row if the source and destination aren't the same.
+		/* check the destination row if the source and destination aren't the same. */
 		if (src_head != dst_head) {
 			int dst_len = 0;
 
 			if (dst_head != NULL) {
-				// check if all vehicles in the dest train are stopped.
+				/* check if all vehicles in the dest train are stopped. */
 				dst_len = CheckTrainStoppedInDepot(dst_head);
 				if (dst_len < 0) return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
 			}
 
-			// We are moving between rows, so only count the wagons from the source
-			// row that are being moved.
+			/* We are moving between rows, so only count the wagons from the source
+			 * row that are being moved. */
 			if (HASBIT(p2, 0)) {
 				const Vehicle *u;
 				for (u = src_head; u != src && u != NULL; u = GetNextVehicle(u))
 					src_len--;
 			} else {
-				// If moving only one vehicle, just count that.
+				/* If moving only one vehicle, just count that. */
 				src_len = 1;
 			}
 
 			if (src_len + dst_len > max_len) {
-				// Abort if we're adding too many wagons to a train.
+				/* Abort if we're adding too many wagons to a train. */
 				if (dst_head != NULL && IsFrontEngine(dst_head)) return_cmd_error(STR_8819_TRAIN_TOO_LONG);
-				// Abort if we're making a train on a new row.
+				/* Abort if we're making a train on a new row. */
 				if (dst_head == NULL && IsTrainEngine(src)) return_cmd_error(STR_8819_TRAIN_TOO_LONG);
 			}
 		} else {
-			// Abort if we're creating a new train on an existing row.
+			/* Abort if we're creating a new train on an existing row. */
 			if (src_len > max_len && src == src_head && IsTrainEngine(GetNextVehicle(src_head)))
 				return_cmd_error(STR_8819_TRAIN_TOO_LONG);
 		}
 	}
 
-	// moving a loco to a new line?, then we need to assign a unitnumber.
+	/* moving a loco to a new line?, then we need to assign a unitnumber. */
 	if (dst == NULL && !IsFrontEngine(src) && IsTrainEngine(src)) {
 		UnitID unit_num = GetFreeUnitNumber(VEH_TRAIN);
 		if (unit_num > _patches.max_trains)
@@ -1104,7 +1109,7 @@
 		for (Vehicle *u = dst_head; u != NULL; u = u->next) u->first = NULL;
 
 		if (HASBIT(p2, 0)) {
-			// unlink ALL wagons
+			/* unlink ALL wagons */
 			if (src != src_head) {
 				Vehicle *v = src_head;
 				while (GetNextVehicle(v) != src) v = GetNextVehicle(v);
@@ -1114,9 +1119,9 @@
 				src_head = NULL;
 			}
 		} else {
-			// if moving within the same chain, dont use dst_head as it may get invalidated
+			/* if moving within the same chain, dont use dst_head as it may get invalidated */
 			if (src_head == dst_head) dst_head = NULL;
-			// unlink single wagon from linked list
+			/* unlink single wagon from linked list */
 			src_head = UnlinkWagon(src, src_head);
 			GetLastEnginePart(src)->next = NULL;
 		}
@@ -1125,10 +1130,10 @@
 			/* We make a new line in the depot, so we know already that we invalidate the window data */
 			InvalidateWindowData(WC_VEHICLE_DEPOT, src->tile);
 
-			// move the train to an empty line. for locomotives, we set the type to TS_Front. for wagons, 4.
+			/* move the train to an empty line. for locomotives, we set the type to TS_Front. for wagons, 4. */
 			if (IsTrainEngine(src)) {
 				if (!IsFrontEngine(src)) {
-					// setting the type to 0 also involves setting up the orders field.
+					/* setting the type to 0 also involves setting up the orders field. */
 					SetFrontEngine(src);
 					assert(src->orders == NULL);
 					src->num_orders = 0;
@@ -1139,7 +1144,7 @@
 			dst_head = src;
 		} else {
 			if (IsFrontEngine(src)) {
-				// the vehicle was previously a loco. need to free the order list and delete vehicle windows etc.
+				/* the vehicle was previously a loco. need to free the order list and delete vehicle windows etc. */
 				DeleteWindowById(WC_VEHICLE_VIEW, src->index);
 				DeleteVehicleOrders(src);
 			}
@@ -1151,7 +1156,7 @@
 				src->unitnumber = 0; // doesn't occupy a unitnumber anymore.
 			}
 
-			// link in the wagon(s) in the chain.
+			/* link in the wagon(s) in the chain. */
 			{
 				Vehicle *v;
 
@@ -1165,7 +1170,7 @@
 				src_head = src_head->next;
 			}
 			AddWagonToConsist(src->u.rail.other_multiheaded_part, src);
-			// previous line set the front engine to the old front. We need to clear that
+			/* previous line set the front engine to the old front. We need to clear that */
 			src->u.rail.other_multiheaded_part->first = NULL;
 		}
 
@@ -1184,7 +1189,7 @@
 			}
 			if (engine != NULL && engine->u.rail.other_multiheaded_part != NULL) {
 				AddWagonToConsist(engine->u.rail.other_multiheaded_part, engine);
-				// previous line set the front engine to the old front. We need to clear that
+				/* previous line set the front engine to the old front. We need to clear that */
 				engine->u.rail.other_multiheaded_part->first = NULL;
 			}
 		}
@@ -1233,6 +1238,7 @@
 
 /** Start/Stop a train.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 train to start/stop
  * @param p2 unused
  */
@@ -1269,6 +1275,7 @@
 
 /** Sell a (single) train wagon/engine.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 the wagon/engine index
  * @param p2 the selling mode
  * - p2 = 0: only sell the single dragged wagon/engine (and any belonging rear-engines)
@@ -1290,7 +1297,7 @@
 	while (IsArticulatedPart(v)) v = GetPrevVehicleInChain(v);
 	Vehicle *first = GetFirstVehicleInChain(v);
 
-	// make sure the vehicle is stopped in the depot
+	/* make sure the vehicle is stopped in the depot */
 	if (CheckTrainStoppedInDepot(first) < 0) {
 		return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
 	}
@@ -1596,8 +1603,8 @@
 	uint length = CountVehiclesInChain(v);
 
 	while (length > 2) {
-		// find pairwise matching wagon
-		// start<>end, start+1<>end-1, ...
+		/* find pairwise matching wagon
+		 * start<>end, start+1<>end-1, ... */
 		Vehicle *last = first;
 		for (uint i = length - 3; i > 0; i--) last = last->next;
 
@@ -1605,7 +1612,7 @@
 		if (before) differential *= -1;
 
 		if (differential > 0) {
-			// disconnect last car to make sure only this subset moves
+			/* disconnect last car to make sure only this subset moves */
 			Vehicle *tempnext = last->next;
 			last->next = NULL;
 
@@ -1643,7 +1650,7 @@
 		DisableTrainCrossing(tile);
 	}
 
-	// count number of vehicles
+	/* count number of vehicles */
 	int r = -1;
 	const Vehicle *u = v;
 	do r++; while ( (u = u->next) != NULL );
@@ -1667,6 +1674,7 @@
 
 /** Reverse train.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 train to reverse
  * @param p2 if true, reverse a unit in a train (needs to be in a depot)
  */
@@ -1679,14 +1687,14 @@
 	if (v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
 
 	if (p2) {
-		// turn a single unit around
+		/* turn a single unit around */
 
 		if (IsMultiheaded(v) || HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) {
 			return_cmd_error(STR_ONLY_TURN_SINGLE_UNIT);
 		}
 
 		Vehicle *front = GetFirstVehicleInChain(v);
-		// make sure the vehicle is stopped in the depot
+		/* make sure the vehicle is stopped in the depot */
 		if (CheckTrainStoppedInDepot(front) < 0) {
 			return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
 		}
@@ -1697,7 +1705,7 @@
 			InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 		}
 	} else {
-		//turn the whole train around
+		/*turn the whole train around */
 		if (v->u.rail.crash_anim_pos != 0 || v->breakdown_ctr != 0) return CMD_ERROR;
 
 		if (flags & DC_EXEC) {
@@ -1715,6 +1723,7 @@
 
 /** Force a train through a red signal
  * @param tile unused
+ * @param flags type of operation
  * @param p1 train to ignore the red signal
  * @param p2 unused
  */
@@ -1733,6 +1742,7 @@
 
 /** Refits a train to the specified cargo type.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 vehicle ID of the train to refit
  * param p2 various bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to
@@ -1854,8 +1864,8 @@
 	return false;
 }
 
-// returns the tile of a depot to goto to. The given vehicle must not be
-// crashed!
+/** returns the tile of a depot to goto to. The given vehicle must not be
+ * crashed! */
 static TrainFindDepotData FindClosestTrainDepot(Vehicle *v, int max_distance)
 {
 	assert(!(v->vehstatus & VS_CRASHED));
@@ -1893,7 +1903,7 @@
 			if (NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE)) tfdd.reverse = true;
 		}
 	} else {
-		// search in the forward direction first.
+		/* search in the forward direction first. */
 		DiagDirection i = DirToDiagDir(v->direction);
 		if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[i]) {
 			i = ChangeDiagDir(i, DIAGDIRDIFF_90LEFT);
@@ -1901,7 +1911,7 @@
 		NewTrainPathfind(tile, 0, v->u.rail.compatible_railtypes, i, (NTPEnumProc*)NtpCallbFindDepot, &tfdd);
 		if (tfdd.best_length == (uint)-1){
 			tfdd.reverse = true;
-			// search in backwards direction
+			/* search in backwards direction */
 			i = ReverseDiagDir(DirToDiagDir(v->direction));
 			if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[i]) {
 				i = ChangeDiagDir(i, DIAGDIRDIFF_90LEFT);
@@ -1915,6 +1925,7 @@
 
 /** Send a train to a depot
  * @param tile unused
+ * @param flags type of operation
  * @param p1 train to send to the depot
  * @param p2 various bitmasked elements
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
@@ -2010,7 +2021,7 @@
 		byte effect_type = GB(v->u.rail.cached_vis_effect, 4, 2);
 		bool disable_effect = HASBIT(v->u.rail.cached_vis_effect, 6);
 
-		// no smoke?
+		/* no smoke? */
 		if ((rvi->railveh_type == RAILVEH_WAGON && effect_type == 0) ||
 				disable_effect ||
 				rvi->railtype > RAILTYPE_ELECTRIC ||
@@ -2018,14 +2029,14 @@
 			continue;
 		}
 
-		// No smoke in depots or tunnels
+		/* No smoke in depots or tunnels */
 		if (IsTileDepotType(v->tile, TRANSPORT_RAIL) || IsTunnelTile(v->tile)) continue;
 
-		// No sparks for electric vehicles on nonelectrified tracks
+		/* No sparks for electric vehicles on nonelectrified tracks */
 		if (!HasPowerOnRail(v->u.rail.railtype, GetTileRailType(v->tile))) continue;
 
 		if (effect_type == 0) {
-			// Use default effect type for engine class.
+			/* Use default effect type for engine class. */
 			effect_type = rvi->engclass;
 		} else {
 			effect_type--;
@@ -2041,7 +2052,7 @@
 
 		switch (effect_type) {
 		case 0:
-			// steam smoke.
+			/* steam smoke. */
 			if (GB(v->tick_counter, 0, 4) == 0) {
 				CreateEffectVehicleRel(v, x, y, 10, EV_STEAM_SMOKE);
 				sound = true;
@@ -2049,7 +2060,7 @@
 			break;
 
 		case 1:
-			// diesel smoke
+			/* diesel smoke */
 			if (u->cur_speed <= 40 && CHANCE16(15, 128)) {
 				CreateEffectVehicleRel(v, 0, 0, 10, EV_DIESEL_SMOKE);
 				sound = true;
@@ -2057,7 +2068,7 @@
 			break;
 
 		case 2:
-			// blue spark
+			/* blue spark */
 			if (GB(v->tick_counter, 0, 2) == 0 && CHANCE16(1, 45)) {
 				CreateEffectVehicleRel(v, 0, 0, 10, EV_ELECTRIC_SPARK);
 				sound = true;
@@ -2094,12 +2105,12 @@
 
 static bool CheckTrainStayInDepot(Vehicle *v)
 {
-	// bail out if not all wagons are in the same depot or not in a depot at all
+	/* bail out if not all wagons are in the same depot or not in a depot at all */
 	for (const Vehicle *u = v; u != NULL; u = u->next) {
 		if (u->u.rail.track != TRACK_BIT_DEPOT || u->tile != v->tile) return false;
 	}
 
-	// if the train got no power, then keep it in the depot
+	/* if the train got no power, then keep it in the depot */
 	if (v->u.rail.cached_power == 0) {
 		v->vehstatus |= VS_STOPPED;
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
@@ -2151,10 +2162,10 @@
 
 static bool NtpCallbFindStation(TileIndex tile, TrainTrackFollowerData *ttfd, Trackdir track, uint length)
 {
-	// heading for nowhere?
+	/* heading for nowhere? */
 	if (ttfd->dest_coords == 0) return false;
 
-	// did we reach the final station?
+	/* did we reach the final station? */
 	if ((ttfd->station_index == INVALID_STATION && tile == ttfd->dest_coords) || (
 				IsTileType(tile, MP_STATION) &&
 				IsRailwayStation(tile) &&
@@ -2163,12 +2174,13 @@
 		/* We do not check for dest_coords if we have a station_index,
 		 * because in that case the dest_coords are just an
 		 * approximation of where the station is */
-		// found station
+
+		/* found station */
 		ttfd->best_track = track;
 		ttfd->best_bird_dist = 0;
 		return true;
 	} else {
-		// didn't find station, keep track of the best path so far.
+		/* didn't find station, keep track of the best path so far. */
 		uint dist = DistanceManhattan(tile, ttfd->dest_coords);
 		if (dist < ttfd->best_bird_dist) {
 			ttfd->best_bird_dist = dist;
@@ -2205,12 +2217,12 @@
 };
 
 static const byte _search_directions[6][4] = {
-	{ 0, 9, 2, 9 }, // track 1
-	{ 9, 1, 9, 3 }, // track 2
-	{ 9, 0, 3, 9 }, // track upper
-	{ 1, 9, 9, 2 }, // track lower
-	{ 3, 2, 9, 9 }, // track left
-	{ 9, 9, 1, 0 }, // track right
+	{ 0, 9, 2, 9 }, ///< track 1
+	{ 9, 1, 9, 3 }, ///< track 2
+	{ 9, 0, 3, 9 }, ///< track upper
+	{ 1, 9, 9, 2 }, ///< track lower
+	{ 3, 2, 9, 9 }, ///< track left
+	{ 9, 9, 1, 0 }, ///< track right
 };
 
 static const byte _pick_track_table[6] = {1, 3, 2, 2, 0, 0};
@@ -2219,7 +2231,7 @@
 static Track ChooseTrainTrack(Vehicle* v, TileIndex tile, DiagDirection enterdir, TrackBits tracks)
 {
 	Track best_track;
-	// pathfinders are able to tell that route was only 'guessed'
+	/* pathfinders are able to tell that route was only 'guessed' */
 	bool path_not_found = false;
 
 #ifdef PF_BENCHMARK
@@ -2250,9 +2262,9 @@
 		NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.compatible_railtypes);
 
 		if (ftd.best_trackdir == 0xff) {
-			/* We are already at our target. Just do something */
-			//TODO: maybe display error?
-			//TODO: go straight ahead if possible?
+			/* We are already at our target. Just do something
+			 * @todo maybe display error?
+			 * @todo: go straight ahead if possible? */
 			best_track = FindFirstTrack(tracks);
 		} else {
 			/* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains
@@ -2280,11 +2292,11 @@
 		NewTrainPathfind(tile - TileOffsByDiagDir(enterdir), v->dest_tile,
 			v->u.rail.compatible_railtypes, enterdir, (NTPEnumProc*)NtpCallbFindStation, &fd);
 
-		// check whether the path was found or only 'guessed'
+		/* check whether the path was found or only 'guessed' */
 		if (fd.best_bird_dist != 0) path_not_found = true;
 
 		if (fd.best_track == 0xff) {
-			// blaha
+			/* blaha */
 			best_track = FindFirstTrack(tracks);
 		} else {
 			best_track = TrackdirToTrack(fd.best_track);
@@ -2293,13 +2305,13 @@
 		int time = NpfEndInterval(perf);
 		DEBUG(yapf, 4, "[NTPT] %d us - %d rounds - %d open - %d closed -- ", time, 0, 0, 0);
 	}
-	// handle "path not found" state
+	/* handle "path not found" state */
 	if (path_not_found) {
-		// PF didn't find the route
+		/* PF didn't find the route */
 		if (!HASBIT(v->u.rail.flags, VRF_NO_PATH_TO_DESTINATION)) {
-			// it is first time the problem occurred, set the "path not found" flag
+			/* it is first time the problem occurred, set the "path not found" flag */
 			SETBIT(v->u.rail.flags, VRF_NO_PATH_TO_DESTINATION);
-			// and notify user about the event
+			/* and notify user about the event */
 			if (_patches.lost_train_warn && v->owner == _local_player) {
 				SetDParam(0, v->unitnumber);
 				AddNewsItem(
@@ -2310,11 +2322,11 @@
 			}
 		}
 	} else {
-		// route found, is the train marked with "path not found" flag?
+		/* route found, is the train marked with "path not found" flag? */
 		if (HASBIT(v->u.rail.flags, VRF_NO_PATH_TO_DESTINATION)) {
-			// clear the flag as the PF's problem was solved
+			/* clear the flag as the PF's problem was solved */
 			CLRBIT(v->u.rail.flags, VRF_NO_PATH_TO_DESTINATION);
-			// can we also delete the "News" item somehow?
+			/* can we also delete the "News" item somehow? */
 		}
 	}
 
@@ -2440,14 +2452,14 @@
 		default: break;
 	}
 
-	// check if we've reached the waypoint?
+	/* check if we've reached the waypoint? */
 	bool at_waypoint = false;
 	if (v->current_order.type == OT_GOTO_WAYPOINT && v->tile == v->dest_tile) {
 		v->cur_order_index++;
 		at_waypoint = true;
 	}
 
-	// check if we've reached a non-stop station while TTDPatch nonstop is enabled..
+	/* check if we've reached a non-stop station while TTDPatch nonstop is enabled.. */
 	if (_patches.new_nonstop &&
 			v->current_order.flags & OF_NON_STOP &&
 			IsTileType(v->tile, MP_STATION) &&
@@ -2455,25 +2467,25 @@
 		v->cur_order_index++;
 	}
 
-	// Get the current order
+	/* Get the current order */
 	if (v->cur_order_index >= v->num_orders) v->cur_order_index = 0;
 
 	const Order *order = GetVehicleOrder(v, v->cur_order_index);
 
-	// If no order, do nothing.
+	/* If no order, do nothing. */
 	if (order == NULL) {
 		v->current_order.Free();
 		v->dest_tile = 0;
 		return false;
 	}
 
-	// If it is unchanged, keep it.
+	/* If it is unchanged, keep it. */
 	if (order->type  == v->current_order.type &&
 			order->flags == v->current_order.flags &&
 			order->dest  == v->current_order.dest)
 		return false;
 
-	// Otherwise set it, and determine the destination tile.
+	/* Otherwise set it, and determine the destination tile. */
 	v->current_order = *order;
 
 	v->dest_tile = 0;
@@ -2516,7 +2528,7 @@
 		case OT_LOADING: {
 			if (mode) return;
 
-			// don't mark the train as lost if we're loading on the final station.
+			/* don't mark the train as lost if we're loading on the final station. */
 			if (v->current_order.flags & OF_NON_STOP) {
 				v->u.rail.days_since_order_progr = 0;
 			}
@@ -2527,13 +2539,13 @@
 						v->current_order.flags & OF_FULL_LOAD ||
 						(_patches.gradual_loading && !HASBIT(v->vehicle_flags, VF_LOADING_FINISHED))
 					)) {
-				v->u.rail.days_since_order_progr = 0; /* Prevent a train lost message for full loading trains */
+				v->u.rail.days_since_order_progr = 0; // Prevent a train lost message for full loading trains
 				SET_EXPENSES_TYPE(EXPENSES_TRAIN_INC);
 				if (LoadUnloadVehicle(v, false)) {
 					InvalidateWindow(WC_TRAINS_LIST, v->owner);
 					MarkTrainDirty(v);
 
-					// need to update acceleration and cached values since the goods on the train changed.
+					/* need to update acceleration and cached values since the goods on the train changed. */
 					TrainCargoChanged(v);
 					UpdateTrainAcceleration(v);
 				}
@@ -2545,7 +2557,7 @@
 			Order b = v->current_order;
 			v->LeaveStation();
 
-			// If this was not the final order, don't remove it from the list.
+			/* If this was not the final order, don't remove it from the list. */
 			if (!(b.flags & OF_NON_STOP)) return;
 			break;
 		}
@@ -2614,16 +2626,16 @@
 		);
 	}
 
-	// Did we reach the final destination?
+	/* Did we reach the final destination? */
 	if (v->current_order.type == OT_GOTO_STATION &&
 			v->current_order.dest == station) {
-		// Yeah, keep the load/unload flags
-		// Non Stop now means if the order should be increased.
+		/* Yeah, keep the load/unload flags
+		 * Non Stop now means if the order should be increased. */
 		v->BeginLoading();
 		v->current_order.flags &= OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER;
 		v->current_order.flags |= OF_NON_STOP;
 	} else {
-		// No, just do a simple load
+		/* No, just do a simple load */
 		v->BeginLoading();
 		v->current_order.flags = 0;
 	}
@@ -2641,7 +2653,7 @@
 
 static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
 {
-	// need this hint so it returns the right z coordinate on bridges.
+	/* need this hint so it returns the right z coordinate on bridges. */
 	byte new_z = GetSlopeZ(v->x_pos, v->y_pos);
 
 	byte old_z = v->z_pos;
@@ -2654,7 +2666,7 @@
 		if (new_z != old_z) {
 			TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
 
-			// XXX workaround, whole UP/DOWN detection needs overhaul
+			/* XXX workaround, whole UP/DOWN detection needs overhaul */
 			if (!IsTunnelTile(tile)) {
 				SETBIT(v->u.rail.flags, (new_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
 			}
@@ -2727,13 +2739,13 @@
 
 static const RailtypeSlowdownParams _railtype_slowdown[] = {
 	// normal accel
-	{256 / 4, 256 / 2, 256 / 4, 2}, // normal
-	{256 / 4, 256 / 2, 256 / 4, 2}, // electrified
-	{256 / 4, 256 / 2, 256 / 4, 2}, // monorail
-	{0,       256 / 2, 256 / 4, 2}, // maglev
+	{256 / 4, 256 / 2, 256 / 4, 2}, ///< normal
+	{256 / 4, 256 / 2, 256 / 4, 2}, ///< electrified
+	{256 / 4, 256 / 2, 256 / 4, 2}, ///< monorail
+	{0,       256 / 2, 256 / 4, 2}, ///< maglev
 };
 
-/* Modify the speed of the vehicle due to a turn */
+/** Modify the speed of the vehicle due to a turn */
 static void AffectSpeedByDirChange(Vehicle* v, Direction new_dir)
 {
 	if (_patches.realistic_acceleration) return;
@@ -2745,7 +2757,7 @@
 	v->cur_speed -= (diff == DIRDIFF_45RIGHT || diff == DIRDIFF_45LEFT ? rsp->small_turn : rsp->large_turn) * v->cur_speed >> 8;
 }
 
-/* Modify the speed of the vehicle due to a change in altitude */
+/** Modify the speed of the vehicle due to a change in altitude */
 static void AffectSpeedByZChange(Vehicle *v, byte old_z)
 {
 	if (old_z == v->z_pos || _patches.realistic_acceleration) return;
@@ -2820,7 +2832,7 @@
 	return num;
 }
 
-/*
+/**
  * Checks whether the specified train has a collision with another vehicle. If
  * so, destroys this vehicle, and the other vehicle if its subtype has TS_Front.
  * Reports the incident in a flashy news item, modifies station ratings and
@@ -2848,10 +2860,10 @@
 			(v->u.rail.track == TRACK_BIT_WORMHOLE && (v->direction & 2) != (realcoll->direction & 2)))
 		return;
 
-	//two drivers + passangers killed in train v
+	/* two drivers + passangers killed in train v */
 	uint num = 2 + CountPassengersInTrain(v);
 	if (!(coll->vehstatus & VS_CRASHED))
-		//two drivers + passangers killed in train coll (if it was not crashed already)
+		/* two drivers + passangers killed in train coll (if it was not crashed already) */
 		num += 2 + CountPassengersInTrain(coll);
 
 	SetVehicleCrashed(v);
@@ -2959,8 +2971,8 @@
 
 					/* Check if it's a red signal and that force proceed is not clicked. */
 					if ((tracks >> 16) & chosen_track && v->u.rail.force_proceed == 0) {
-						// In front of a red signal
-						/* find the first set bit in ts. need to do it in 2 steps, since
+						/* In front of a red signal
+						 * find the first set bit in ts. need to do it in 2 steps, since
 						 * FIND_FIRST_BIT only handles 6 bits at a time. */
 						Trackdir i = FindFirstTrackdir((TrackdirBits)(uint16)ts);
 
@@ -3300,7 +3312,7 @@
 			return false;
 		}
 		if ((ts &= (ts >> 16)) == 0) {
-			// make a rail/road crossing red
+			/* make a rail/road crossing red */
 			if (IsLevelCrossingTile(tile)) {
 				if (!IsCrossingBarred(tile)) {
 					BarCrossing(tile);
@@ -3316,7 +3328,7 @@
 		return false;
 	}
 
-	// slow down
+	/* slow down */
 	v->vehstatus |= VS_TRAIN_SLOWING;
 	uint16 break_speed = _breakdown_speeds[x & 0xF];
 	if (!(v->direction & 1)) break_speed >>= 1;
@@ -3369,7 +3381,7 @@
 
 	int j = UpdateTrainSpeed(v);
 	if (j == 0) {
-		// if the vehicle has speed 0, update the last_speed field.
+		/* if the vehicle has speed 0, update the last_speed field. */
 		if (v->cur_speed != 0) return;
 	} else {
 		TrainCheckIfLineEnds(v);
@@ -3396,11 +3408,11 @@
 	if (IsFrontEngine(v)) {
 		TrainLocoHandler(v, false);
 
-		// make sure vehicle wasn't deleted.
+		/* make sure vehicle wasn't deleted. */
 		if (v->type == VEH_TRAIN && IsFrontEngine(v))
 			TrainLocoHandler(v, true);
 	} else if (IsFreeWagon(v) && HASBITS(v->vehstatus, VS_CRASHED)) {
-		// Delete flooded standalone wagon
+		/* Delete flooded standalone wagon */
 		if (++v->u.rail.crash_anim_pos >= 4400)
 			DeleteVehicle(v);
 	}
@@ -3415,8 +3427,8 @@
 	if (v->vehstatus & VS_STOPPED)                      return;
 	if (_patches.gotodepot && VehicleHasDepotOrders(v)) return;
 
-	// Don't interfere with a depot visit scheduled by the user, or a
-	// depot visit by the order list.
+	/* Don't interfere with a depot visit scheduled by the user, or a
+	 * depot visit by the order list. */
 	if (v->current_order.type == OT_GOTO_DEPOT &&
 			(v->current_order.flags & (OF_HALT_IN_DEPOT | OF_PART_OF_ORDERS)) != 0)
 		return;
@@ -3515,7 +3527,7 @@
 
 	FOR_ALL_VEHICLES(v) {
 		if (v->type == VEH_TRAIN && IsFrontEngine(v)) {
-			// show warning if train is not generating enough income last 2 years (corresponds to a red icon in the vehicle list)
+			/* show warning if train is not generating enough income last 2 years (corresponds to a red icon in the vehicle list) */
 			if (_patches.train_income_warn && v->owner == _local_player && v->age >= 730 && v->profit_this_year < 0) {
 				SetDParam(1, v->profit_this_year);
 				SetDParam(0, v->unitnumber);
@@ -3587,7 +3599,7 @@
 	}
 }
 
-/*
+/**
  *  Converts all trains to the new subtype format introduced in savegame 16.2
  *  It also links multiheaded engines or make them forget they are multiheaded if no suitable partner is found
  */
--- a/src/train_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/train_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file train_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -22,7 +24,7 @@
 
 	if (!success) return;
 
-	// find a locomotive in the depot.
+	/* find a locomotive in the depot. */
 	found = NULL;
 	FOR_ALL_VEHICLES(v) {
 		if (v->type == VEH_TRAIN && IsFrontEngine(v) &&
@@ -33,10 +35,10 @@
 		}
 	}
 
-	// if we found a loco,
+	/* if we found a loco, */
 	if (found != NULL) {
 		found = GetLastVehicleInChain(found);
-		// put the new wagon at the end of the loco.
+		/* put the new wagon at the end of the loco. */
 		DoCommandP(0, _new_vehicle_id | (found->index << 16), 0, NULL, CMD_MOVE_RAIL_VEHICLE);
 		RebuildVehicleLists();
 	}
@@ -447,7 +449,7 @@
 	y = 57;
 	sel = w->vscroll.pos;
 
-	// draw the first 3 details tabs
+	/* draw the first 3 details tabs */
 	if (det_tab != 3) {
 		x = 1;
 		for (;;) {
@@ -470,7 +472,7 @@
 					default: NOT_REACHED();
 					case 0: TrainDetailsCargoTab(   v, px, py); break;
 					case 1:
-						// Only show name and value for the 'real' part
+						/* Only show name and value for the 'real' part */
 						if (!IsArticulatedPart(v)) {
 							TrainDetailsInfoTab(v, px, py);
 						}
@@ -481,7 +483,7 @@
 
 				v = u;
 			} else {
-				// Move to the next line
+				/* Move to the next line */
 				do {
 					v = v->next;
 				} while (v != NULL && IsArticulatedPart(v) && v->cargo_cap == 0);
@@ -489,7 +491,7 @@
 			if (v == NULL) return;
 		}
 	} else {
-		// draw total cargo tab
+		/* draw total cargo tab */
 		DrawString(x, y + 2, STR_013F_TOTAL_CAPACITY_TEXT, 0);
 		for (CargoID i = 0; i < NUM_CARGO; i++) {
 			if (max_cargo[i] > 0 && --sel < 0 && sel > -w->vscroll.cap) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/transparency_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -0,0 +1,68 @@
+/* $Id$ */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "table/sprites.h"
+#include "table/strings.h"
+#include "functions.h"
+#include "window.h"
+#include "gui.h"
+#include "viewport.h"
+#include "gfx.h"
+#include "sound.h"
+#include "variables.h"
+
+static void Transparent_Click(byte widget)
+{
+	TOGGLEBIT(_transparent_opt, widget);
+	SndPlayFx(SND_15_BEEP);
+}
+
+static void TransparencyToolbWndProc(Window *w, WindowEvent *e)
+{
+	switch (e->event) {
+		case WE_PAINT:
+			for (uint i = 0; i < 7; i++) {
+				SetWindowWidgetLoweredState(w, i + 3, HASBIT(_transparent_opt, i));
+			}
+			DrawWindowWidgets(w);
+			break;
+
+		case WE_CLICK:
+			if (e->we.click.widget >= 3) {
+				Transparent_Click(e->we.click.widget - 3);
+				MarkWholeScreenDirty();
+			}
+			break;
+	}
+}
+
+static const Widget _transparency_widgets[] = {
+{ WWT_CLOSEBOX,   RESIZE_NONE,  7,   0,  10,   0,  13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
+{  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 */
+{   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},
+{   WWT_IMGBTN,   RESIZE_NONE,  7,  66,  87,  14,  35, SPR_IMG_INDUSTRY,     STR_TRANSPARENT_INDUSTRIES_DESC},
+{   WWT_IMGBTN,   RESIZE_NONE,  7,  88, 109,  14,  35, SPR_IMG_COMPANY_LIST, STR_TRANSPARENT_BUILDINGS_DESC},
+{   WWT_IMGBTN,   RESIZE_NONE,  7, 110, 152,  14,  35, SPR_IMG_BRIDGE,       STR_TRANSPARENT_BRIDGES_DESC},
+{   WWT_IMGBTN,   RESIZE_NONE,  7, 153, 174,  14,  35, SPR_IMG_TRANSMITTER,  STR_TRANSPARENT_STRUCTURES_DESC},
+
+{   WIDGETS_END},
+};
+
+static const WindowDesc _transparency_desc = {
+	WDP_ALIGN_TBR, 58+36, 175, 36,
+	WC_TRANSPARENCY_TOOLBAR, WC_NONE,
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
+	_transparency_widgets,
+	TransparencyToolbWndProc
+};
+
+void ShowTransparencyToolbar(void)
+{
+	AllocateWindowDescFront(&_transparency_desc, 0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/transparency_gui.h	Tue Jun 12 11:56:35 2007 +0000
@@ -0,0 +1,8 @@
+/* $Id$ */
+
+#ifndef TRANSPARENCY_GUI_H
+#define TRANSPARENCY_GUI_H
+
+void ShowTransparencyToolbar();
+
+#endif /* TRANSPARENCY_GUI_H */
--- a/src/tree_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tree_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tree_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
@@ -53,7 +55,7 @@
 	if (tree != TREE_INVALID) {
 		MakeTree(tile, tree, GB(r, 22, 2), min(GB(r, 16, 3), 6), TREE_GROUND_GRASS, 0);
 
-		// above snowline?
+		/* above snowline? */
 		if (_opt.landscape == LT_ARCTIC && GetTileZ(tile) > GetSnowLine()) {
 			SetTreeGroundDensity(tile, TREE_GROUND_SNOW_DESERT, 3);
 			SetTreeCounter(tile, (TreeGround)GB(r, 24, 3));
@@ -207,6 +209,7 @@
 
 /** Plant a tree.
  * @param tile start tile of area-drag of tree plantation
+ * @param flags type of operation
  * @param p1 tree type, -1 means random.
  * @param p2 end tile of area-drag
  */
@@ -240,7 +243,7 @@
 
 			switch (GetTileType(tile)) {
 				case MP_TREES:
-					// no more space for trees?
+					/* no more space for trees? */
 					if (_game_mode != GM_EDITOR && GetTreeCount(tile) == 3) {
 						msg = STR_2803_TREE_ALREADY_HERE;
 						continue;
@@ -250,7 +253,7 @@
 						AddTreeCount(tile, 1);
 						MarkTileDirtyByTile(tile);
 					}
-					// 2x as expensive to add more trees to an existing tile
+					/* 2x as expensive to add more trees to an existing tile */
 					cost += _eco->GetPrice(CEconomy::BUILD_TREES) * 2;
 					break;
 
@@ -365,7 +368,7 @@
 
 	StartSpriteCombine();
 
-	if (!(_display_opt & DO_TRANS_BUILDINGS) || !_patches.invisible_trees) {
+	if (!HASBIT(_transparent_opt, TO_TREES) || !_patches.invisible_trees) {
 		TreeListEnt te[4];
 		uint i;
 
@@ -374,7 +377,7 @@
 		do {
 			SpriteID image = s[0].sprite + (--i == 0 ? GetTreeGrowth(ti->tile) : 3);
 			SpriteID pal;
-			if (_display_opt & DO_TRANS_BUILDINGS) {
+			if (HASBIT(_transparent_opt, TO_TREES)) {
 				SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 				pal = PALETTE_TO_TRANSPARENT;
 			} else {
@@ -622,7 +625,7 @@
 		MakeTree(tile, tree, 0, 0, ct == CLEAR_ROUGH ? TREE_GROUND_ROUGH : TREE_GROUND_GRASS, 0);
 	}
 
-	// byte underflow
+	/* byte underflow */
 	if (--_trees_tick_ctr != 0) return;
 
 	/* place a tree at a random spot */
--- a/src/tree_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tree_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tree_map.h */
+
 #ifndef TREE_MAP_H
 #define TREE_MAP_H
 
@@ -26,9 +28,9 @@
 /* ground type, m2 bits 4...5
  * valid densities (bits 6...7) in comments after the enum */
 enum TreeGround {
-	TREE_GROUND_GRASS       = 0, // 0
-	TREE_GROUND_ROUGH       = 1, // 0
-	TREE_GROUND_SNOW_DESERT = 2  // 0-3 for snow, 3 for desert
+	TREE_GROUND_GRASS       = 0, ///< 0
+	TREE_GROUND_ROUGH       = 1, ///< 0
+	TREE_GROUND_SNOW_DESERT = 2  ///< 0-3 for snow, 3 for desert
 };
 
 
--- a/src/tunnel_map.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tunnel_map.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tunnel_map.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "tile.h"
--- a/src/tunnel_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tunnel_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file tunnel_map.h */
+
 #ifndef TUNNEL_MAP_H
 #define TUNNEL_MAP_H
 
--- a/src/tunnelbridge_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -61,8 +61,9 @@
 Bridge _bridge[MAX_BRIDGES];
 
 
-// calculate the price factor for building a long bridge.
-// basically the cost delta is 1,1, 1, 2,2, 3,3,3, 4,4,4,4, 5,5,5,5,5, 6,6,6,6,6,6,  7,7,7,7,7,7,7,  8,8,8,8,8,8,8,8,
+/** calculate the price factor for building a long bridge.
+ * basically the cost delta is 1,1, 1, 2,2, 3,3,3, 4,4,4,4, 5,5,5,5,5, 6,6,6,6,6,6,  7,7,7,7,7,7,7,  8,8,8,8,8,8,8,8,
+ */
 int CalcBridgeLenCostFactor(int x)
 {
 	int n;
@@ -79,11 +80,11 @@
 
 #define M(x) (1 << (x))
 enum BridgeFoundation {
-	// foundation, whole tile is leveled up --> 3 corners raised
+	/* foundation, whole tile is leveled up --> 3 corners raised */
 	BRIDGE_FULL_LEVELED_FOUNDATION = M(SLOPE_WSE) | M(SLOPE_NWS) | M(SLOPE_ENW) | M(SLOPE_SEN),
-	// foundation, tile is partly leveled up --> 1 corner raised
+	/* foundation, tile is partly leveled up --> 1 corner raised */
 	BRIDGE_PARTLY_LEVELED_FOUNDATION = M(SLOPE_W) | M(SLOPE_S) | M(SLOPE_E) | M(SLOPE_N),
-	// no foundations (X,Y direction)
+	/* no foundations (X,Y direction) */
 	BRIDGE_NO_FOUNDATION = M(SLOPE_FLAT) | M(SLOPE_SW) | M(SLOPE_SE) | M(SLOPE_NW) | M(SLOPE_NE),
 	BRIDGE_HORZ_RAMP = (BRIDGE_PARTLY_LEVELED_FOUNDATION | BRIDGE_NO_FOUNDATION) & ~M(SLOPE_FLAT)
 };
@@ -167,6 +168,7 @@
 
 /** Build a Bridge
  * @param end_tile end tile
+ * @param flags type of operation
  * @param p1 packed start tile coords (~ dx)
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0- 7) - bridge type (hi bh)
@@ -202,7 +204,7 @@
 
 	if (p1 >= MapSize()) return CMD_ERROR;
 
-	// type of bridge
+	/* type of bridge */
 	if (HASBIT(p2, 15)) {
 		railtype = INVALID_RAILTYPE; // road bridge
 	} else {
@@ -255,7 +257,7 @@
 
 	if (z_start != z_end) return_cmd_error(STR_5009_LEVEL_LAND_OR_WATER_REQUIRED);
 
-	// Towns are not allowed to use bridges on slopes.
+	/* Towns are not allowed to use bridges on slopes. */
 	allow_on_slopes = (!_is_old_ai_player
 	                   && _current_player != OWNER_TOWN && _patches.build_on_slopes);
 
@@ -315,7 +317,7 @@
 		if (CmdFailed(ret)) return ret;
 		cost += ret;
 
-		// false - end tile slope check
+		/* false - end tile slope check */
 		terraformcost = CheckBridgeSlopeSouth(direction, tileh_end);
 		if (CmdFailed(terraformcost) || (terraformcost != 0 && !allow_on_slopes))
 			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@@ -439,6 +441,7 @@
 
 /** Build Tunnel.
  * @param tile start tile of tunnel
+ * @param flags type of operation
  * @param p1 railtype, 0x200 for road tunnel
  * @param p2 unused
  */
@@ -496,10 +499,10 @@
 	/* Add the cost of the entrance */
 	cost += _eco->GetPrice(CEconomy::BUILD_TUNNEL) + ret;
 
-	// if the command fails from here on we want the end tile to be highlighted
+	/* if the command fails from here on we want the end tile to be highlighted */
 	_build_tunnel_endtile = end_tile;
 
-	// slope of end tile must be complementary to the slope of the start tile
+	/* slope of end tile must be complementary to the slope of the start tile */
 	if (end_tileh != ComplementSlope(start_tileh)) {
 		ret = DoCommand(end_tile, end_tileh & start_tileh, 0, flags, CMD_TERRAFORM_LAND);
 		if (CmdFailed(ret)) return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND);
@@ -591,12 +594,12 @@
 	}
 
 	if (flags & DC_EXEC) {
-		// We first need to request the direction before calling DoClearSquare
-		//  else the direction is always 0.. dah!! ;)
+		/* We first need to request the direction before calling DoClearSquare
+		 *  else the direction is always 0.. dah!! ;) */
 		DiagDirection dir = GetTunnelDirection(tile);
 		Track track;
 
-		// Adjust the town's player rating. Do this before removing the tile owner info.
+		/* Adjust the town's player rating. Do this before removing the tile owner info. */
 		if (IsTileOwner(tile, OWNER_TOWN) && _game_mode != GM_EDITOR)
 			ChangeTownRating(t, RATING_TUNNEL_BRIDGE_DOWN_STEP, RATING_TUNNEL_BRIDGE_MINIMUM);
 
@@ -637,8 +640,8 @@
 
 	endtile = GetOtherBridgeEnd(tile);
 
-	if (!EnsureNoVehicle(tile) ||
-			!EnsureNoVehicle(endtile) ||
+	if (!EnsureNoVehicleOnGround(tile) ||
+			!EnsureNoVehicleOnGround(endtile) ||
 			IsVehicleOnBridge(tile, endtile, GetBridgeHeight(tile))) {
 		return CMD_ERROR;
 	}
@@ -661,8 +664,8 @@
 		TileIndex c;
 		Track track;
 
-		//checks if the owner is town then decrease town rating by RATING_TUNNEL_BRIDGE_DOWN_STEP until
-		// you have a "Poor" (0) town rating
+		/* checks if the owner is town then decrease town rating by RATING_TUNNEL_BRIDGE_DOWN_STEP until
+		 * you have a "Poor" (0) town rating */
 		if (IsTileOwner(tile, OWNER_TOWN) && _game_mode != GM_EDITOR)
 			ChangeTownRating(t, RATING_TUNNEL_BRIDGE_DOWN_STEP, RATING_TUNNEL_BRIDGE_MINIMUM);
 
@@ -717,7 +720,7 @@
 
 		if (GetRailType(tile) == totype) return CMD_ERROR;
 
-		// 'hidden' elrails can't be downgraded to normal rail when elrails are disabled
+		/* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
 		if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
 
 		endtile = CheckTunnelBusy(tile, &length);
@@ -741,8 +744,8 @@
 
 		endtile = GetOtherBridgeEnd(tile);
 
-		if (!EnsureNoVehicle(tile) ||
-				!EnsureNoVehicle(endtile) ||
+		if (!EnsureNoVehicleOnGround(tile) ||
+				!EnsureNoVehicleOnGround(endtile) ||
 				IsVehicleOnBridge(tile, endtile, GetBridgeHeight(tile))) {
 			return CMD_ERROR;
 		}
@@ -792,7 +795,7 @@
 			{ 2, 4, 8, 1,   2, 16, 9, 0 }
 		};
 
-		if (_display_opt & DO_TRANS_BUILDINGS) {
+		if (HASBIT(_transparent_opt, TO_BRIDGES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else {
@@ -829,7 +832,7 @@
 
 	if (HASBIT(BRIDGE_FULL_LEVELED_FOUNDATION, tileh)) return tileh;
 
-	// inclined sloped building
+	/* inclined sloped building */
 	switch (tileh) {
 		case SLOPE_W:
 		case SLOPE_STEEP_W: i = 0; break;
@@ -850,6 +853,7 @@
  * For tunnels, this is rather simple, as you only needa draw the entrance.
  * Bridges are a bit more complex. base_offset is where the sprite selection comes into play
  * and it works a bit like a bitmask.<p> For bridge heads:
+ * @param ti TileInfo of the structure to draw
  * <ul><li>Bit 0: direction</li>
  * <li>Bit 1: northern or southern heads</li>
  * <li>Bit 2: Set if the bridge head is sloped</li>
@@ -884,7 +888,7 @@
 
 		if (GetBridgeTransportType(ti->tile) == TRANSPORT_RAIL) {
 			base_offset = GetRailTypeInfo(GetRailType(ti->tile))->bridge_offset;
-			assert(base_offset != 8); /* This one is used for roads */
+			assert(base_offset != 8); // This one is used for roads
 		} else {
 			base_offset = 8;
 		}
@@ -897,7 +901,7 @@
 			if (f != 0) DrawFoundation(ti, f);
 		}
 
-		// HACK Wizardry to convert the bridge ramp direction into a sprite offset
+		/* HACK Wizardry to convert the bridge ramp direction into a sprite offset */
 		base_offset += (6 - GetBridgeRampDirection(ti->tile)) % 4;
 
 		if (ti->tileh == SLOPE_FLAT) base_offset += 4; // sloped bridge head
@@ -915,8 +919,8 @@
 
 		image = psid->sprite;
 
-		// draw ramp
-		if (_display_opt & DO_TRANS_BUILDINGS) {
+		/* draw ramp */
+		if (HASBIT(_transparent_opt, TO_BRIDGES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else {
@@ -1008,7 +1012,7 @@
 	z = GetBridgeHeight(rampsouth) - 3;
 
 	image = psid->sprite;
-	if (_display_opt & DO_TRANS_BUILDINGS) {
+	if (HASBIT(_transparent_opt, TO_BRIDGES)) {
 		SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 		pal = PALETTE_TO_TRANSPARENT;
 	} else {
@@ -1023,14 +1027,14 @@
 
 	psid++;
 	image = psid->sprite;
-	if (_display_opt & DO_TRANS_BUILDINGS) {
+	if (HASBIT(_transparent_opt, TO_BRIDGES)) {
 		SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 		pal = PALETTE_TO_TRANSPARENT;
 	} else {
 		pal = psid->pal;
 	}
 
-	// draw roof, the component of the bridge which is logically between the vehicle and the camera
+	/* draw roof, the component of the bridge which is logically between the vehicle and the camera */
 	if (axis == AXIS_X) {
 		y += 12;
 		if (image & SPRITE_MASK) AddSortableSpriteToDraw(image, pal, x, y, 16, 1, 0x28, z);
@@ -1043,10 +1047,10 @@
 
 	psid++;
 	if (ti->z + 5 == z) {
-		// draw poles below for small bridges
+		/* draw poles below for small bridges */
 		if (psid->sprite != 0) {
 			image = psid->sprite;
-			if (_display_opt & DO_TRANS_BUILDINGS) {
+			if (HASBIT(_transparent_opt, TO_BRIDGES)) {
 				SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 				pal = PALETTE_TO_TRANSPARENT;
 			} else {
@@ -1056,7 +1060,7 @@
 			DrawGroundSpriteAt(image, pal, x, y, z);
 		}
 	} else if (_patches.bridge_pillars) {
-		// draw pillars below for high bridges
+		/* draw pillars below for high bridges */
 		DrawBridgePillars(psid, ti, axis, type, x, y, z);
 	}
 }
@@ -1073,13 +1077,13 @@
 	if (IsTunnel(tile)) {
 		uint pos = (DiagDirToAxis(GetTunnelDirection(tile)) == AXIS_X ? y : x);
 
-		// In the tunnel entrance?
+		/* In the tunnel entrance? */
 		if (5 <= pos && pos <= 10) return z;
 	} else {
 		DiagDirection dir = GetBridgeRampDirection(tile);
 		uint pos = (DiagDirToAxis(dir) == AXIS_X ? y : x);
 
-		// On the bridge ramp?
+		/* On the bridge ramp? */
 		if (5 <= pos && pos <= 10) {
 			uint delta;
 
@@ -1302,7 +1306,7 @@
 			dir = GetTunnelDirection(tile);
 			vdir = DirToDiagDir(v->direction);
 
-			// Enter tunnel?
+			/* Enter tunnel? */
 			if (v->u.road.state != RVSB_WORMHOLE && dir == vdir) {
 				if (fc == _tunnel_fractcoord_4[dir] ||
 						fc == _tunnel_fractcoord_5[dir]) {
--- a/src/unix.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/unix.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file unix.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
@@ -27,7 +29,7 @@
 #include <exec/types.h>
 ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;)
 
-// The system supplied definition of SIG_IGN does not match
+/* The system supplied definition of SIG_IGN does not match */
 #undef SIG_IGN
 #define SIG_IGN (void (*)(int))1
 #endif /* __MORPHOS__ */
@@ -39,7 +41,7 @@
 
 #if defined(__APPLE__)
 	#if defined(WITH_SDL)
-		//the mac implementation needs this file included in the same file as main()
+		/*the mac implementation needs this file included in the same file as main() */
 		#include <SDL.h>
 	#endif
 #endif
@@ -104,11 +106,11 @@
 void ShowOSErrorBox(const char *buf)
 {
 #if defined(__APPLE__)
-	// this creates an NSAlertPanel with the contents of 'buf'
-	// this is the native and nicest way to do this on OSX
+	/* this creates an NSAlertPanel with the contents of 'buf'
+	 * this is the native and nicest way to do this on OSX */
 	ShowMacDialog( buf, "See readme for more info\nMost likely you are missing files from the original TTD", "Quit" );
 #else
-	// all systems, but OSX
+	/* all systems, but OSX */
 	fprintf(stderr, "\033[1;31mError: %s\033[0;39m\n", buf);
 #endif
 }
@@ -151,10 +153,10 @@
 }
 
 
-// multi os compatible sleep function
+/* multi os compatible sleep function */
 
 #ifdef __AMIGA__
-// usleep() implementation
+/* usleep() implementation */
 #	include <devices/timer.h>
 #	include <dos/dos.h>
 
@@ -174,7 +176,7 @@
 		ULONG signals;
 		ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
 
-		// send IORequest
+		/* send IORequest */
 		TimerRequest->tr_node.io_Command = TR_ADDREQUEST;
 		TimerRequest->tr_time.tv_secs    = (milliseconds * 1000) / 1000000;
 		TimerRequest->tr_time.tv_micro   = (milliseconds * 1000) % 1000000;
@@ -243,7 +245,7 @@
 	}
 
 	*outbuf = '\0';
-	// FIX: invalid characters will abort conversion, but they shouldn't occur?
+	/* FIX: invalid characters will abort conversion, but they shouldn't occur? */
 	return buf;
 }
 
--- a/src/unmovable.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/unmovable.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file unmovable.h */
+
 #ifndef UNMOVABLE_H
 #define UNMOVABLE_H
 
--- a/src/unmovable_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/unmovable_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,10 +1,13 @@
 /* $Id$ */
 
+/** @file unmovable_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "table/strings.h"
 #include "table/sprites.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "tile.h"
 #include "command.h"
@@ -44,7 +47,7 @@
 		InvalidateWindow(WC_COMPANY, pid);
 	}
 
-	// cost of relocating company is 1% of company value
+	/* cost of relocating company is 1% of company value */
 	return CalculateCompanyValue(p) / 100;
 }
 
@@ -69,12 +72,14 @@
 	MarkTileDirtyByTile(tile + TileDiffXY(1, 1));
 }
 
+extern int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station);
+
 /** Build or relocate the HQ. This depends if the HQ is already built or not
  * @param tile tile where the HQ will be built or relocated to
+ * @param flags type of operation
  * @param p1 unused
  * @param p2 unused
  */
-extern int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station);
 int32 CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p = GetPlayer(_current_player);
@@ -87,7 +92,7 @@
 	if (CmdFailed(ret)) return ret;
 	cost = ret;
 
-	if (p->location_of_house != 0) { /* Moving HQ */
+	if (p->location_of_house != 0) { // Moving HQ
 		cost += DestroyCompanyHQ(_current_player, flags);
 	}
 
@@ -121,7 +126,7 @@
 			dtus = &_draw_tile_unmovable_data[GetUnmovableType(ti->tile)];
 
 			image = dtus->image;
-			if (_display_opt & DO_TRANS_BUILDINGS) {
+			if (HASBIT(_transparent_opt, TO_STRUCTURES)) {
 				SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 				pal = PALETTE_TO_TRANSPARENT;
 			} else {
@@ -139,7 +144,7 @@
 			DrawGroundSprite(SPR_CONCRETE_GROUND, PAL_NONE);
 
 			image = SPR_STATUE_COMPANY;
-			if (_display_opt & DO_TRANS_BUILDINGS) {
+			if (HASBIT(_transparent_opt, TO_STRUCTURES)) {
 				SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 				pal = PALETTE_TO_TRANSPARENT;
 			} else {
@@ -175,7 +180,7 @@
 
 			foreach_draw_tile_seq(dtss, t->seq) {
 				image = dtss->image;
-				if (_display_opt & DO_TRANS_BUILDINGS) {
+				if (HASBIT(_transparent_opt, TO_STRUCTURES)) {
 					SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 					pal = PALETTE_TO_TRANSPARENT;
 				} else {
@@ -225,7 +230,7 @@
 		return DoCommand(tile, 0, 0, flags, CMD_SELL_LAND_AREA);
 	}
 
-	// checks if you're allowed to remove unmovable things
+	/* checks if you're allowed to remove unmovable things */
 	if (_game_mode != GM_EDITOR && _current_player != OWNER_WATER && ((flags & DC_AUTO || !_cheats.magic_bulldozer.value)) )
 		return_cmd_error(STR_5800_OBJECT_IN_THE_WAY);
 
@@ -253,14 +258,14 @@
 
 	level = GetCompanyHQSize(tile) + 1;
 
-	// Top town building generates 10, so to make HQ interesting, the top
-	// type makes 20.
+	/* Top town building generates 10, so to make HQ interesting, the top
+	 * type makes 20. */
 	ac[CT_PASSENGERS] = max(1U, level);
 
-	// Top town building generates 4, HQ can make up to 8. The
-	// proportion passengers:mail is different because such a huge
-	// commercial building generates unusually high amount of mail
-	// correspondence per physical visitor.
+	/* Top town building generates 4, HQ can make up to 8. The
+	 * proportion passengers:mail is different because such a huge
+	 * commercial building generates unusually high amount of mail
+	 * correspondence per physical visitor. */
 	ac[CT_MAIL] = max(1U, level / 2);
 }
 
@@ -296,16 +301,16 @@
 	assert(level < 6);
 
 	r = Random();
-	// Top town buildings generate 250, so the top HQ type makes 256.
+	/* Top town buildings generate 250, so the top HQ type makes 256. */
 	if (GB(r, 0, 8) < (256 / 4 / (6 - level))) {
 		uint amt = GB(r, 0, 8) / 8 / 4 + 1;
 		if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
 		MoveGoodsToStation(tile, 2, 2, CT_PASSENGERS, amt);
 	}
 
-	// Top town building generates 90, HQ can make up to 196. The
-	// proportion passengers:mail is about the same as in the acceptance
-	// equations.
+	/* Top town building generates 90, HQ can make up to 196. The
+	 * proportion passengers:mail is about the same as in the acceptance
+	 * equations. */
 	if (GB(r, 8, 8) < (196 / 4 / (6 - level))) {
 		uint amt = GB(r, 8, 8) / 8 / 4 + 1;
 		if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
--- a/src/unmovable_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/unmovable_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file unmovable_map.h */
+
 #ifndef UNMOVABLE_MAP_H
 #define UNMOVABLE_MAP_H
 
--- a/src/variables.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/variables.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,11 +1,13 @@
 /* $Id$ */
 
+/** @file variables.h */
+
 #ifndef VARIABLES_H
 #define VARIABLES_H
 
 #include "yapf/yapf_settings.h"
 
-// ********* START OF SAVE REGION
+/* ********* START OF SAVE REGION */
 #if !defined(MAX_PATH)
 # define MAX_PATH 260
 #endif
@@ -34,47 +36,47 @@
 /* These are the default options for a new game */
 VARDEF GameOptions _opt_newgame;
 
-// Pointer to one of the two _opt OR _opt_newgame structs
+/* Pointer to one of the two _opt OR _opt_newgame structs */
 VARDEF GameOptions *_opt_ptr;
 
-// Amount of game ticks
+/* Amount of game ticks */
 VARDEF uint16 _tick_counter;
 
-// This one is not used anymore.
+/* This one is not used anymore. */
 VARDEF VehicleID _vehicle_id_ctr_day;
 
-// Skip aging of cargo?
+/* Skip aging of cargo? */
 VARDEF byte _age_cargo_skip_counter;
 
-// Position in tile loop
+/* Position in tile loop */
 VARDEF TileIndex _cur_tileloop_tile;
 
-// Also save scrollpos_x, scrollpos_y and zoom
+/* Also save scrollpos_x, scrollpos_y and zoom */
 VARDEF uint16 _disaster_delay;
 
-// Determines what station to operate on in the
-//  tick handler.
+/* Determines what station to operate on in the
+ *  tick handler. */
 VARDEF uint16 _station_tick_ctr;
 
 VARDEF uint32 _random_seeds[2][2];
 
-// Iterator through all towns in OnTick_Town
+/* Iterator through all towns in OnTick_Town */
 VARDEF uint32 _cur_town_ctr;
-// Frequency iterator at the same place
+/* Frequency iterator at the same place */
 VARDEF uint32 _cur_town_iter;
 
 VARDEF uint _cur_player_tick_index;
 VARDEF uint _next_competitor_start;
 
-// Determines how often to run the tree loop
+/* Determines how often to run the tree loop */
 VARDEF byte _trees_tick_ctr;
 
-// Keep track of current game position
+/* Keep track of current game position */
 VARDEF int _saved_scrollpos_x;
 VARDEF int _saved_scrollpos_y;
 VARDEF byte _saved_scrollpos_zoom;
 
-// ********* END OF SAVE REGION
+/* ********* END OF SAVE REGION */
 
 struct Patches {
 	bool modified_catchment;            // different-size catchment areas
@@ -197,28 +199,31 @@
 	 */
 	uint32 npf_max_search_nodes;
 
-	uint32 npf_rail_firstred_penalty;      /* The penalty for when the first signal is red (and it is not an exit or combo signal) */
-	uint32 npf_rail_firstred_exit_penalty; /* The penalty for when the first signal is red (and it is an exit or combo signal) */
-	uint32 npf_rail_lastred_penalty;       /* The penalty for when the last signal is red */
-	uint32 npf_rail_station_penalty;       /* The penalty for station tiles */
-	uint32 npf_rail_slope_penalty;         /* The penalty for sloping upwards */
-	uint32 npf_rail_curve_penalty;         /* The penalty for curves */
-	uint32 npf_rail_depot_reverse_penalty; /* The penalty for reversing in depots */
-	uint32 npf_buoy_penalty;               /* The penalty for going over (through) a buoy */
-	uint32 npf_water_curve_penalty;        /* The penalty for curves */
-	uint32 npf_road_curve_penalty;         /* The penalty for curves */
-	uint32 npf_crossing_penalty;           /* The penalty for level crossings */
-	uint32 npf_road_drive_through_penalty; /* The penalty for going through a drive-through road stop */
+	uint32 npf_rail_firstred_penalty;      // The penalty for when the first signal is red (and it is not an exit or combo signal)
+	uint32 npf_rail_firstred_exit_penalty; // The penalty for when the first signal is red (and it is an exit or combo signal)
+	uint32 npf_rail_lastred_penalty;       // The penalty for when the last signal is red
+	uint32 npf_rail_station_penalty;       // The penalty for station tiles
+	uint32 npf_rail_slope_penalty;         // The penalty for sloping upwards
+	uint32 npf_rail_curve_penalty;         // The penalty for curves
+	uint32 npf_rail_depot_reverse_penalty; // The penalty for reversing in depots
+	uint32 npf_buoy_penalty;               // The penalty for going over (through) a buoy
+	uint32 npf_water_curve_penalty;        // The penalty for curves
+	uint32 npf_road_curve_penalty;         // The penalty for curves
+	uint32 npf_crossing_penalty;           // The penalty for level crossings
+	uint32 npf_road_drive_through_penalty; // The penalty for going through a drive-through road stop
 
 	bool population_in_label; // Show the population of a town in his label?
 
-	uint8 freight_trains; ///< Value to multiply the weight of cargo by
+	uint8 freight_trains; // Value to multiply the weight of cargo by
 
 	/** YAPF settings */
 	YapfSettings  yapf;
 
 	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
 };
 
 VARDEF Patches _patches;
@@ -230,9 +235,9 @@
 };
 
 
-// WARNING! Do _not_ remove entries in Cheats struct or change the order
-// of the existing ones! Would break downward compatibility.
-// Only add new entries at the end of the struct!
+/* WARNING! Do _not_ remove entries in Cheats struct or change the order
+ * of the existing ones! Would break downward compatibility.
+ * Only add new entries at the end of the struct! */
 
 struct Cheats {
 	Cheat magic_bulldozer;  // dynamite industries, unmovables
@@ -264,7 +269,7 @@
 
 VARDEF Paths _paths;
 
-// NOSAVE: Used in palette animations only, not really important.
+/* NOSAVE: Used in palette animations only, not really important. */
 VARDEF int _timer_counter;
 
 
@@ -276,6 +281,7 @@
 VARDEF int _autosave_ctr;
 
 VARDEF byte _display_opt;
+VARDEF byte _transparent_opt;
 VARDEF int _caret_timer;
 VARDEF uint32 _news_display_opt;
 VARDEF bool _news_ticker_sound;
@@ -287,20 +293,20 @@
 
 VARDEF bool _rightclick_emulate;
 
-// IN/OUT parameters to commands
+/* IN/OUT parameters to commands */
 VARDEF byte _yearly_expenses_type;
 VARDEF TileIndex _terraform_err_tile;
 VARDEF TileIndex _build_tunnel_endtile;
 VARDEF bool _generating_world;
 
-// Deals with the type of the savegame, independent of extension
+/* Deals with the type of the savegame, independent of extension */
 struct SmallFiosItem {
 	int mode;             // savegame/scenario type (old, new)
 	char name[MAX_PATH];  // name
 	char title[255];      // internal name of the game
 };
 
-// Used when switching from the intro menu.
+/* Used when switching from the intro menu. */
 VARDEF byte _switch_mode;
 VARDEF StringID _switch_mode_errorstr;
 VARDEF SmallFiosItem _file_to_saveload;
@@ -368,14 +374,14 @@
 	return _decode_parameters[n];
 }
 
-// Used to bind a C string name to a dparam number.
-// NOTE: This has a short lifetime. You can't
-//       use this string much later or it will be gone.
+/* Used to bind a C string name to a dparam number.
+ * NOTE: This has a short lifetime. You can't
+ *       use this string much later or it will be gone. */
 void SetDParamStr(uint n, const char *str);
 
-// This function takes a C-string and allocates a temporary string ID.
-// The duration of the bound string is valid only until the next acll to GetString,
-// so be careful.
+/** This function takes a C-string and allocates a temporary string ID.
+ * The duration of the bound string is valid only until the next acll to GetString,
+ * so be careful. */
 StringID BindCString(const char *str);
 
 
@@ -385,7 +391,7 @@
 
 #define SET_EXPENSES_TYPE(x) _yearly_expenses_type = x;
 
-/* landscape.c */
+/* landscape.cpp */
 extern const byte _tileh_to_sprite[32];
 extern const Slope _inclined_tileh[16];
 
--- a/src/vehicle.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/vehicle.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file vehicle.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "road_map.h"
@@ -9,6 +11,7 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
@@ -104,7 +107,7 @@
 bool VehicleNeedsService(const Vehicle *v)
 {
 	if (v->vehstatus & VS_CRASHED)
-		return false; /* Crashed vehicles don't need service anymore */
+		return false; // Crashed vehicles don't need service anymore
 
 	if (_patches.no_servicing_if_no_breakdowns && _opt.diff.vehicle_breakdowns == 0) {
 		return EngineHasReplacementForPlayer(GetPlayer(v->owner), v->engine_type);  /* Vehicles set for autoreplacing needs to go to a depot even if breakdowns are turned off */
@@ -215,7 +218,7 @@
 	v->bottom_coord = pt.y + spr->height + 2;
 }
 
-// Called after load to update coordinates
+/** Called after load to update coordinates */
 void AfterLoadVehicles()
 {
 	Vehicle *v;
@@ -311,7 +314,7 @@
 	return NULL;
 }
 
-/*
+/**
  * finds a free vehicle in the memory or allocates a new one
  * returns a pointer to the first free vehicle or NULL if all vehicles are in use
  * *skip_vehicles is an offset to where in the array we should begin looking
@@ -327,7 +330,7 @@
 	const int offset = (1 << Vehicle_POOL_BLOCK_SIZE_BITS) * BLOCKS_FOR_SPECIAL_VEHICLES;
 
 	/* We don't use FOR_ALL here, because FOR_ALL skips invalid items.
-	 * TODO - This is just a temporary stage, this will be removed. */
+	 * @todo - This is just a temporary stage, this will be removed. */
 	if (*skip_vehicles < (_Vehicle_pool.total_items - offset)) { // make sure the offset in the array is not larger than the array itself
 		for (v = GetVehicle(offset + *skip_vehicles); v != NULL; v = (v->index + 1U < GetVehiclePoolSize()) ? GetVehicle(v->index + 1) : NULL) {
 			(*skip_vehicles)++;
@@ -381,7 +384,7 @@
 {
 	Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, 0);
 
-	// The hash area to scan
+	/* The hash area to scan */
 	const int xl = GB(pt.x - 174, 7, 6);
 	const int xu = GB(pt.x + 104, 7, 6);
 	const int yl = GB(pt.y - 294, 6, 6) << 6;
@@ -498,7 +501,7 @@
 
 	u = GetFirstVehicleInChain(v);
 
-	// Check to see if this is the first
+	/* Check to see if this is the first */
 	if (v == u) return NULL;
 
 	for (; u->next != v; u = u->next) assert(u->next != NULL);
@@ -606,7 +609,7 @@
 static void EffectVehicle_Tick(Vehicle *v);
 void DisasterVehicle_Tick(Vehicle *v);
 
-// head of the linked list to tell what vehicles that visited a depot in a tick
+/** head of the linked list to tell what vehicles that visited a depot in a tick */
 static Vehicle* _first_veh_in_depot_list;
 
 /** Adds a vehicle to the list of vehicles, that visited a depot this tick
@@ -614,14 +617,14 @@
  */
 void VehicleEnteredDepotThisTick(Vehicle *v)
 {
-	// we need to set v->leave_depot_instantly as we have no control of it's contents at this time
+	/* we need to set v->leave_depot_instantly as we have no control of it's contents at this time */
 	if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS) && v->current_order.type == OT_GOTO_DEPOT) {
-		// we keep the vehicle in the depot since the user ordered it to stay
+		/* we keep the vehicle in the depot since the user ordered it to stay */
 		v->leave_depot_instantly = false;
 	} else {
-		// the vehicle do not plan on stopping in the depot, so we stop it to ensure that it will not reserve the path
-		// out of the depot before we might autoreplace it to a different engine. The new engine would not own the reserved path
-		// we store that we stopped the vehicle, so autoreplace can start it again
+		/* the vehicle do not plan on stopping in the depot, so we stop it to ensure that it will not reserve the path
+		 * out of the depot before we might autoreplace it to a different engine. The new engine would not own the reserved path
+		 * we store that we stopped the vehicle, so autoreplace can start it again */
 		v->vehstatus |= VS_STOPPED;
 		v->leave_depot_instantly = true;
 	}
@@ -650,8 +653,8 @@
 	Vehicle *v;
 
 #ifdef ENABLE_NETWORK
-	// hotfix for desync problem:
-	//  for MP games invalidate the YAPF cache every tick to keep it exactly the same on the server and all clients
+	/* hotfix for desync problem:
+	 *  for MP games invalidate the YAPF cache every tick to keep it exactly the same on the server and all clients */
 	if (_networking) {
 		YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK);
 	}
@@ -679,7 +682,7 @@
 		}
 	}
 
-	// now we handle all the vehicles that entered a depot this tick
+	/* now we handle all the vehicles that entered a depot this tick */
 	v = _first_veh_in_depot_list;
 	while (v != NULL) {
 		Vehicle *w = v->depot_list;
@@ -695,19 +698,19 @@
 	bool keep_loading = false;
 	const GoodsEntry *ge = GetStation(v->last_station_visited)->goods;
 
-	//special handling of aircraft
-
-	//if the aircraft carries passengers and is NOT full, then
-	//continue loading, no matter how much mail is in
+	/* special handling of aircraft */
+
+	/* if the aircraft carries passengers and is NOT full, then
+	 *continue loading, no matter how much mail is in */
 	if (v->type == VEH_AIRCRAFT &&
 			IsCargoInClass(v->cargo_type, CC_PASSENGERS) &&
 			v->cargo_cap != v->cargo_count) {
 		return true;
 	}
 
-	// patch should return "true" to continue loading, i.e. when there is no cargo type that is fully loaded.
+	/* patch should return "true" to continue loading, i.e. when there is no cargo type that is fully loaded. */
 	do {
-		//Should never happen, but just in case future additions change this
+		/* Should never happen, but just in case future additions change this */
 		assert(v->cargo_type<32);
 
 		if (v->cargo_cap != 0) {
@@ -726,7 +729,7 @@
 		}
 	} while ((v = v->next) != NULL);
 
-	// continue loading if there is a non full cargo type and no cargo type that is full
+	/* continue loading if there is a non full cargo type and no cargo type that is full */
 	return keep_loading || (not_full && (full & ~not_full) == 0);
 }
 
@@ -743,7 +746,7 @@
 				IsTileType(TILE_ADDXY(tile, -2,  0), MP_STATION)
 			))) {
 
-		// If patch is active, use alternative CanFillVehicle-function
+		/* If patch is active, use alternative CanFillVehicle-function */
 		if (_patches.full_load_any && v->current_order.flags & OF_FULL_LOAD) return CanFillVehicle_FullLoadAny(v);
 
 		do {
@@ -821,13 +824,13 @@
 
 void ViewportAddVehicles(DrawPixelInfo *dpi)
 {
-	// The bounding rectangle
+	/* The bounding rectangle */
 	const int l = dpi->left;
 	const int r = dpi->left + dpi->width;
 	const int t = dpi->top;
 	const int b = dpi->top + dpi->height;
 
-	// The hash area to scan
+	/* The hash area to scan */
 	const int xl = GB(l - 70, 7, 6);
 	const int xu = GB(r,      7, 6);
 	const int yl = GB(t - 70, 6, 6) << 6;
@@ -1567,7 +1570,7 @@
 {
 	if (v->owner != _local_player) return;
 
-	// Do not show getting-old message if autorenew is active
+	/* Do not show getting-old message if autorenew is active */
 	if (GetPlayer(v->owner)->engine_renew) return;
 
 	SetDParam(0, _vehicle_type_names[v->type]);
@@ -1599,6 +1602,7 @@
 
 /** Starts or stops a lot of vehicles
  * @param tile Tile of the depot where the vehicles are started/stopped (only used for depots)
+ * @param flags type of operation
  * @param p1 Station/Order/Depot ID (only used for vehicle list windows)
  * @param p2 bitmask
  *   - bit 0-4 Vehicle type
@@ -1665,10 +1669,11 @@
 }
 
 /** Sells all vehicles in a depot
-* @param tile Tile of the depot where the depot is
-* @param p1 Vehicle type
-* @param p2 unused
-*/
+ * @param tile Tile of the depot where the depot is
+ * @param flags type of operation
+ * @param p1 Vehicle type
+ * @param p2 unused
+ */
 int32 CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **engines = NULL;
@@ -1717,10 +1722,11 @@
 }
 
 /** Autoreplace all vehicles in the depot
-* @param tile Tile of the depot where the vehicles are
-* @param p1 Type of vehicle
-* @param p2 Unused
-*/
+ * @param tile Tile of the depot where the vehicles are
+ * @param flags type of operation
+ * @param p1 Type of vehicle
+ * @param p2 Unused
+ */
 int32 CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **vl = NULL;
@@ -1784,6 +1790,7 @@
 
 /** Clone a vehicle. If it is a train, it will clone all the cars too
  * @param tile tile of the depot where the cloned vehicle is build
+ * @param flags type of operation
  * @param p1 the original vehicle's index
  * @param p2 1 = shared orders, else copied orders
  */
@@ -1814,7 +1821,7 @@
 
 	if (v->type == VEH_TRAIN && (!IsFrontEngine(v) || v->u.rail.crash_anim_pos >= 4400)) return CMD_ERROR;
 
-	// check that we can allocate enough vehicles
+	/* check that we can allocate enough vehicles */
 	if (!(flags & DC_EXEC)) {
 		int veh_counter = 0;
 		do {
@@ -1862,11 +1869,11 @@
 			}
 
 			if (v->type == VEH_TRAIN && !IsFrontEngine(v)) {
-				// this s a train car
-				// add this unit to the end of the train
+				/* this s a train car
+				 * add this unit to the end of the train */
 				DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
 			} else {
-				// this is a front engine or not a train. It need orders
+				/* this is a front engine or not a train. It need orders */
 				w_front = w;
 				w->service_interval = v->service_interval;
 				DoCommand(0, (v->index << 16) | w->index, p2 & 1 ? CO_SHARE : CO_COPY, flags, CMD_CLONE_ORDER);
@@ -1876,7 +1883,7 @@
 	} while (v->type == VEH_TRAIN && (v = GetNextVehicle(v)) != NULL);
 
 	if (flags & DC_EXEC && v_front->type == VEH_TRAIN) {
-		// for trains this needs to be the front engine due to the callback function
+		/* for trains this needs to be the front engine due to the callback function */
 		_new_vehicle_id = w_front->index;
 	}
 
@@ -2220,6 +2227,7 @@
 
 /** Give a custom name to your vehicle
  * @param tile unused
+ * @param flags type of operation
  * @param p1 vehicle ID to name
  * @param p2 unused
  */
@@ -2253,6 +2261,7 @@
 
 /** Change the service interval of a vehicle
  * @param tile unused
+ * @param flags type of operation
  * @param p1 vehicle ID that is being service-interval-changed
  * @param p2 new service interval
  */
@@ -2349,27 +2358,27 @@
 
 	switch (v->type) {
 		case VEH_TRAIN:
-			if (v->u.rail.track == TRACK_BIT_DEPOT) /* We'll assume the train is facing outwards */
-				return DiagdirToDiagTrackdir(GetRailDepotDirection(v->tile)); /* Train in depot */
-
-			if (v->u.rail.track == TRACK_BIT_WORMHOLE) /* train in tunnel, so just use his direction and assume a diagonal track */
+			if (v->u.rail.track == TRACK_BIT_DEPOT) // We'll assume the train is facing outwards
+				return DiagdirToDiagTrackdir(GetRailDepotDirection(v->tile)); // Train in depot
+
+			if (v->u.rail.track == TRACK_BIT_WORMHOLE) // train in tunnel, so just use his direction and assume a diagonal track
 				return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
 
 			return TrackDirectionToTrackdir(FindFirstTrack(v->u.rail.track), v->direction);
 
 		case VEH_SHIP:
 			if (IsShipInDepot(v))
-				/* We'll assume the ship is facing outwards */
+				// We'll assume the ship is facing outwards
 				return DiagdirToDiagTrackdir(GetShipDepotDirection(v->tile));
 
 			return TrackDirectionToTrackdir(FindFirstTrack(v->u.ship.state), v->direction);
 
 		case VEH_ROAD:
-			if (IsRoadVehInDepot(v)) /* We'll assume the road vehicle is facing outwards */
+			if (IsRoadVehInDepot(v)) // We'll assume the road vehicle is facing outwards
 				return DiagdirToDiagTrackdir(GetRoadDepotDirection(v->tile));
 
-			if (IsStandardRoadStopTile(v->tile)) /* We'll assume the road vehicle is facing outwards */
-				return DiagdirToDiagTrackdir(GetRoadStopDir(v->tile)); /* Road vehicle in a station */
+			if (IsStandardRoadStopTile(v->tile)) // We'll assume the road vehicle is facing outwards
+				return DiagdirToDiagTrackdir(GetRoadStopDir(v->tile)); // Road vehicle in a station
 
 			if (IsDriveThroughStopTile(v->tile)) return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
 
@@ -2422,16 +2431,16 @@
 		cache = MallocT<bool>(max + 1);
 	}
 
-	// Clear the cache
+	/* Clear the cache */
 	memset(cache, 0, (max + 1) * sizeof(*cache));
 
-	// Fill the cache
+	/* Fill the cache */
 	FOR_ALL_VEHICLES(u) {
 		if (u->type == type && u->owner == _current_player && u->unitnumber != 0 && u->unitnumber <= max)
 			cache[u->unitnumber] = true;
 	}
 
-	// Find the first unused unit number
+	/* Find the first unused unit number */
 	for (unit = 1; unit <= max; unit++) {
 		if (!cache[unit]) break;
 	}
@@ -2562,7 +2571,7 @@
 	return GetEngineColourMap(v->engine_type, v->owner, INVALID_ENGINE, v);
 }
 
-// Save and load of vehicles
+/** Save and load of vehicles */
 extern const SaveLoad _common_veh_desc[] = {
 	    SLE_VAR(Vehicle, subtype,              SLE_UINT8),
 
@@ -2667,7 +2676,7 @@
 	    SLE_REF(Vehicle, next_shared,          REF_VEHICLE),
 	    SLE_REF(Vehicle, prev_shared,          REF_VEHICLE),
 
-	// reserve extra space in savegame here. (currently 10 bytes)
+	/* reserve extra space in savegame here. (currently 10 bytes) */
 	SLE_CONDNULL(10,                                                       2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2686,7 +2695,7 @@
 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, days_since_order_progr), SLE_UINT16, 2, SL_MAX_VERSION),
 
 	SLE_CONDNULL(2, 2, 19),
-	// reserve extra space in savegame here. (currently 11 bytes)
+	/* reserve extra space in savegame here. (currently 11 bytes) */
 	SLE_CONDNULL(11, 2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2706,7 +2715,7 @@
 	SLE_CONDREFX(offsetof(Vehicle, u) + offsetof(VehicleRoad, slot),     REF_ROADSTOPS, 6, SL_MAX_VERSION),
 	SLE_CONDNULL(1,                                                                     6, SL_MAX_VERSION),
 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, slot_age), SLE_UINT8,     6, SL_MAX_VERSION),
-	// reserve extra space in savegame here. (currently 16 bytes)
+	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16,                                                                    2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2717,7 +2726,7 @@
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
 	SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleShip, state), SLE_UINT8),
 
-	// reserve extra space in savegame here. (currently 16 bytes)
+	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2736,7 +2745,7 @@
 
 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, previous_pos),    SLE_UINT8,                 2, SL_MAX_VERSION),
 
-	// reserve extra space in savegame here. (currently 15 bytes)
+	/* reserve extra space in savegame here. (currently 15 bytes) */
 	SLE_CONDNULL(15,                                                                                      2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2768,7 +2777,7 @@
 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleSpecial, unk0), SLE_UINT16),
 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleSpecial, unk2), SLE_UINT8),
 
-	// reserve extra space in savegame here. (currently 16 bytes)
+	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2810,7 +2819,7 @@
 	   SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleDisaster, image_override), SLE_UINT16),
 	   SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleDisaster, unk2),           SLE_UINT16),
 
-	// reserve extra space in savegame here. (currently 16 bytes)
+	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16,                                                 2, SL_MAX_VERSION),
 
 	SLE_END()
@@ -2826,18 +2835,18 @@
 	_disaster_desc,
 };
 
-// Will be called when the vehicles need to be saved.
+/** Will be called when the vehicles need to be saved. */
 static void Save_VEHS()
 {
 	Vehicle *v;
-	// Write the vehicles
+	/* Write the vehicles */
 	FOR_ALL_VEHICLES(v) {
 		SlSetArrayIndex(v->index);
 		SlObject(v, (SaveLoad*)_veh_descs[v->type]);
 	}
 }
 
-// Will be called when vehicles need to be loaded.
+/** Will be called when vehicles need to be loaded. */
 static void Load_VEHS()
 {
 	int index;
--- a/src/vehicle.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/vehicle.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @vehicle.h */
+
 #ifndef VEHICLE_H
 #define VEHICLE_H
 
@@ -108,13 +110,13 @@
 	uint16 crash_anim_pos;
 	uint16 days_since_order_progr;
 
-	// cached values, recalculated on load and each time a vehicle is added to/removed from the consist.
+	/* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */
 	uint16 cached_max_speed;  // max speed of the consist. (minimum of the max speed of all vehicles in the consist)
 	uint32 cached_power;      // total power of the consist.
 	uint8 cached_veh_length;  // length of this vehicle in units of 1/8 of normal length, cached because this can be set by a callback
 	uint16 cached_total_length; ///< Length of the whole train, valid only for first engine.
 
-	// cached values, recalculated when the cargo on a train changes (in addition to the conditions above)
+	/* cached values, recalculated when the cargo on a train changes (in addition to the conditions above) */
 	uint32 cached_weight;     // total weight of the consist.
 	uint32 cached_veh_weight; // weight of the vehicle.
 	uint32 cached_max_te;     // max tractive effort of consist
@@ -127,8 +129,8 @@
 	 */
 	byte cached_vis_effect;
 
-	// NOSAVE: for wagon override - id of the first engine in train
-	// 0xffff == not in train
+	/* NOSAVE: for wagon override - id of the first engine in train
+	 * 0xffff == not in train */
 	EngineID first_engine;
 
 	TrackBitsByte track;
@@ -138,27 +140,27 @@
 
 	byte flags;
 
-	// Link between the two ends of a multiheaded engine
+	/* Link between the two ends of a multiheaded engine */
 	Vehicle *other_multiheaded_part;
 };
 
 enum {
 	VRF_REVERSING         = 0,
 
-	// used to calculate if train is going up or down
+	/* used to calculate if train is going up or down */
 	VRF_GOINGUP           = 1,
 	VRF_GOINGDOWN         = 2,
 
-	// used to store if a wagon is powered or not
+	/* used to store if a wagon is powered or not */
 	VRF_POWEREDWAGON      = 3,
 
-	// used to reverse the visible direction of the vehicle
+	/* used to reverse the visible direction of the vehicle */
 	VRF_REVERSE_DIRECTION = 4,
 
-	// used to mark train as lost because PF can't find the route
+	/* used to mark train as lost because PF can't find the route */
 	VRF_NO_PATH_TO_DESTINATION = 5,
 
-	// used to mark that electric train engine is allowed to run on normal rail
+	/* used to mark that electric train engine is allowed to run on normal rail */
 	VRF_EL_ENGINE_ALLOWED_NORMAL_RAIL = 6,
 };
 
@@ -171,7 +173,7 @@
 };
 
 struct VehicleRoad {
-	byte state;             /// @see RoadVehicleStates
+	byte state;             ///< @see RoadVehicleStates
 	byte frame;
 	uint16 blocked_ctr;
 	byte overtaking;
@@ -210,7 +212,7 @@
 	StringID string_id;      // Displayed string
 
 	UnitID unitnumber;       // unit number, for display purposes only
-	PlayerByte owner;          // which player owns the vehicle?
+	PlayerByte owner;        // which player owns the vehicle?
 
 	TileIndex tile;          // Current tile index
 	TileIndex dest_tile;     // Heading for this tile
@@ -231,9 +233,9 @@
 	int8 y_offs;             // y offset for vehicle sprite
 	EngineID engine_type;
 
-	// for randomized variational spritegroups
-	// bitmask used to resolve them; parts of it get reseeded when triggers
-	// of corresponding spritegroups get matched
+	/* for randomized variational spritegroups
+	 * bitmask used to resolve them; parts of it get reseeded when triggers
+	 * of corresponding spritegroups get matched */
 	byte random_bits;
 	byte waiting_triggers;   // triggers to be yet matched
 
@@ -269,15 +271,15 @@
 	Vehicle *prev_shared;    ///< If not NULL, this points to the prev vehicle that shared the order
 	/* End Order-stuff */
 
-	// Boundaries for the current position in the world and a next hash link.
-	// NOSAVE: All of those can be updated with VehiclePositionChanged()
+	/* Boundaries for the current position in the world and a next hash link.
+	 * NOSAVE: All of those can be updated with VehiclePositionChanged() */
 	int32 left_coord;
 	int32 top_coord;
 	int32 right_coord;
 	int32 bottom_coord;
 	Vehicle *next_hash;
 
-	// Related to age and service time
+	/* Related to age and service time */
 	Date age;     // Age in days
 	Date max_age; // Maximum age
 	Date date_of_last_service;
@@ -492,7 +494,7 @@
 
 /**
  * Check if an index is a vehicle-index (so between 0 and max-vehicles)
- *
+ * @param index of the vehicle to query
  * @return Returns true if the vehicle-id is in range
  */
 static inline bool IsValidVehicleID(uint index)
@@ -513,7 +515,11 @@
 	return order;
 }
 
-/* Returns the last order of a vehicle, or NULL if it doesn't exists */
+/**
+ * Returns the last order of a vehicle, or NULL if it doesn't exists
+ * @param v Vehicle to query
+ * @return last order of a vehicle, if available
+ */
 static inline Order *GetLastVehicleOrder(const Vehicle *v)
 {
 	Order *order = v->orders;
@@ -526,7 +532,10 @@
 	return order;
 }
 
-/* Get the first vehicle of a shared-list, so we only have to walk forwards */
+/** Get the first vehicle of a shared-list, so we only have to walk forwards
+ * @param v Vehicle to query
+ * @return first vehicle of a shared-list
+ */
 static inline Vehicle *GetFirstVehicleFromSharedList(const Vehicle *v)
 {
 	Vehicle *u = (Vehicle *)v;
@@ -535,7 +544,7 @@
 	return u;
 }
 
-// NOSAVE: Return values from various commands.
+/* NOSAVE: Return values from various commands. */
 VARDEF VehicleID _new_vehicle_id;
 VARDEF uint16 _returned_refit_capacity;
 
--- a/src/vehicle_gui.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/vehicle_gui.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file vehicle_gui.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "debug.h"
@@ -162,12 +164,12 @@
 	qsort((void*)v, length, sizeof(v[0]), _vehicle_sorter[0]);
 }
 
-// draw the vehicle profit button in the vehicle list window.
+/** draw the vehicle profit button in the vehicle list window. */
 void DrawVehicleProfitButton(const Vehicle *v, int x, int y)
 {
 	SpriteID pal;
 
-	// draw profit-based colored icons
+	/* draw profit-based colored icons */
 	if (v->age <= 365 * 2) {
 		pal = PALETTE_TO_GREY;
 	} else if (v->profit_last_year < 0) {
@@ -421,6 +423,7 @@
 
 /** Show the refit window for a vehicle
 * @param *v The vehicle to show the refit window for
+* @param order of the vehicle (?)
 */
 void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order)
 {
@@ -466,18 +469,18 @@
 	}
 }
 
-/* Display additional text from NewGRF in the purchase information window */
+/** Display additional text from NewGRF in the purchase information window */
 uint ShowAdditionalText(int x, int y, uint w, EngineID engine)
 {
 	uint16 callback = GetVehicleCallback(CBID_VEHICLE_ADDITIONAL_TEXT, 0, 0, engine, NULL);
 	if (callback == CALLBACK_FAILED) return 0;
 
-	// STR_02BD is used to start the string with {BLACK}
+	/* STR_02BD is used to start the string with {BLACK} */
 	SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
 	return DrawStringMultiLine(x, y, STR_02BD, w);
 }
 
-/* Count the number of bits that are set in a mask */
+/** Count the number of bits that are set in a mask */
 static uint CountBits(uint32 mask)
 {
 	uint c = 0;
@@ -485,7 +488,7 @@
 	return c;
 }
 
-/* Display list of cargo types of the engine, for the purchase information window */
+/** Display list of cargo types of the engine, for the purchase information window */
 uint ShowRefitOptionsList(int x, int y, uint w, EngineID engine)
 {
 	/* List of cargo types of this engine */
@@ -529,7 +532,7 @@
 }
 
 
-// if the sorting criteria had the same value, sort vehicle by unitnumber
+/* if the sorting criteria had the same value, sort vehicle by unitnumber */
 #define VEHICLEUNITNUMBERSORTER(r, a, b) {if (r == 0) {r = a->unitnumber - b->unitnumber;}}
 
 static int CDECL VehicleNumberSorter(const void *a, const void *b)
@@ -1140,7 +1143,7 @@
 			switch (e->we.dropdown.button) {
 				case VLW_WIDGET_SORT_BY_PULLDOWN:
 					if (vl->l.sort_type != e->we.dropdown.index) {
-						// value has changed -> resort
+						/* value has changed -> resort */
 						vl->l.flags |= VL_RESORT;
 						vl->l.sort_type = e->we.dropdown.index;
 						vl->_sorting->criteria = vl->l.sort_type;
--- a/src/vehicle_gui.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/vehicle_gui.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file vehicle_gui.h */
+
 #ifndef VEHICLE_GUI_H
 #define VEHICLE_GUI_H
 
--- a/src/viewport.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/viewport.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -11,6 +11,7 @@
 #include "strings.h"
 #include "table/sprites.h"
 #include "table/strings.h"
+#include "landscape.h"
 #include "map.h"
 #include "viewport.h"
 #include "window.h"
@@ -25,7 +26,7 @@
 
 #define VIEWPORT_DRAW_MEM (65536 * 2)
 
-// XXX - maximum viewports is maximum windows - 2 (main toolbar + status bar)
+/* XXX - maximum viewports is maximum windows - 2 (main toolbar + status bar) */
 static ViewPort _viewports[25 - 2];
 static uint32 _active_viewports;    ///< bitmasked variable where each bit signifies if a viewport is in use or not
 assert_compile(lengthof(_viewports) < sizeof(_active_viewports) * 8);
@@ -91,8 +92,8 @@
 	byte zmax;
 };
 
-// Quick hack to know how much memory to reserve when allocating from the spritelist
-// to prevent a buffer overflow.
+/* Quick hack to know how much memory to reserve when allocating from the spritelist
+ * to prevent a buffer overflow. */
 #define LARGEST_SPRITELIST_STRUCT ParentSpriteToDraw
 
 struct ViewportDrawer {
@@ -397,7 +398,7 @@
 
 /** Update the status of the zoom-buttons according to the zoom-level
  * of the viewport. This will update their status and invalidate accordingly
- * @param window pointer to the window that has the zoom buttons
+ * @param w Window pointer to the window that has the zoom buttons
  * @param vp pointer to the viewport whose zoom-level the buttons represent
  * @param widget_zoom_in widget index for window with zoom-in button
  * @param widget_zoom_out widget index for window with zoom-out button */
@@ -438,7 +439,7 @@
 void DrawGroundSprite(SpriteID image, SpriteID pal)
 {
 	if (_offset_ground_sprites) {
-		// offset ground sprite because of foundation?
+		/* offset ground sprite because of foundation? */
 		AddChildSpriteScreen(image, pal, _cur_vd->offs_x, _cur_vd->offs_y);
 	} else {
 		_added_tile_sprite = true;
@@ -493,12 +494,12 @@
 	ps = (ParentSpriteToDraw*)vd->spritelist_mem;
 
 	if (vd->parent_list >= vd->eof_parent_list) {
-		// This can happen rarely, mostly when you zoom out completely
-		//  and have a lot of stuff that moves (and is added to the
-		//  sort-list, this function). To solve it, increase
-		//  parent_list somewhere below to a higher number.
-		// This can not really hurt you, it just gives some black
-		//  spots on the screen ;)
+		/* This can happen rarely, mostly when you zoom out completely
+		 *  and have a lot of stuff that moves (and is added to the
+		 *  sort-list, this function). To solve it, increase
+		 *  parent_list somewhere below to a higher number.
+		 * This can not really hurt you, it just gives some black
+		 *  spots on the screen ;) */
 		DEBUG(sprite, 0, "Out of sprite memory (parent_list)");
 		return;
 	}
@@ -646,23 +647,23 @@
 	SpriteID image;
 	SpriteID pal;
 
-	// Draw a red error square?
+	/* Draw a red error square? */
 	if (_thd.redsq != 0 && _thd.redsq == ti->tile) {
 		DrawSelectionSprite(SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh], PALETTE_TILE_RED_PULSATING, ti);
 		return;
 	}
 
-	// no selection active?
+	/* no selection active? */
 	if (_thd.drawstyle == 0) return;
 
-	// Inside the inner area?
+	/* Inside the inner area? */
 	if (IS_INSIDE_1D(ti->x, _thd.pos.x, _thd.size.x) &&
 			IS_INSIDE_1D(ti->y, _thd.pos.y, _thd.size.y)) {
 		if (_thd.drawstyle & HT_RECT) {
 			image = SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh];
 			DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : PAL_NONE, ti);
 		} else if (_thd.drawstyle & HT_POINT) {
-			// Figure out the Z coordinate for the single dot.
+			/* Figure out the Z coordinate for the single dot. */
 			byte z = ti->z;
 			if (ti->tileh & SLOPE_N) {
 				z += TILE_HEIGHT;
@@ -670,7 +671,7 @@
 			}
 			DrawGroundSpriteAt(_cur_dpi->zoom != 2 ? SPR_DOT : SPR_DOT_SMALL, PAL_NONE, ti->x, ti->y, z);
 		} else if (_thd.drawstyle & HT_RAIL /*&& _thd.place_mode == VHM_RAIL*/) {
-			// autorail highlight piece under cursor
+			/* autorail highlight piece under cursor */
 			uint type = _thd.drawstyle & 0xF;
 			int offset;
 
@@ -688,7 +689,7 @@
 			DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : pal, ti);
 
 		} else if (IsPartOfAutoLine(ti->x, ti->y)) {
-			// autorail highlighting long line
+			/* autorail highlighting long line */
 			int dir = _thd.drawstyle & ~0xF0;
 			int offset;
 			uint side;
@@ -714,12 +715,12 @@
 		return;
 	}
 
-	// Check if it's inside the outer area?
+	/* Check if it's inside the outer area? */
 	if (_thd.outersize.x &&
 			_thd.size.x < _thd.size.x + _thd.outersize.x &&
 			IS_INSIDE_1D(ti->x, _thd.pos.x + _thd.offs.x, _thd.size.x + _thd.outersize.x) &&
 			IS_INSIDE_1D(ti->y, _thd.pos.y + _thd.offs.y, _thd.size.y + _thd.outersize.y)) {
-		// Draw a blue rect.
+		/* Draw a blue rect. */
 		DrawSelectionSprite(SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh], PALETTE_SEL_TILE_BLUE, ti);
 		return;
 	}
@@ -734,11 +735,11 @@
 
 	_cur_ti = &ti;
 
-	// Transform into tile coordinates and round to closest full tile
+	/* Transform into tile coordinates and round to closest full tile */
 	x = ((vd->dpi.top >> 1) - (vd->dpi.left >> 2)) & ~0xF;
 	y = ((vd->dpi.top >> 1) + (vd->dpi.left >> 2) - 0x10) & ~0xF;
 
-	// determine size of area
+	/* determine size of area */
 	{
 		Point pt = RemapCoords(x, y, 241);
 		width = (vd->dpi.left + vd->dpi.width - pt.x + 95) >> 6;
@@ -1128,7 +1129,7 @@
 					}
 				}
 
-				// Swap the two sprites ps and ps2 using bubble-sort algorithm.
+				/* Swap the two sprites ps and ps2 using bubble-sort algorithm. */
 				psd3 = psd;
 				do {
 					ParentSpriteToDraw* temp = *psd3;
@@ -1193,21 +1194,19 @@
 
 		/* Draw the rectangle if 'tranparent station signs' is off,
 		 * or if we are drawing a general text sign (STR_2806) */
-			if (!(_display_opt & DO_TRANS_SIGNS) || ss->string == STR_2806)
+			if (!HASBIT(_transparent_opt, TO_SIGNS) || ss->string == STR_2806) {
 				DrawFrameRect(
 					x, y, x + w, bottom, ss->color,
-					(_display_opt & DO_TRANS_BUILDINGS) ? FR_TRANSPARENT : FR_NONE
+					HASBIT(_transparent_opt, TO_SIGNS) ? FR_TRANSPARENT : FR_NONE
 				);
+			}
 		}
 
 		SetDParam(0, ss->params[0]);
 		SetDParam(1, ss->params[1]);
 		/* if we didn't draw a rectangle, or if transparant building is on,
 		 * draw the text in the color the rectangle would have */
-		if ((
-					(_display_opt & DO_TRANS_BUILDINGS) ||
-					(_display_opt & DO_TRANS_SIGNS && ss->string != STR_2806)
-				) && ss->width != 0) {
+		if (HASBIT(_transparent_opt, TO_SIGNS) && ss->string != STR_2806 && ss->width != 0) {
 			/* Real colors need the IS_PALETTE_COLOR flag
 			 * otherwise colors from _string_colormap are assumed. */
 			colour = _colour_gradient[ss->color][6] | IS_PALETTE_COLOR;
@@ -1273,8 +1272,8 @@
 	ViewportAddSigns(&vd.dpi);
 	ViewportAddWaypoints(&vd.dpi);
 
-	// This assert should never happen (because the length of the parent_list
-	//  is checked)
+	/* This assert should never happen (because the length of the parent_list
+	 *  is checked) */
 	assert(vd.parent_list <= endof(parent_list));
 
 	if (vd.first_tile != NULL) ViewportDrawTileSprites(vd.first_tile);
@@ -1290,8 +1289,8 @@
 	_cur_dpi = old_dpi;
 }
 
-// Make sure we don't draw a too big area at a time.
-// If we do, the sprite memory will overflow.
+/** Make sure we don't draw a too big area at a time.
+ * If we do, the sprite memory will overflow. */
 static void ViewportDrawChk(const ViewPort *vp, int left, int top, int right, int bottom)
 {
 	if (((bottom - top) * (right - left) << (2 * vp->zoom)) > 180000) {
@@ -1359,20 +1358,20 @@
 		int vx;
 		int vy;
 
-		// Center of the viewport is hot spot
+		/* Center of the viewport is hot spot */
 		x = WP(w,vp_d).scrollpos_x + vp->virtual_width / 2;
 		y = WP(w,vp_d).scrollpos_y + vp->virtual_height / 2;
-		// Convert viewport coordinates to map coordinates
-		// Calculation is scaled by 4 to avoid rounding errors
+		/* Convert viewport coordinates to map coordinates
+		 * Calculation is scaled by 4 to avoid rounding errors */
 		vx = -x + y * 2;
 		vy =  x + y * 2;
-		// clamp to size of map
+		/* clamp to size of map */
 		vx = clamp(vx, 0 * 4, MapMaxX() * TILE_SIZE * 4);
 		vy = clamp(vy, 0 * 4, MapMaxY() * TILE_SIZE * 4);
-		// Convert map coordinates to viewport coordinates
+		/* Convert map coordinates to viewport coordinates */
 		x = (-vx + vy) / 2;
 		y = ( vx + vy) / 4;
-		// Set position
+		/* Set position */
 		WP(w, vp_d).scrollpos_x = x - vp->virtual_width / 2;
 		WP(w, vp_d).scrollpos_y = y - vp->virtual_height / 2;
 
@@ -1859,13 +1858,13 @@
 	_thd.new_outersize.y = sy * TILE_SIZE;
 }
 
-/* returns the best autorail highlight type from map coordinates */
+/** returns the best autorail highlight type from map coordinates */
 static byte GetAutorailHT(int x, int y)
 {
 	return HT_RAIL | _AutorailPiece[x & 0xF][y & 0xF];
 }
 
-// called regular to update tile highlighting in all cases
+/** called regular to update tile highlighting in all cases */
 void UpdateTileSelection()
 {
 	int x1;
@@ -1912,13 +1911,13 @@
 		}
 	}
 
-	// redraw selection
+	/* redraw selection */
 	if (_thd.drawstyle != _thd.new_drawstyle ||
 			_thd.pos.x != _thd.new_pos.x || _thd.pos.y != _thd.new_pos.y ||
 			_thd.size.x != _thd.new_size.x || _thd.size.y != _thd.new_size.y ||
 	    _thd.outersize.x != _thd.new_outersize.x ||
 	    _thd.outersize.y != _thd.new_outersize.y) {
-		// clear the old selection?
+		/* clear the old selection? */
 		if (_thd.drawstyle) SetSelectionTilesDirty();
 
 		_thd.drawstyle = _thd.new_drawstyle;
@@ -1927,12 +1926,12 @@
 		_thd.outersize = _thd.new_outersize;
 		_thd.dirty = 0xff;
 
-		// draw the new selection?
+		/* draw the new selection? */
 		if (_thd.new_drawstyle) SetSelectionTilesDirty();
 	}
 }
 
-// highlighting tiles while only going over them with the mouse
+/** highlighting tiles while only going over them with the mouse */
 void VpStartPlaceSizing(TileIndex tile, int user)
 {
 	_thd.userdata = user;
@@ -1982,7 +1981,7 @@
 	_special_mouse_mode = WSM_PRESIZE;
 }
 
-/* returns information about the 2x1 piece to be build.
+/** returns information about the 2x1 piece to be build.
  * The lower bits (0-3) are the track type. */
 static byte Check2x1AutoRail(int mode)
 {
@@ -2133,7 +2132,7 @@
 
 static const StringID measure_strings_length[] = {STR_NULL, STR_MEASURE_LENGTH, STR_MEASURE_LENGTH_HEIGHTDIFF};
 
-// while dragging
+/** while dragging */
 static void CalcRaildirsDrawstyle(TileHighlightData *thd, int x, int y, int method)
 {
 	HighLightStyle b;
@@ -2384,7 +2383,7 @@
 	_thd.selend.y = y;
 }
 
-// while dragging
+/** while dragging */
 bool VpHandlePlaceSizingDrag()
 {
 	Window *w;
@@ -2394,14 +2393,14 @@
 
 	e.we.place.userdata = _thd.userdata;
 
-	// stop drag mode if the window has been closed
+	/* stop drag mode if the window has been closed */
 	w = FindWindowById(_thd.window_class,_thd.window_number);
 	if (w == NULL) {
 		ResetObjectToPlace();
 		return false;
 	}
 
-	// while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() )
+	/* while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() ) */
 	if (_left_button_down) {
 		e.event = WE_PLACE_DRAG;
 		e.we.place.pt = GetTileBelowCursor();
@@ -2409,8 +2408,8 @@
 		return false;
 	}
 
-	// mouse button released..
-	// keep the selected tool, but reset it to the original mode.
+	/* mouse button released..
+	 * keep the selected tool, but reset it to the original mode. */
 	_special_mouse_mode = WSM_NONE;
 	if (_thd.next_drawstyle == HT_RECT) {
 		_thd.place_mode = VHM_RECT;
@@ -2425,7 +2424,7 @@
 	}
 	SetTileSelectSize(1, 1);
 
-	// and call the mouseup event.
+	/* and call the mouseup event. */
 	e.event = WE_PLACE_MOUSEUP;
 	e.we.place.pt = _thd.selend;
 	e.we.place.tile = TileVirtXY(e.we.place.pt.x, e.we.place.pt.y);
@@ -2446,7 +2445,7 @@
 {
 	Window *w;
 
-	// undo clicking on button
+	/* undo clicking on button */
 	if (_thd.place_mode != 0) {
 		_thd.place_mode = 0;
 		w = FindWindowById(_thd.window_class, _thd.window_number);
--- a/src/viewport.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/viewport.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file viewport.h */
+
 #ifndef VIEWPORT_H
 #define VIEWPORT_H
 
@@ -15,7 +17,7 @@
 
 void SetSelectionRed(bool);
 
-/* viewport.c */
+/* viewport.cpp */
 void InitViewports();
 void DeleteWindowViewport(Window *w);
 void AssignWindowViewport(Window *w, int x, int y,
@@ -74,28 +76,28 @@
 	VPM_SIGNALDIRS      = 6
 };
 
-// viewport highlight mode (for highlighting tiles below cursor)
+/* viewport highlight mode (for highlighting tiles below cursor) */
 enum {
-	VHM_NONE    = 0, // default
-	VHM_RECT    = 1, // rectangle (stations, depots, ...)
-	VHM_POINT   = 2, // point (lower land, raise land, level land, ...)
-	VHM_SPECIAL = 3, // special mode used for highlighting while dragging (and for tunnels/docks)
-	VHM_DRAG    = 4, // dragging items in the depot windows
-	VHM_RAIL    = 5, // rail pieces
+	VHM_NONE    = 0, ///< default
+	VHM_RECT    = 1, ///< rectangle (stations, depots, ...)
+	VHM_POINT   = 2, ///< point (lower land, raise land, level land, ...)
+	VHM_SPECIAL = 3, ///< special mode used for highlighting while dragging (and for tunnels/docks)
+	VHM_DRAG    = 4, ///< dragging items in the depot windows
+	VHM_RAIL    = 5, ///< rail pieces
 };
 
 void VpSelectTilesWithMethod(int x, int y, int method);
 
-// highlighting draw styles
+/* highlighting draw styles */
 typedef byte HighLightStyle;
 enum HighLightStyles {
 	HT_NONE   = 0x00,
 	HT_RECT   = 0x80,
 	HT_POINT  = 0x40,
-	HT_LINE   = 0x20, /* used for autorail highlighting (longer streches)
-	                   * (uses lower bits to indicate direction) */
-	HT_RAIL   = 0x10, /* autorail (one piece)
-	                  * (uses lower bits to indicate direction) */
+	HT_LINE   = 0x20,    ///< used for autorail highlighting (longer streches)
+	                     ///< (uses lower bits to indicate direction)
+	HT_RAIL   = 0x10,    ///< autorail (one piece)
+	                     ///< (uses lower bits to indicate direction)
 	HT_DRAG_MASK = 0xF0, ///< masks the drag-type
 
 	/* lower bits (used with HT_LINE and HT_RAIL):
@@ -138,7 +140,7 @@
 };
 
 
-// common button handler
+/* common button handler */
 bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, int mode, PlaceProc *placeproc);
 
 VARDEF Point _tile_fract_coords;
--- a/src/void_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/void_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file void_map.h */
+
 #ifndef VOID_MAP_H
 #define VOID_MAP_H
 
--- a/src/water_cmd.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/water_cmd.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file water_cmd.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "bridge_map.h"
@@ -9,6 +11,7 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "landscape.h"
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
@@ -47,6 +50,7 @@
 
 /** Build a ship depot.
  * @param tile tile where ship depot is built
+ * @param flags type of operation
  * @param p1 bit 0 depot orientation (Axis)
  * @param p2 unused
  */
@@ -76,7 +80,7 @@
 	ret = DoCommand(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 	if (CmdFailed(ret)) return CMD_ERROR;
 
-	// pretend that we're not making land from the water even though we actually are.
+	/* pretend that we're not making land from the water even though we actually are. */
 	cost = 0;
 
 	depot = AllocateDepot();
@@ -120,25 +124,25 @@
 	return _eco->GetPrice(CEconomy::REMOVE_SHIP_DEPOT);
 }
 
-// build a shiplift
+/** build a shiplift */
 static int32 DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
 {
 	int32 ret;
 	int delta;
 
-	// middle tile
+	/* middle tile */
 	ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 	if (CmdFailed(ret)) return CMD_ERROR;
 
 	delta = TileOffsByDiagDir(dir);
-	// lower tile
+	/* lower tile */
 	ret = DoCommand(tile - delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 	if (CmdFailed(ret)) return CMD_ERROR;
 	if (GetTileSlope(tile - delta, NULL) != SLOPE_FLAT) {
 		return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
 	}
 
-	// upper tile
+	/* upper tile */
 	ret = DoCommand(tile + delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 	if (CmdFailed(ret)) return CMD_ERROR;
 	if (GetTileSlope(tile + delta, NULL) != SLOPE_FLAT) {
@@ -167,7 +171,7 @@
 
 	if (!CheckTileOwnership(tile)) return CMD_ERROR;
 
-	// make sure no vehicle is on the tile.
+	/* make sure no vehicle is on the tile. */
 	if (!EnsureNoVehicle(tile) || !EnsureNoVehicle(tile + delta) || !EnsureNoVehicle(tile - delta))
 		return CMD_ERROR;
 
@@ -190,6 +194,7 @@
 
 /** Builds a lock (ship-lift)
  * @param tile tile where to place the lock
+ * @param flags type of operation
  * @param p1 unused
  * @param p2 unused
  */
@@ -211,6 +216,7 @@
 
 /** Build a piece of canal.
  * @param tile end tile of stretch-dragging
+ * @param flags type of operation
  * @param p1 start tile of stretch-dragging
  * @param p2 ctrl pressed - toggles ocean / canals at sealevel (ocean only allowed in the scenario editor)
  */
@@ -249,7 +255,7 @@
 			return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
 		}
 
-		// can't make water of water!
+		/* can't make water of water! */
 		if (IsTileType(tile, MP_WATER) && (!IsTileOwner(tile, OWNER_WATER) || HASBIT(p2, 0))) continue;
 
 		ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
@@ -282,10 +288,10 @@
 		case WATER_TILE_CLEAR:
 			if (flags & DC_NO_WATER) return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
 
-			// Make sure no vehicle is on the tile
+			/* Make sure no vehicle is on the tile */
 			if (!EnsureNoVehicle(tile)) return CMD_ERROR;
 
-			// Make sure it's not an edge tile.
+			/* Make sure it's not an edge tile. */
 			if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) ||
 					!IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) {
 				return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP);
@@ -299,10 +305,10 @@
 		case WATER_TILE_COAST: {
 			Slope slope = GetTileSlope(tile, NULL);
 
-			// Make sure no vehicle is on the tile
+			/* Make sure no vehicle is on the tile */
 			if (!EnsureNoVehicle(tile)) return CMD_ERROR;
 
-			// Make sure it's not an edge tile.
+			/* Make sure it's not an edge tile. */
 			if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) ||
 					!IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) {
 				return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP);
@@ -325,7 +331,7 @@
 
 			if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
 			if (_current_player == OWNER_WATER) return CMD_ERROR;
-			// move to the middle tile..
+			/* move to the middle tile.. */
 			return RemoveShiplift(tile + ToTileIndexDiff(_shiplift_tomiddle_offs[GetSection(tile)]), flags);
 		}
 
@@ -339,7 +345,7 @@
 	}
 }
 
-// return true if a tile is a water tile.
+/** return true if a tile is a water tile. */
 static bool IsWateredTile(TileIndex tile)
 {
 	switch (GetTileType(tile)) {
@@ -362,12 +368,12 @@
 	}
 }
 
-// draw a canal styled water tile with dikes around
+/** draw a canal styled water tile with dikes around */
 void DrawCanalWater(TileIndex tile)
 {
 	uint wa;
 
-	// determine the edges around with water.
+	/* determine the edges around with water. */
 	wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0;
 	wa += IsWateredTile(TILE_ADDXY(tile, 0, 1)) << 1;
 	wa += IsWateredTile(TILE_ADDXY(tile, 1, 0)) << 2;
@@ -378,25 +384,25 @@
 	if (!(wa & 4)) DrawGroundSprite(SPR_CANALS_BASE + 59, PAL_NONE);
 	if (!(wa & 8)) DrawGroundSprite(SPR_CANALS_BASE + 60, PAL_NONE);
 
-	// right corner
+	/* right corner */
 	switch (wa & 0x03) {
 		case 0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 4, PAL_NONE); break;
 		case 3: if (!IsWateredTile(TILE_ADDXY(tile, -1, 1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 8, PAL_NONE); break;
 	}
 
-	// bottom corner
+	/* bottom corner */
 	switch (wa & 0x06) {
 		case 0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 5, PAL_NONE); break;
 		case 6: if (!IsWateredTile(TILE_ADDXY(tile, 1, 1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 9, PAL_NONE); break;
 	}
 
-	// left corner
+	/* left corner */
 	switch (wa & 0x0C) {
 		case  0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 6, PAL_NONE); break;
 		case 12: if (!IsWateredTile(TILE_ADDXY(tile, 1, -1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 10, PAL_NONE); break;
 	}
 
-	// upper corner
+	/* upper corner */
 	switch (wa & 0x09) {
 		case 0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 7, PAL_NONE); break;
 		case 9: if (!IsWateredTile(TILE_ADDXY(tile, -1, -1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 11, PAL_NONE); break;
@@ -421,7 +427,7 @@
 		SpriteID image = wdts->image + base;
 		SpriteID pal;
 
-		if (_display_opt & DO_TRANS_BUILDINGS) {
+		if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
 		} else {
@@ -524,7 +530,7 @@
 {
 	TileIndex target = TILE_ADD(tile, ToTileIndexDiff(offs[0]));
 
-	// type of this tile mustn't be water already.
+	/* type of this tile mustn't be water already. */
 	if (IsTileType(target, MP_WATER)) return;
 
 	if (TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[1]))) != 0 ||
@@ -534,7 +540,7 @@
 
 	if (TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[3]))) != 0 ||
 			TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[4]))) != 0) {
-		// make coast..
+		/* make coast.. */
 		switch (GetTileType(target)) {
 			case MP_RAILWAY: {
 				TrackBits tracks;
@@ -626,7 +632,7 @@
 			u = v;
 			if (IsFrontEngine(v)) pass = 4; // driver
 
-			// crash all wagons, and count passangers
+			/* crash all wagons, and count passangers */
 			BEGIN_ENUM_WAGONS(v)
 				if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo_count;
 				v->vehstatus |= VS_CRASHED;
@@ -653,7 +659,7 @@
 	}
 }
 
-// called from tunnelbridge_cmd, and by TileLoop_Industry()
+/** called from tunnelbridge_cmd, and by TileLoop_Industry() */
 void TileLoop_Water(TileIndex tile)
 {
 	static const TileIndexDiffC _tile_loop_offs_array[][5] = {
@@ -675,11 +681,10 @@
 			TileLoopWaterHelper(tile, _tile_loop_offs_array[i]);
 		}
 	}
-	// _current_player can be changed by TileLoopWaterHelper.. reset it back
-	//   here
+	/* _current_player can be changed by TileLoopWaterHelper.. reset it back here */
 	_current_player = OWNER_NONE;
 
-	// edges
+	/* edges */
 	if (TileX(tile) == 0 && IS_INT_INSIDE(TileY(tile), 1, MapSizeY() - 3 + 1)) { //NE
 		TileLoopWaterHelper(tile, _tile_loop_offs_array[2]);
 	}
@@ -713,11 +718,11 @@
 		default: return 0;
 	}
 	if (TileX(tile) == 0) {
-		// NE border: remove tracks that connects NE tile edge
+		/* NE border: remove tracks that connects NE tile edge */
 		ts &= ~(TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT);
 	}
 	if (TileY(tile) == 0) {
-		// NW border: remove tracks that connects NW tile edge
+		/* NW border: remove tracks that connects NW tile edge */
 		ts &= ~(TRACK_BIT_Y | TRACK_BIT_LEFT | TRACK_BIT_UPPER);
 	}
 	return ts * 0x101;
--- a/src/water_map.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/water_map.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file water_map.h */
+
 #ifndef WATER_MAP_H
 #define WATER_MAP_H
 
--- a/src/waypoint.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/waypoint.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,11 +1,14 @@
 /* $Id$ */
 
+/** @file waypoint.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 
 #include "command.h"
 #include "functions.h"
 #include "gfx.h"
+#include "landscape.h"
 #include "map.h"
 #include "order.h"
 #include "rail_map.h"
@@ -20,6 +23,7 @@
 #include "vehicle.h"
 #include "yapf/yapf.h"
 #include "date.h"
+#include "newgrf.h"
 
 enum {
 	MAX_WAYPOINTS_PER_TOWN = 64,
@@ -39,7 +43,9 @@
 
 DEFINE_OLD_POOL(Waypoint, Waypoint, WaypointPoolNewBlock, NULL)
 
-/* Create a new waypoint */
+/**
+ * Create a new waypoint
+ * @return a pointer to the newly created Waypoint */
 static Waypoint* AllocateWaypoint()
 {
 	Waypoint *wp;
@@ -63,7 +69,9 @@
 	return NULL;
 }
 
-/* Update the sign for the waypoint */
+/**
+ * Update the sign for the waypoint
+ * @param wp Waypoint to update sign */
 static void UpdateWaypointSign(Waypoint* wp)
 {
 	Point pt = RemapCoords2(TileX(wp->xy) * TILE_SIZE, TileY(wp->xy) * TILE_SIZE);
@@ -71,7 +79,9 @@
 	UpdateViewportSignPos(&wp->sign, pt.x, pt.y - 0x20, STR_WAYPOINT_VIEWPORT);
 }
 
-/* Redraw the sign of a waypoint */
+/**
+ * Redraw the sign of a waypoint
+ * @param wp Waypoint to redraw sign */
 static void RedrawWaypointSign(const Waypoint* wp)
 {
 	MarkAllViewportsDirty(
@@ -81,7 +91,9 @@
 		wp->sign.top + 48);
 }
 
-/* Update all signs */
+/**
+ * Update all signs
+ */
 void UpdateAllWaypointSigns()
 {
 	Waypoint *wp;
@@ -91,7 +103,10 @@
 	}
 }
 
-/* Internal handler to delete a waypoint */
+/**
+ * Internal handler to delete a waypoint
+ * @param wp Waypoint to delete
+ */
 void DestroyWaypoint(Waypoint *wp)
 {
 	RemoveOrderFromAllVehicles(OT_GOTO_WAYPOINT, wp->index);
@@ -101,7 +116,10 @@
 	RedrawWaypointSign(wp);
 }
 
-/* Set the default name for a waypoint */
+/**
+ * Set the default name for a waypoint
+ * @param wp Waypoint to work on
+ */
 static void MakeDefaultWaypointName(Waypoint* wp)
 {
 	Waypoint *local_wp;
@@ -127,7 +145,10 @@
 	wp->town_cn = i;
 }
 
-/* Find a deleted waypoint close to a tile. */
+/**
+ * Find a deleted waypoint close to a tile.
+ * @param tile to search from
+ */
 static Waypoint *FindDeletedWaypointCloseTo(TileIndex tile)
 {
 	Waypoint *wp, *best = NULL;
@@ -162,7 +183,7 @@
 
 		for (i = 0; i < GetNumCustomStations(STAT_CLASS_WAYP); i++) {
 			const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, i);
-			if (statspec != NULL && statspec->grfid == wp->grfid && statspec->localidx == wp->localidx) {
+			if (statspec != NULL && statspec->grffile->grfid == wp->grfid && statspec->localidx == wp->localidx) {
 				wp->stat_id = i;
 				break;
 			}
@@ -173,6 +194,7 @@
 /** Convert existing rail to waypoint. Eg build a waypoint station over
  * piece of rail
  * @param tile tile where waypoint will be built
+ * @param flags type of operation
  * @param p1 graphics for waypoint type, 0 indicates standard graphics
  * @param p2 unused
  *
@@ -230,10 +252,10 @@
 
 		if (statspec != NULL) {
 			wp->stat_id = p1;
-			wp->grfid = statspec->grfid;
+			wp->grfid = statspec->grffile->grfid;
 			wp->localidx = statspec->localidx;
 		} else {
-			// Specified custom graphics do not exist, so use default.
+			/* Specified custom graphics do not exist, so use default. */
 			wp->stat_id = 0;
 			wp->grfid = 0;
 			wp->localidx = 0;
@@ -253,7 +275,9 @@
 	return _eco->GetPrice(CEconomy::BUILD_TRAIN_DEPOT);
 }
 
-/* Daily loop for waypoints */
+/**
+ * Daily loop for waypoints
+ */
 void WaypointsDailyLoop()
 {
 	Waypoint *wp;
@@ -264,7 +288,13 @@
 	}
 }
 
-/* Remove a waypoint */
+/**
+ * Remove a waypoint
+ * @param tile from which to remove waypoint
+ * @param flags type of operation
+ * @param justremove will indicate if it is removed from rail or if rails are removed too
+ * @return cost of operation or error
+ */
 int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
 {
 	Waypoint *wp;
@@ -297,10 +327,13 @@
 	return _eco->GetPrice(CEconomy::REMOVE_TRAIN_DEPOT);
 }
 
-/** Delete a waypoint
+/**
+ * Delete a waypoint
  * @param tile tile where waypoint is to be deleted
+ * @param flags type of operation
  * @param p1 unused
  * @param p2 unused
+ * @return cost of operation or error
  */
 int32 CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -308,10 +341,13 @@
 	return RemoveTrainWaypoint(tile, flags, true);
 }
 
-/** Rename a waypoint.
+/**
+ * Rename a waypoint.
  * @param tile unused
+ * @param flags type of operation
  * @param p1 id of waypoint
  * @param p2 unused
+ * @return cost of operation or error
  */
 int32 CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -349,7 +385,11 @@
 	return 0;
 }
 
-/* This hacks together some dummy one-shot Station structure for a waypoint. */
+/**
+ * This hacks together some dummy one-shot Station structure for a waypoint.
+ * @param tile on which to work
+ * @return pointer to a Station
+ */
 Station *ComposeWaypointStation(TileIndex tile)
 {
 	Waypoint *wp = GetWaypointByTile(tile);
@@ -367,7 +407,13 @@
 	return &stat;
 }
 
-/* Draw a waypoint */
+/**
+ * Draw a waypoint
+ * @param x coordinate
+ * @param y coordinate
+ * @param stat_id station id
+ * @param railtype RailType to use for
+ */
 void DrawWaypointSprite(int x, int y, int stat_id, RailType railtype)
 {
 	x += 33;
@@ -378,7 +424,9 @@
 	}
 }
 
-/* Fix savegames which stored waypoints in their old format */
+/**
+ * Fix savegames which stored waypoints in their old format
+ */
 void FixOldWaypoints()
 {
 	Waypoint *wp;
--- a/src/waypoint.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/waypoint.h	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file waypoint.h */
+
 #ifndef WAYPOINT_H
 #define WAYPOINT_H
 
@@ -28,6 +30,8 @@
 
 /**
  * Check if a Waypoint really exists.
+ * @param wp Waypoint to query
+ * @return the validity of the waypoint
  */
 static inline bool IsValidWaypoint(const Waypoint *wp)
 {
--- a/src/widget.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/widget.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -1,5 +1,7 @@
 /* $Id$ */
 
+/** @file widget.cpp */
+
 #include "stdafx.h"
 #include "openttd.h"
 #include "functions.h"
@@ -52,7 +54,7 @@
 
 	switch (wi->type) {
 		case WWT_SCROLLBAR: {
-			// vertical scroller
+			/* vertical scroller */
 			w->flags4 &= ~WF_HSCROLL;
 			w->flags4 &= ~WF_SCROLL2;
 			mi = wi->top;
@@ -62,7 +64,7 @@
 			break;
 		}
 		case WWT_SCROLL2BAR: {
-			// 2nd vertical scroller
+			/* 2nd vertical scroller */
 			w->flags4 &= ~WF_HSCROLL;
 			w->flags4 |= WF_SCROLL2;
 			mi = wi->top;
@@ -72,7 +74,7 @@
 			break;
 		}
 		case  WWT_HSCROLLBAR: {
-			// horizontal scroller
+			/* horizontal scroller */
 			w->flags4 &= ~WF_SCROLL2;
 			w->flags4 |= WF_HSCROLL;
 			mi = wi->left;
@@ -84,7 +86,7 @@
 		default: return; //this should never happen
 	}
 	if (pos <= mi+9) {
-		// Pressing the upper button?
+		/* Pressing the upper button? */
 		w->flags4 |= WF_SCROLL_UP;
 		if (_scroller_click_timeout == 0) {
 			_scroller_click_timeout = 6;
@@ -92,7 +94,7 @@
 		}
 		_left_button_clicked = false;
 	} else if (pos >= ma-10) {
-		// Pressing the lower button?
+		/* Pressing the lower button? */
 		w->flags4 |= WF_SCROLL_DOWN;
 
 		if (_scroller_click_timeout == 0) {
@@ -102,7 +104,6 @@
 		}
 		_left_button_clicked = false;
 	} else {
-		//
 		Point pt = HandleScrollbarHittest(sb, mi, ma);
 
 		if (pos < pt.x) {
@@ -127,7 +128,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 *w Window to look inside
- * @param  x,y Window client coordinates
+ * @param  x
+ * @param  y Window client coordinates
  * @return A widget index, or -1 if no widget was found.
  */
 int GetWidgetFromPos(const Window *w, int x, int y)
@@ -135,8 +137,8 @@
 	uint index;
 	int found_index = -1;
 
-	// Go through the widgets and check if we find the widget that the coordinate is
-	// inside.
+	/* Go through the widgets and check if we find the widget that the coordinate is
+	 * inside. */
 	for (index = 0; index < w->widget_count; index++) {
 		const Widget *wi = &w->widget[index];
 		if (wi->type == WWT_EMPTY || wi->type == WWT_FRAME) continue;
@@ -294,14 +296,14 @@
 			goto draw_default;
 		}
 
-		// vertical scrollbar
+		/* vertical scrollbar */
 		case WWT_SCROLLBAR: {
 			Point pt;
 			int c1,c2;
 
 			assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere!
 
-			// draw up/down buttons
+			/* draw up/down buttons */
 			clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_UP);
 			DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
 			DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, 0x10);
@@ -313,11 +315,11 @@
 			c1 = _colour_gradient[wi->color&0xF][3];
 			c2 = _colour_gradient[wi->color&0xF][7];
 
-			// draw "shaded" background
+			/* draw "shaded" background */
 			GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c2);
 			GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c1 | (1 << PALETTE_MODIFIER_GREYOUT));
 
-			// draw shaded lines
+			/* draw shaded lines */
 			GfxFillRect(r.left+2, r.top+10, r.left+2, r.bottom-10, c1);
 			GfxFillRect(r.left+3, r.top+10, r.left+3, r.bottom-10, c2);
 			GfxFillRect(r.left+7, r.top+10, r.left+7, r.bottom-10, c1);
@@ -333,7 +335,7 @@
 
 			assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere!
 
-			// draw up/down buttons
+			/* draw up/down buttons */
 			clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_UP | WF_SCROLL2));
 			DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color,  (clicked) ? FR_LOWERED : FR_NONE);
 			DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, 0x10);
@@ -345,11 +347,11 @@
 			c1 = _colour_gradient[wi->color&0xF][3];
 			c2 = _colour_gradient[wi->color&0xF][7];
 
-			// draw "shaded" background
+			/* draw "shaded" background */
 			GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c2);
 			GfxFillRect(r.left, r.top+10, r.right, r.bottom-10, c1 | (1 << PALETTE_MODIFIER_GREYOUT));
 
-			// draw shaded lines
+			/* draw shaded lines */
 			GfxFillRect(r.left+2, r.top+10, r.left+2, r.bottom-10, c1);
 			GfxFillRect(r.left+3, r.top+10, r.left+3, r.bottom-10, c2);
 			GfxFillRect(r.left+7, r.top+10, r.left+7, r.bottom-10, c1);
@@ -360,7 +362,7 @@
 			break;
 		}
 
-		// horizontal scrollbar
+		/* horizontal scrollbar */
 		case WWT_HSCROLLBAR: {
 			Point pt;
 			int c1,c2;
@@ -378,17 +380,17 @@
 			c1 = _colour_gradient[wi->color&0xF][3];
 			c2 = _colour_gradient[wi->color&0xF][7];
 
-			// draw "shaded" background
+			/* draw "shaded" background */
 			GfxFillRect(r.left+10, r.top, r.right-10, r.bottom, c2);
 			GfxFillRect(r.left+10, r.top, r.right-10, r.bottom, c1 | (1 << PALETTE_MODIFIER_GREYOUT));
 
-			// draw shaded lines
+			/* draw shaded lines */
 			GfxFillRect(r.left+10, r.top+2, r.right-10, r.top+2, c1);
 			GfxFillRect(r.left+10, r.top+3, r.right-10, r.top+3, c2);
 			GfxFillRect(r.left+10, r.top+7, r.right-10, r.top+7, c1);
 			GfxFillRect(r.left+10, r.top+8, r.right-10, r.top+8, c2);
 
-			// draw actual scrollbar
+			/* draw actual scrollbar */
 			pt = HandleScrollbarHittest(&w->hscroll, r.left, r.right);
 			DrawFrameRect(pt.x, r.top, pt.y, r.bottom, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == (WF_SCROLL_MIDDLE | WF_HSCROLL) ? FR_LOWERED : FR_NONE);
 
@@ -404,19 +406,19 @@
 			c1 = _colour_gradient[wi->color][3];
 			c2 = _colour_gradient[wi->color][7];
 
-			//Line from upper left corner to start of text
+			/*Line from upper left corner to start of text */
 			GfxFillRect(r.left, r.top+4, r.left+4,r.top+4, c1);
 			GfxFillRect(r.left+1, r.top+5, r.left+4,r.top+5, c2);
 
-			// Line from end of text to upper right corner
+			/* Line from end of text to upper right corner */
 			GfxFillRect(x2, r.top+4, r.right-1,r.top+4,c1);
 			GfxFillRect(x2, r.top+5, r.right-2,r.top+5,c2);
 
-			// Line from upper left corner to bottom left corner
+			/* Line from upper left corner to bottom left corner */
 			GfxFillRect(r.left, r.top+5, r.left, r.bottom-1, c1);
 			GfxFillRect(r.left+1, r.top+6, r.left+1, r.bottom-2, c2);
 
-			//Line from upper right corner to bottom right corner
+			/*Line from upper right corner to bottom right corner */
 			GfxFillRect(r.right-1, r.top+5, r.right-1, r.bottom-2, c1);
 			GfxFillRect(r.right, r.top+4, r.right, r.bottom-1, c2);
 
@@ -501,7 +503,7 @@
 	if (item >= WP(w,dropdown_d).num_items || (HASBIT(WP(w,dropdown_d).disabled_state, item) && !HASBIT(WP(w,dropdown_d).hidden_state, item)) || WP(w,dropdown_d).items[item] == 0)
 		return - 1;
 
-	// Skip hidden items -- +1 for each hidden item before the clicked item.
+	/* Skip hidden items -- +1 for each hidden item before the clicked item. */
 	for (counter = 0; item >= counter; ++counter)
 		if (HASBIT(WP(w,dropdown_d).hidden_state, counter)) item++;
 
--- a/src/win32.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/win32.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -84,7 +84,7 @@
 	MyShowCursor(true);
 	MessageBox(GetActiveWindow(), MB_TO_WIDE(buf), _T("Error!"), MB_ICONSTOP);
 
-// if exception tracker is enabled, we crash here to let the exception handler handle it.
+/* if exception tracker is enabled, we crash here to let the exception handler handle it. */
 #if defined(WIN32_EXCEPTION_TRACKER) && !defined(_DEBUG)
 	if (*buf == '!') {
 		_exception_string = buf;
@@ -747,7 +747,7 @@
 
 bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb)
 {
-	// hectonanoseconds between Windows and POSIX epoch
+	/* hectonanoseconds between Windows and POSIX epoch */
 	static const int64 posix_epoch_hns = 0x019DB1DED53E8000LL;
 	const WIN32_FIND_DATA *fd = &ent->dir->fd;
 
@@ -790,13 +790,13 @@
 	int n = 0;
 
 	do {
-		// skip whitespace
+		/* skip whitespace */
 		while (*line == ' ' || *line == '\t') line++;
 
-		// end?
+		/* end? */
 		if (*line == '\0') break;
 
-		// special handling when quoted
+		/* special handling when quoted */
 		if (*line == '"') {
 			argv[n++] = ++line;
 			while (*line != '"') {
@@ -831,13 +831,13 @@
 	coninfo.dwSize.Y = 500;
 	SetConsoleScreenBufferSize(hand, coninfo.dwSize);
 
-	// redirect unbuffered STDIN, STDOUT, STDERR to the console
+	/* redirect unbuffered STDIN, STDOUT, STDERR to the console */
 #if !defined(__CYGWIN__)
 	*stdout = *_fdopen( _open_osfhandle((intptr_t)hand, _O_TEXT), "w" );
 	*stdin = *_fdopen(_open_osfhandle((intptr_t)GetStdHandle(STD_INPUT_HANDLE), _O_TEXT), "r" );
 	*stderr = *_fdopen(_open_osfhandle((intptr_t)GetStdHandle(STD_ERROR_HANDLE), _O_TEXT), "w" );
 #else
-	// open_osfhandle is not in cygwin
+	/* open_osfhandle is not in cygwin */
 	*stdout = *fdopen(1, "w" );
 	*stdin = *fdopen(0, "r" );
 	*stderr = *fdopen(2, "w" );
@@ -946,6 +946,7 @@
 void DetermineBasePaths(const char *exe)
 {
 	_paths.personal_dir = _paths.game_data_dir = MallocT<char>(MAX_PATH);
+	_paths.second_data_dir = NULL;
 #if defined(UNICODE)
 	TCHAR path[MAX_PATH];
 	GetCurrentDirectory(MAX_PATH - 1, path);
@@ -962,8 +963,8 @@
  * 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
- * @return Return true on successfull change of Textbuf, or false otherwise
+ * @param tb Textbuf type to be changed
+ * @return true on successfull change of Textbuf, or false otherwise
  */
 bool InsertTextBufferClipboard(Textbuf *tb)
 {
@@ -1036,8 +1037,8 @@
 }
 
 
-// Utility function to get the current timestamp in milliseconds
-// Useful for profiling
+/** Utility function to get the current timestamp in milliseconds
+ * Useful for profiling */
 int64 GetTS()
 {
 	static double freq;
--- a/src/window.cpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/window.cpp	Tue Jun 12 11:56:35 2007 +0000
@@ -18,7 +18,7 @@
 #include "genworld.h"
 #include "helpers.hpp"
 
-// delta between mouse cursor and upper left corner of dragged window
+/* delta between mouse cursor and upper left corner of dragged window */
 static Point _drag_delta;
 
 static Window _windows[25];
@@ -101,7 +101,7 @@
 
 	if (w->desc_flags & WDF_DEF_WIDGET) {
 		e.we.click.widget = GetWidgetFromPos(w, x, y);
-		if (e.we.click.widget < 0) return; /* exit if clicked outside of widgets */
+		if (e.we.click.widget < 0) return; // exit if clicked outside of widgets
 
 		/* don't allow any interaction if the button has been disabled */
 		if (IsWindowWidgetDisabled(w, e.we.click.widget)) return;
@@ -157,7 +157,7 @@
 	if (w->desc_flags & WDF_STD_TOOLTIPS) {
 		e.we.click.widget = GetWidgetFromPos(w, x, y);
 		if (e.we.click.widget < 0)
-			return; /* exit if clicked outside of widgets */
+			return; // exit if clicked outside of widgets
 
 		if (w->widget[e.we.click.widget].tooltips != 0) {
 			GuiShowTooltips(w->widget[e.we.click.widget].tooltips);
@@ -291,8 +291,8 @@
 }
 
 /** Find the Window whose parent pointer points to this window
- * @parent w Window to find child of
- * @return return a Window pointer that is the child of w, or NULL otherwise */
+ * @param w parent Window to find child of
+ * @return a Window pointer that is the child of w, or NULL otherwise */
 static Window *FindChildWindow(const Window *w)
 {
 	Window* const *wz;
@@ -306,7 +306,9 @@
 }
 
 /** Find the z-value of a window. A window must already be open
- * or the behaviour is undefined but function should never fail */
+ * or the behaviour is undefined but function should never fail
+ * @param w window to query Z Position
+ * @return the window that matches it */
 Window **FindWindowZPosition(const Window *w)
 {
 	Window **wz;
@@ -441,8 +443,9 @@
 static void BringWindowToFront(const Window *w);
 
 /** Find a window and make it the top-window on the screen. The window
- * gets a white border for a brief period of time to visualize its
- * "activation"
+ * gets a white border for a brief period of time to visualize its "activation"
+ * @param cls WindowClass of the window to activate
+ * @param number WindowNumber of the window to activate
  * @return a pointer to the window thus activated */
 Window *BringWindowToFrontById(WindowClass cls, WindowNumber number)
 {
@@ -535,7 +538,9 @@
 	return (w->original_widget == widget);
 }
 
-/* Copies 'widget' to 'w->widget' to allow for resizable windows */
+/** Copies 'widget' to 'w->widget' to allow for resizable windows
+ * @param w Window on which to attach the widget array
+ * @param widget pointer of widget array to fill the window with */
 void AssignWidgetToWindow(Window *w, const Widget *widget)
 {
 	w->original_widget = widget;
@@ -577,12 +582,20 @@
 	return NULL;
 }
 
-/* Open a new window.
+/** Open a new window.
  * This function is called from AllocateWindow() or AllocateWindowDesc()
  * See descriptions for those functions for usage
  * See AllocateWindow() for description of arguments.
  * Only addition here is window_number, which is the window_number being assigned to the new window
- */
+ * @param x offset in pixels from the left of the screen
+ * @param y offset in pixels from the top of the screen
+ * @param width width in pixels of the window
+ * @param height height in pixels of the window
+ * @param *proc see WindowProc function to call when any messages/updates happen to the window
+ * @param cls see WindowClass class of the window, used for identification and grouping
+ * @param *widget see Widget pointer to the window layout and various elements
+ * @param window_number number being assigned to the new window
+ * @return Window pointer of the newly created window */
 static Window *LocalAllocateWindow(
 							int x, int y, int width, int height,
 							WindowProc *proc, WindowClass cls, const Widget *widget, int window_number)
@@ -596,7 +609,7 @@
 		DeleteWindow(w);
 	}
 
-	// Set up window properties
+	/* Set up window properties */
 	memset(w, 0, sizeof(*w));
 	w->window_class = cls;
 	w->flags4 = WF_WHITE_BORDER_MASK; // just opened windows have a white border
@@ -653,11 +666,10 @@
  * @param y offset in pixels from the top of the screen
  * @param width width in pixels of the window
  * @param height height in pixels of the window
- * @param *proc @see WindowProc function to call when any messages/updates happen to the window
- * @param cls @see WindowClass class of the window, used for identification and grouping
- * @param *widget @see Widget pointer to the window layout and various elements
- * @return @see Window pointer of the newly created window
- */
+ * @param *proc see WindowProc function to call when any messages/updates happen to the window
+ * @param cls see WindowClass class of the window, used for identification and grouping
+ * @param *widget see Widget pointer to the window layout and various elements
+ * @return Window pointer of the newly created window */
 Window *AllocateWindow(
 							int x, int y, int width, int height,
 							WindowProc *proc, WindowClass cls, const Widget *widget)
@@ -685,7 +697,7 @@
 	if (left < 0 || top < 22 || right > _screen.width || bottom > _screen.height)
 		return false;
 
-	// Make sure it is not obscured by any window.
+	/* Make sure it is not obscured by any window. */
 	FOR_ALL_WINDOWS(wz) {
 		const Window *w = *wz;
 		if (w->window_class == WC_MAIN_WINDOW) continue;
@@ -714,7 +726,7 @@
 	if (left < -(width>>2) || left > _screen.width - (width>>1)) return false;
 	if (top < 22 || top > _screen.height - (height>>2)) return false;
 
-	// Make sure it is not obscured by any window.
+	/* Make sure it is not obscured by any window. */
 	FOR_ALL_WINDOWS(wz) {
 		const Window *w = *wz;
 		if (w->window_class == WC_MAIN_WINDOW) continue;
@@ -852,7 +864,7 @@
 /**
  * Open a new window.
  * @param *desc The pointer to the WindowDesc to be created
- * @return @see Window pointer of the newly created window
+ * @return Window pointer of the newly created window
  */
 Window *AllocateWindowDesc(const WindowDesc *desc)
 {
@@ -863,7 +875,7 @@
  * Open a new window.
  * @param *desc The pointer to the WindowDesc to be created
  * @param window_number the window number of the new window
- * @return @see Window pointer of the newly created window
+ * @return see Window pointer of the newly created window
  */
 Window *AllocateWindowDescFront(const WindowDesc *desc, int window_number)
 {
@@ -876,6 +888,8 @@
 
 /** Do a search for a window at specific coordinates. For this we start
  * at the topmost window, obviously and work our way down to the bottom
+ * @param x position x to query
+ * @param y position y to query
  * @return a pointer to the found window if any, NULL otherwise */
 Window *FindWindowFromPt(int x, int y)
 {
@@ -936,7 +950,7 @@
 
 	for (wz = _last_z_window; wz != _z_windows;) {
 		w = *--wz;
-		// Unclick scrollbar buttons if they are pressed.
+		/* Unclick scrollbar buttons if they are pressed. */
 		if (w->flags4 & (WF_SCROLL_DOWN | WF_SCROLL_UP)) {
 			w->flags4 &= ~(WF_SCROLL_DOWN | WF_SCROLL_UP);
 			SetWindowDirty(w);
@@ -993,7 +1007,7 @@
 	ResetObjectToPlace();
 
 	if (w != NULL) {
-		// send an event in client coordinates.
+		/* send an event in client coordinates. */
 		e.event = WE_DRAGDROP;
 		e.we.dragdrop.pt.x = _cursor.pos.x - w->left;
 		e.we.dragdrop.pt.y = _cursor.pos.y - w->top;
@@ -1038,7 +1052,7 @@
 
 	w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
 
-	// We changed window, put a MOUSEOVER event to the last window
+	/* We changed window, put a MOUSEOVER event to the last window */
 	if (last_w != NULL && last_w != w) {
 		e.event = WE_MOUSEOVER;
 		e.we.mouseover.pt.x = -1;
@@ -1048,7 +1062,7 @@
 	last_w = w;
 
 	if (w != NULL) {
-		// send an event in client coordinates.
+		/* send an event in client coordinates. */
 		e.event = WE_MOUSEOVER;
 		e.we.mouseover.pt.x = _cursor.pos.x - w->left;
 		e.we.mouseover.pt.y = _cursor.pos.y - w->top;
@@ -1058,7 +1072,7 @@
 		w->wndproc(w, &e);
 	}
 
-	// Mouseover never stops execution
+	/* Mouseover never stops execution */
 	return true;
 }
 
@@ -1117,10 +1131,10 @@
 static bool HandleWindowDragging()
 {
 	Window* const *wz;
-	// Get out immediately if no window is being dragged at all.
+	/* Get out immediately if no window is being dragged at all. */
 	if (!_dragging_window) return true;
 
-	// Otherwise find the window...
+	/* Otherwise find the window... */
 	FOR_ALL_WINDOWS(wz) {
 		Window *w = *wz;
 
@@ -1132,7 +1146,7 @@
 			int nx;
 			int ny;
 
-			// Stop the dragging if the left mouse button was released
+			/* Stop the dragging if the left mouse button was released */
 			if (!_left_button_down) {
 				w->flags4 &= ~WF_DRAGGING;
 				break;
@@ -1158,14 +1172,14 @@
 					if (v == w) continue; // Don't snap at yourself
 
 					if (y + w->height > v->top && y < v->top + v->height) {
-						// Your left border <-> other right border
+						/* Your left border <-> other right border */
 						delta = abs(v->left + v->width - x);
 						if (delta <= hsnap) {
 							nx = v->left + v->width;
 							hsnap = delta;
 						}
 
-						// Your right border <-> other left border
+						/* Your right border <-> other left border */
 						delta = abs(v->left - x - w->width);
 						if (delta <= hsnap) {
 							nx = v->left - w->width;
@@ -1174,14 +1188,14 @@
 					}
 
 					if (w->top + w->height >= v->top && w->top <= v->top + v->height) {
-						// Your left border <-> other left border
+						/* Your left border <-> other left border */
 						delta = abs(v->left - x);
 						if (delta <= hsnap) {
 							nx = v->left;
 							hsnap = delta;
 						}
 
-						// Your right border <-> other right border
+						/* Your right border <-> other right border */
 						delta = abs(v->left + v->width - x - w->width);
 						if (delta <= hsnap) {
 							nx = v->left + v->width - w->width;
@@ -1190,14 +1204,14 @@
 					}
 
 					if (x + w->width > v->left && x < v->left + v->width) {
-						// Your top border <-> other bottom border
+						/* Your top border <-> other bottom border */
 						delta = abs(v->top + v->height - y);
 						if (delta <= vsnap) {
 							ny = v->top + v->height;
 							vsnap = delta;
 						}
 
-						// Your bottom border <-> other top border
+						/* Your bottom border <-> other top border */
 						delta = abs(v->top - y - w->height);
 						if (delta <= vsnap) {
 							ny = v->top - w->height;
@@ -1206,14 +1220,14 @@
 					}
 
 					if (w->left + w->width >= v->left && w->left <= v->left + v->width) {
-						// Your top border <-> other top border
+						/* Your top border <-> other top border */
 						delta = abs(v->top - y);
 						if (delta <= vsnap) {
 							ny = v->top;
 							vsnap = delta;
 						}
 
-						// Your bottom border <-> other bottom border
+						/* Your bottom border <-> other bottom border */
 						delta = abs(v->top + v->height - y - w->height);
 						if (delta <= vsnap) {
 							ny = v->top + v->height - w->height;
@@ -1223,12 +1237,12 @@
 				}
 			}
 
-			// Make sure the window doesn't leave the screen
-			// 13 is the height of the title bar
+			/* Make sure the window doesn't leave the screen
+			 * 13 is the height of the title bar */
 			nx = clamp(nx, 13 - t->right, _screen.width - 13 - t->left);
 			ny = clamp(ny, 0, _screen.height - 13);
 
-			// Make sure the title bar isn't hidden by behind the main tool bar
+			/* Make sure the title bar isn't hidden by behind the main tool bar */
 			v = FindWindowById(WC_MAIN_TOOLBAR, 0);
 			if (v != NULL) {
 				int v_bottom = v->top + v->height;
@@ -1345,15 +1359,15 @@
 	int pos;
 	Scrollbar *sb;
 
-	// Get out quickly if no item is being scrolled
+	/* Get out quickly if no item is being scrolled */
 	if (!_scrolling_scrollbar) return true;
 
-	// Find the scrolling window
+	/* Find the scrolling window */
 	FOR_ALL_WINDOWS(wz) {
 		Window *w = *wz;
 
 		if (w->flags4 & WF_SCROLL_MIDDLE) {
-			// Abort if no button is clicked any more.
+			/* Abort if no button is clicked any more. */
 			if (!_left_button_down) {
 				w->flags4 &= ~WF_SCROLL_MIDDLE;
 				SetWindowDirty(w);
@@ -1371,7 +1385,7 @@
 				i = _cursor.pos.y - _cursorpos_drag_start.y;
 			}
 
-			// Find the item we want to move to and make sure it's inside bounds.
+			/* Find the item we want to move to and make sure it's inside bounds. */
 			pos = min(max(0, i + _scrollbar_start_pos) * sb->count / _scrollbar_size, max(0, sb->count - sb->cap));
 			if (pos != sb->pos) {
 				sb->pos = pos;
@@ -1482,7 +1496,7 @@
 }
 
 /** Send a message from one window to another. The receiving window is found by
- * @param w @see Window pointer pointing to the other window
+ * @param w Window pointer pointing to the other window
  * @param msg Specifies the message to be sent
  * @param wparam Specifies additional message-specific information
  * @param lparam Specifies additional message-specific information
@@ -1500,8 +1514,8 @@
 }
 
 /** Send a message from one window to another. The receiving window is found by
- * @param wnd_class @see WindowClass class AND
- * @param wnd_num @see WindowNumber number, mostly 0
+ * @param wnd_class see WindowClass class AND
+ * @param wnd_num see WindowNumber number, mostly 0
  * @param msg Specifies the message to be sent
  * @param wparam Specifies additional message-specific information
  * @param lparam Specifies additional message-specific information
@@ -1514,7 +1528,7 @@
 
 /** Send a message from one window to another. The message will be sent
  * to ALL windows of the windowclass specified in the first parameter
- * @param wnd_class @see WindowClass class
+ * @param wnd_class see WindowClass class
  * @param msg Specifies the message to be sent
  * @param wparam Specifies additional message-specific information
  * @param lparam Specifies additional message-specific information
@@ -1551,13 +1565,13 @@
 	*/
 	if (!IsGeneratingWorld()) _current_player = _local_player;
 
-	// Setup event
+	/* Setup event */
 	e.event = WE_KEYPRESS;
 	e.we.keypress.key     = GB(key,  0, 16);
 	e.we.keypress.keycode = GB(key, 16, 16);
 	e.we.keypress.cont = true;
 
-	// check if we have a query string window open before allowing hotkeys
+	/* check if we have a query string window open before allowing hotkeys */
 	if (FindWindowById(WC_QUERY_STRING,       0) != NULL ||
 			FindWindowById(WC_SEND_NETWORK_MSG,   0) != NULL ||
 			FindWindowById(WC_GENERATE_LANDSCAPE, 0) != NULL ||
@@ -1566,11 +1580,11 @@
 		query_open = true;
 	}
 
-	// Call the event, start with the uppermost window.
+	/* Call the event, start with the uppermost window. */
 	for (wz = _last_z_window; wz != _z_windows;) {
 		Window *w = *--wz;
 
-		// if a query window is open, only call the event for certain window types
+		/* if a query window is open, only call the event for certain window types */
 		if (query_open &&
 				w->window_class != WC_QUERY_STRING &&
 				w->window_class != WC_SEND_NETWORK_MSG &&
@@ -1585,7 +1599,7 @@
 
 	if (e.we.keypress.cont) {
 		Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0);
-		// When there is no toolbar w is null, check for that
+		/* When there is no toolbar w is null, check for that */
 		if (w != NULL) w->wndproc(w, &e);
 	}
 }
@@ -1616,7 +1630,7 @@
 		if (vp != NULL) {
 			x -= vp->left;
 			y -= vp->top;
-			//here allows scrolling in both x and y axis
+			/* here allows scrolling in both x and y axis */
 #define scrollspeed 3
 			if (x - 15 < 0) {
 				WP(w, vp_d).scrollpos_x += (x - 15) * scrollspeed << vp->zoom;
@@ -1685,7 +1699,7 @@
 			case 1:
 				DEBUG(misc, 2, "Cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite);
 				if (_thd.place_mode != 0 &&
-						// query button and place sign button work in pause mode
+						/* query button and place sign button work in pause mode */
 						_cursor.sprite != SPR_CURSOR_QUERY &&
 						_cursor.sprite != SPR_CURSOR_SIGN &&
 						_pause_game != 0 &&
@@ -1736,7 +1750,7 @@
 	 */
 	if (!IsGeneratingWorld()) _current_player = _local_player;
 
-	// Mouse event?
+	/* Mouse event? */
 	click = 0;
 	if (_left_button_down && !_left_button_clicked) {
 		_left_button_clicked = true;
@@ -1793,7 +1807,7 @@
 		if ((*wz)->viewport != NULL) UpdateViewportPosition(*wz);
 	}
 	DrawTextMessage();
-	// Redraw mouse cursor in case it was hidden
+	/* Redraw mouse cursor in case it was hidden */
 	DrawMouseCursor();
 }
 
@@ -1910,7 +1924,7 @@
 	}
 }
 
-/* It is possible that a stickied window gets to a position where the
+/** It is possible that a stickied window gets to a position where the
  * 'close' button is outside the gaming area. You cannot close it then; except
  * with this function. It closes all windows calling the standard function,
  * then, does a little hacked loop of closing all stickied windows. Note
@@ -1934,7 +1948,7 @@
 	}
 }
 
-/* Delete all always on-top windows to get an empty screen */
+/** Delete all always on-top windows to get an empty screen */
 void HideVitalWindows()
 {
 	DeleteWindowById(WC_TOOLBAR_MENU, 0);
--- a/src/window.h	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/window.h	Tue Jun 12 11:56:35 2007 +0000
@@ -659,7 +659,7 @@
  * Sets the lowered/raised status of a widget.
  * @param w : Window on which the widget is located
  * @param widget_index : index of this widget in the window
- * @param hidden_stat : status to use ie: lowered = true, raised = false
+ * @param lowered_stat : status to use ie: lowered = true, raised = false
  */
 static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, bool lowered_stat)
 {
--- a/src/yapf/yapf.hpp	Thu Apr 19 14:48:10 2007 +0000
+++ b/src/yapf/yapf.hpp	Tue Jun 12 11:56:35 2007 +0000
@@ -17,6 +17,7 @@
 #include "../vehicle.h"
 #include "../date.h"
 #include "../functions.h"
+#include "../landscape.h"
 #include "yapf.h"
 #include "../pathfind.h"
 #include "../waypoint.h"