(svn r11669) -Codechange: refactor tile.h -> tile_type.h and tile_map.h
authorrubidium
Wed, 19 Dec 2007 23:26:02 +0000
changeset 8604 8afdd9877afd
parent 8603 88c5ce6a5215
child 8605 b1f538188811
(svn r11669) -Codechange: refactor tile.h -> tile_type.h and tile_map.h
projects/openttd.vcproj
projects/openttd_vs80.vcproj
projects/openttd_vs90.vcproj
source.list
src/ai/default/default.cpp
src/ai/trolly/build.cpp
src/ai/trolly/pathfinder.cpp
src/ai/trolly/trolly.cpp
src/aircraft_cmd.cpp
src/bridge_map.h
src/clear_cmd.cpp
src/clear_map.h
src/command.cpp
src/depot.cpp
src/depot.h
src/disaster_cmd.cpp
src/dock_gui.cpp
src/elrail.cpp
src/genworld_gui.cpp
src/gui.h
src/industry_cmd.cpp
src/industry_map.h
src/landscape.cpp
src/main_gui.cpp
src/map.h
src/misc_gui.cpp
src/newgrf_canal.cpp
src/newgrf_commons.cpp
src/newgrf_house.cpp
src/npf.cpp
src/npf.h
src/openttd.cpp
src/openttd.h
src/order_gui.cpp
src/pathfind.cpp
src/players.cpp
src/rail.h
src/rail_cmd.cpp
src/rail_gui.cpp
src/rail_map.h
src/road_cmd.cpp
src/road_gui.cpp
src/road_map.h
src/roadveh_cmd.cpp
src/ship_cmd.cpp
src/slope.h
src/slope_func.h
src/slope_type.h
src/smallmap_gui.cpp
src/station.cpp
src/station.h
src/station_cmd.cpp
src/terraform_gui.cpp
src/tgp.cpp
src/tile.cpp
src/tile.h
src/tile_map.cpp
src/tile_map.h
src/tile_type.h
src/town_cmd.cpp
src/town_map.h
src/track_func.h
src/train_cmd.cpp
src/tree_cmd.cpp
src/tunnel_map.cpp
src/tunnel_map.h
src/tunnelbridge_cmd.cpp
src/tunnelbridge_map.h
src/unmovable_cmd.cpp
src/vehicle.cpp
src/vehicle.h
src/vehicle_type.h
src/void_map.h
src/water.h
src/water_cmd.cpp
src/waypoint.cpp
src/yapf/track_dir.hpp
--- a/projects/openttd.vcproj	Wed Dec 19 20:45:46 2007 +0000
+++ b/projects/openttd.vcproj	Wed Dec 19 23:26:02 2007 +0000
@@ -372,7 +372,7 @@
 				RelativePath=".\..\src\thread.cpp">
 			</File>
 			<File
-				RelativePath=".\..\src\tile.cpp">
+				RelativePath=".\..\src\tile_map.cpp">
 			</File>
 			<File
 				RelativePath=".\..\src\vehicle.cpp">
--- a/projects/openttd_vs80.vcproj	Wed Dec 19 20:45:46 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Wed Dec 19 23:26:02 2007 +0000
@@ -728,7 +728,7 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\tile.cpp"
+				RelativePath=".\..\src\tile_map.cpp"
 				>
 			</File>
 			<File
--- a/projects/openttd_vs90.vcproj	Wed Dec 19 20:45:46 2007 +0000
+++ b/projects/openttd_vs90.vcproj	Wed Dec 19 23:26:02 2007 +0000
@@ -725,7 +725,7 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\tile.cpp"
+				RelativePath=".\..\src\tile_map.cpp"
 				>
 			</File>
 			<File
--- a/source.list	Wed Dec 19 20:45:46 2007 +0000
+++ b/source.list	Wed Dec 19 23:26:02 2007 +0000
@@ -75,7 +75,7 @@
 texteff.cpp
 tgp.cpp
 thread.cpp
-tile.cpp
+tile_map.cpp
 #if WIN32
 #else
 	#if WINCE
--- a/src/ai/default/default.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/ai/default/default.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -11,7 +11,6 @@
 #include "../../road_map.h"
 #include "../../roadveh.h"
 #include "../../station_map.h"
-#include "../../tile.h"
 #include "../../player.h"
 #include "../../tunnel_map.h"
 #include "../../vehicle.h"
--- a/src/ai/trolly/build.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/ai/trolly/build.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -6,7 +6,6 @@
 #include "../../functions.h"
 #include "../../map.h"
 #include "../../road_map.h"
-#include "../../tile.h"
 #include "../../vehicle.h"
 #include "../../command.h"
 #include "trolly.h"
--- a/src/ai/trolly/pathfinder.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/ai/trolly/pathfinder.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -6,7 +6,6 @@
 #include "../../debug.h"
 #include "../../functions.h"
 #include "../../map.h"
-#include "../../tile.h"
 #include "../../command.h"
 #include "trolly.h"
 #include "../../depot.h"
--- a/src/ai/trolly/trolly.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/ai/trolly/trolly.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -25,7 +25,6 @@
 #include "../../station_map.h"
 #include "table/strings.h"
 #include "../../map.h"
-#include "../../tile.h"
 #include "../../command.h"
 #include "trolly.h"
 #include "../../town.h"
--- a/src/aircraft_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/aircraft_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -13,7 +13,6 @@
 #include "strings.h"
 #include "table/strings.h"
 #include "map.h"
-#include "tile.h"
 #include "vehicle.h"
 #include "timetable.h"
 #include "depot.h"
--- a/src/bridge_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/bridge_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "map.h"
 #include "rail_type.h"
 #include "road_map.h"
-#include "tile.h"
 
 
 /**
--- a/src/clear_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/clear_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "functions.h"
 #include "map.h"
 #include "player.h"
-#include "tile.h"
 #include "viewport.h"
 #include "command.h"
 #include "tunnel_map.h"
--- a/src/clear_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/clear_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -6,7 +6,6 @@
 #define CLEAR_MAP_H
 
 #include "macros.h"
-#include "tile.h"
 #include "bridge_map.h"
 
 /**
--- a/src/command.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/command.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -9,6 +9,7 @@
 #include "functions.h"
 #include "landscape.h"
 #include "map.h"
+#include "tile_map.h"
 #include "gui.h"
 #include "command.h"
 #include "player.h"
@@ -16,7 +17,6 @@
 #include "variables.h"
 #include "genworld.h"
 #include "newgrf_storage.h"
-#include "tile.h"
 
 const char *_cmd_text = NULL;
 
--- a/src/depot.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/depot.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -8,7 +8,6 @@
 #include "depot.h"
 #include "functions.h"
 #include "landscape.h"
-#include "tile.h"
 #include "map.h"
 #include "table/strings.h"
 #include "saveload.h"
--- a/src/depot.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/depot.h	Wed Dec 19 23:26:02 2007 +0000
@@ -7,7 +7,6 @@
 
 #include "direction_type.h"
 #include "oldpool.h"
-#include "tile.h"
 #include "variables.h"
 #include "road_map.h"
 #include "rail_map.h"
--- a/src/disaster_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/disaster_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -25,7 +25,6 @@
 #include "table/strings.h"
 #include "strings.h"
 #include "map.h"
-#include "tile.h"
 #include "vehicle.h"
 #include "command.h"
 #include "news.h"
--- a/src/dock_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/dock_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -8,6 +8,7 @@
 #include "table/strings.h"
 #include "functions.h"
 #include "map.h"
+#include "tile_map.h"
 #include "station.h"
 #include "gui.h"
 #include "window_gui.h"
--- a/src/elrail.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/elrail.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -48,7 +48,6 @@
 #include "stdafx.h"
 #include "openttd.h"
 #include "station_map.h"
-#include "tile.h"
 #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 */
--- a/src/genworld_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/genworld_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -12,7 +12,6 @@
 #include "window_gui.h"
 #include "textbuf_gui.h"
 #include "gfx.h"
-#include "tile.h"
 #include "strings.h"
 #include "gfxinit.h"
 #include "player.h"
--- a/src/gui.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/gui.h	Wed Dec 19 23:26:02 2007 +0000
@@ -9,7 +9,7 @@
 #include "window_type.h"
 #include "rail_type.h"
 #include "road_type.h"
-#include "vehicle.h"
+#include "vehicle_type.h"
 
 /* main_gui.cpp */
 void CcPlaySound10(bool success, TileIndex tile, uint32 p1, uint32 p2);
--- a/src/industry_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/industry_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -12,7 +12,6 @@
 #include "strings.h"
 #include "table/sprites.h"
 #include "map.h"
-#include "tile.h"
 #include "train.h"
 #include "landscape.h"
 #include "viewport.h"
--- a/src/industry_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/industry_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -7,7 +7,7 @@
 
 #include "industry.h"
 #include "macros.h"
-#include "tile.h"
+#include "tile_map.h"
 
 
 
--- a/src/landscape.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/landscape.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -11,7 +11,6 @@
 #include "player.h"
 #include "spritecache.h"
 #include "table/sprites.h"
-#include "tile.h"
 #include <stdarg.h>
 #include "viewport.h"
 #include "command.h"
--- a/src/main_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/main_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -13,7 +13,6 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "map.h"
-#include "tile.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "window_func.h"
--- a/src/map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -7,6 +7,7 @@
 
 #include "stdafx.h"
 #include "direction_func.h"
+#include "tile_type.h"
 
 extern uint _map_tile_mask;
 
@@ -136,11 +137,6 @@
 uint ScaleByMapSize1D(uint);
 
 /**
- * The index/ID of a Tile.
- */
-typedef uint32 TileIndex;
-
-/**
  * An offset value between to tiles.
  *
  * This value is used fro the difference between
--- a/src/misc_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/misc_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -17,6 +17,7 @@
 #include "strings.h"
 #include "table/tree_land.h"
 #include "map.h"
+#include "tile_map.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "station_gui.h"
--- a/src/newgrf_canal.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/newgrf_canal.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,6 +10,7 @@
 #include "newgrf_commons.h"
 #include "newgrf_spritegroup.h"
 #include "newgrf_canal.h"
+#include "tile_map.h"
 
 
 /** Table of canal 'feature' sprite groups */
--- a/src/newgrf_commons.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/newgrf_commons.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -12,6 +12,7 @@
 #include "industry.h"
 #include "newgrf.h"
 #include "newgrf_commons.h"
+#include "tile_map.h"
 
 /** Constructor of generic class
  * @param offset end of original data for this entity. i.e: houses = 110
--- a/src/newgrf_house.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/newgrf_house.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "viewport.h"
 #include "landscape.h"
 #include "date.h"
-#include "tile.h"
 #include "town.h"
 #include "town_map.h"
 #include "sound.h"
--- a/src/npf.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/npf.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -14,7 +14,6 @@
 #include "pathfind.h"
 #include "station.h"
 #include "station_map.h"
-#include "tile.h"
 #include "depot.h"
 #include "tunnel_map.h"
 #include "network/network.h"
--- a/src/npf.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/npf.h	Wed Dec 19 23:26:02 2007 +0000
@@ -9,7 +9,7 @@
 #include "aystar.h"
 #include "station.h"
 #include "vehicle.h"
-#include "tile.h"
+#include "tile_type.h"
 
 /* mowing grass */
 enum {
--- a/src/openttd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/openttd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -9,8 +9,6 @@
 #include "driver.h"
 #include "saveload.h"
 #include "map.h"
-#include "tile.h"
-#include "void_map.h"
 #include "helpers.hpp"
 
 #include "openttd.h"
@@ -79,6 +77,7 @@
 #include "unmovable_map.h"
 #include "tree_map.h"
 #include "tunnelbridge_map.h"
+#include "void_map.h"
 
 #include <stdarg.h>
 
--- a/src/openttd.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/openttd.h	Wed Dec 19 23:26:02 2007 +0000
@@ -26,10 +26,10 @@
 };
 
 #include "map.h"
-#include "slope.h"
+#include "slope_type.h"
+#include "vehicle_type.h"
 
 // Forward declarations of structs.
-struct Vehicle;
 struct Depot;
 struct Waypoint;
 struct Station;
@@ -55,7 +55,6 @@
 typedef EngineID *EngineList; ///< engine list type placeholder acceptable for C code (see helpers.cpp)
 
 /* IDs used in Pools */
-typedef uint16 VehicleID;
 typedef uint16 StationID;
 static const StationID INVALID_STATION = 0xFFFF;
 typedef uint16 RoadStopID;
--- a/src/order_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/order_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -11,7 +11,6 @@
 #include "strings.h"
 #include "functions.h"
 #include "map.h"
-#include "tile.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "gfx.h"
--- a/src/pathfind.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/pathfind.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "functions.h"
 #include "landscape.h"
 #include "map.h"
-#include "tile.h"
 #include "pathfind.h"
 #include "rail_type.h"
 #include "debug.h"
--- a/src/players.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/players.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -29,6 +29,7 @@
 #include "group.h"
 #include "settings.h"
 #include "window_func.h"
+#include "tile_map.h"
 
 /**
  * Sets the local player and updates the patch settings that are set on a
--- a/src/rail.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/rail.h	Wed Dec 19 23:26:02 2007 +0000
@@ -8,7 +8,6 @@
 #include "gfx.h"
 #include "rail_type.h"
 #include "track_type.h"
-#include "tile.h"
 #include "variables.h"
 
 /** This struct contains all the info that is needed to draw and construct tracks.
@@ -228,8 +227,6 @@
 
 Foundation GetRailFoundation(Slope tileh, TrackBits bits);
 
-void FloodHalftile(TileIndex t);
-
 int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback
 
 #endif /* RAIL_H */
--- a/src/rail_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/rail_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -15,7 +15,6 @@
 #include "table/strings.h"
 #include "map.h"
 #include "landscape.h"
-#include "tile.h"
 #include "town_map.h"
 #include "tunnel_map.h"
 #include "vehicle.h"
--- a/src/rail_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/rail_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -11,7 +11,6 @@
 #include "landscape.h"
 #include "date.h"
 #include "map.h"
-#include "tile.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "station_gui.h"
--- a/src/rail_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/rail_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -8,7 +8,7 @@
 #include "direction_func.h"
 #include "track_func.h"
 #include "rail.h"
-#include "tile.h"
+#include "tile_map.h"
 
 
 /** Different types of Rail-related tiles */
--- a/src/road_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/road_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -17,7 +17,6 @@
 #include "functions.h"
 #include "map.h"
 #include "landscape.h"
-#include "tile.h"
 #include "town_map.h"
 #include "vehicle.h"
 #include "viewport.h"
--- a/src/road_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/road_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -9,7 +9,6 @@
 #include "strings.h"
 #include "functions.h"
 #include "map.h"
-#include "tile.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "station_gui.h"
--- a/src/road_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/road_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -9,7 +9,7 @@
 #include "track_func.h"
 #include "rail_type.h"
 #include "road_func.h"
-#include "tile.h"
+#include "tile_map.h"
 
 
 enum RoadTileType {
--- a/src/roadveh_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/roadveh_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -13,7 +13,6 @@
 #include "table/strings.h"
 #include "strings.h"
 #include "map.h"
-#include "tile.h"
 #include "vehicle.h"
 #include "timetable.h"
 #include "engine.h"
--- a/src/ship_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/ship_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "functions.h"
 #include "landscape.h"
 #include "map.h"
-#include "tile.h"
 #include "vehicle.h"
 #include "timetable.h"
 #include "command.h"
--- a/src/slope.h	Wed Dec 19 20:45:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,386 +0,0 @@
-/* $Id$ */
-
-/** @file slope.h Definitions of a slope.
- * This file defines the enumeration and helper functions for handling
- * the slope info of a tile.
- */
-
-#ifndef SLOPE_H
-#define SLOPE_H
-
-/**
- * Enumeration of tile corners
- */
-enum Corner {
-	CORNER_W = 0,
-	CORNER_S = 1,
-	CORNER_E = 2,
-	CORNER_N = 3,
-	CORNER_END,
-	CORNER_INVALID = 0xFF
-};
-
-/**
- * Enumeration for the slope-type.
- *
- * This enumeration use the chars N,E,S,W corresponding the
- * direction north, east, south and west. The top corner of a tile
- * is the north-part of the tile. The whole slope is encoded with
- * 5 bits, 4 bits for each corner and 1 bit for a steep-flag.
- *
- * For halftile slopes an extra 3 bits are used to represent this
- * properly; 1 bit for a halftile-flag and 2 bits to encode which
- * extra side (corner) is leveled when the slope of the first 5
- * bits is applied. This means that there can only be one leveled
- * slope for steep slopes, which is logical because two leveled
- * slopes would mean that it is not a steep slope as halftile
- * slopes only span one height level.
- */
-enum Slope {
-	SLOPE_FLAT     = 0x00,                                  ///< a flat tile
-	SLOPE_W        = 0x01,                                  ///< the west corner of the tile is raised
-	SLOPE_S        = 0x02,                                  ///< the south corner of the tile is raised
-	SLOPE_E        = 0x04,                                  ///< the east corner of the tile is raised
-	SLOPE_N        = 0x08,                                  ///< the north corner of the tile is raised
-	SLOPE_STEEP    = 0x10,                                  ///< indicates the slope is steep
-	SLOPE_NW       = SLOPE_N | SLOPE_W,                     ///< north and west corner are raised
-	SLOPE_SW       = SLOPE_S | SLOPE_W,                     ///< south and west corner are raised
-	SLOPE_SE       = SLOPE_S | SLOPE_E,                     ///< south and east corner are raised
-	SLOPE_NE       = SLOPE_N | SLOPE_E,                     ///< north and east corner are raised
-	SLOPE_EW       = SLOPE_E | SLOPE_W,                     ///< east and west corner are raised
-	SLOPE_NS       = SLOPE_N | SLOPE_S,                     ///< north and south corner are raised
-	SLOPE_ELEVATED = SLOPE_N | SLOPE_E | SLOPE_S | SLOPE_W, ///< all corner are raised, similar to SLOPE_FLAT
-	SLOPE_NWS      = SLOPE_N | SLOPE_W | SLOPE_S,           ///< north, west and south corner are raised
-	SLOPE_WSE      = SLOPE_W | SLOPE_S | SLOPE_E,           ///< west, south and east corner are raised
-	SLOPE_SEN      = SLOPE_S | SLOPE_E | SLOPE_N,           ///< south, east and north corner are raised
-	SLOPE_ENW      = SLOPE_E | SLOPE_N | SLOPE_W,           ///< east, north and west corner are raised
-	SLOPE_STEEP_W  = SLOPE_STEEP | SLOPE_NWS,               ///< a steep slope falling to east (from west)
-	SLOPE_STEEP_S  = SLOPE_STEEP | SLOPE_WSE,               ///< a steep slope falling to north (from south)
-	SLOPE_STEEP_E  = SLOPE_STEEP | SLOPE_SEN,               ///< a steep slope falling to west (from east)
-	SLOPE_STEEP_N  = SLOPE_STEEP | SLOPE_ENW,               ///< a steep slope falling to south (from north)
-
-	SLOPE_HALFTILE = 0x20,                                  ///< one halftile is leveled (non continuous slope)
-	SLOPE_HALFTILE_MASK = 0xE0,                             ///< three bits used for halftile slopes
-	SLOPE_HALFTILE_W = SLOPE_HALFTILE | (CORNER_W << 6),    ///< the west halftile is leveled (non continuous slope)
-	SLOPE_HALFTILE_S = SLOPE_HALFTILE | (CORNER_S << 6),    ///< the south halftile is leveled (non continuous slope)
-	SLOPE_HALFTILE_E = SLOPE_HALFTILE | (CORNER_E << 6),    ///< the east halftile is leveled (non continuous slope)
-	SLOPE_HALFTILE_N = SLOPE_HALFTILE | (CORNER_N << 6),    ///< the north halftile is leveled (non continuous slope)
-};
-
-/**
- * Rangecheck for Corner enumeration.
- *
- * @param corner A #Corner.
- * @return true iff corner is in a valid range.
- */
-static inline bool IsValidCorner(Corner corner)
-{
-	return IsInsideMM(corner, 0, CORNER_END);
-}
-
-/**
- * Checks if a slope is steep.
- *
- * @param s The given #Slope.
- * @return True if the slope is steep, else false.
- */
-static inline bool IsSteepSlope(Slope s)
-{
-	return (s & SLOPE_STEEP) != 0;
-}
-
-/**
- * Checks for non-continuous slope on halftile foundations.
- *
- * @param s The given #Slope.
- * @return True if the slope is non-continuous, else false.
- */
-static inline bool IsHalftileSlope(Slope s)
-{
-	return (s & SLOPE_HALFTILE) != 0;
-}
-
-/**
- * Return the complement of a slope.
- *
- * This method returns the complement of a slope. The complement of a
- * slope is a slope with raised corner which aren't raised in the given
- * slope.
- *
- * @pre The slope must neither be steep nor a halftile slope.
- * @param s The #Slope to get the complement.
- * @return a complement Slope of the given slope.
- */
-static inline Slope ComplementSlope(Slope s)
-{
-	assert(!IsSteepSlope(s) && !IsHalftileSlope(s));
-	return (Slope)(0xF ^ s);
-}
-
-/**
- * Tests if a slope has a highest corner (i.e. one corner raised or a steep slope).
- *
- * Note: A halftile slope is ignored.
- *
- * @param s The #Slope.
- * @return  true iff the slope has a highest corner.
- */
-static inline bool HasSlopeHighestCorner(Slope s)
-{
-	s = (Slope)(s & ~SLOPE_HALFTILE_MASK);
-	return IsSteepSlope(s) || (s == SLOPE_W) || (s == SLOPE_S) || (s == SLOPE_E) || (s == SLOPE_N);
-}
-
-/**
- * Returns the highest corner of a slope (one corner raised or a steep slope).
- *
- * @pre      The slope must be a slope with one corner raised or a steep slope. A halftile slope is ignored.
- * @param s  The #Slope.
- * @return   Highest corner.
- */
-static inline Corner GetHighestSlopeCorner(Slope s)
-{
-	switch (s & ~SLOPE_HALFTILE_MASK) {
-		case SLOPE_W:
-		case SLOPE_STEEP_W: return CORNER_W;
-		case SLOPE_S:
-		case SLOPE_STEEP_S: return CORNER_S;
-		case SLOPE_E:
-		case SLOPE_STEEP_E: return CORNER_E;
-		case SLOPE_N:
-		case SLOPE_STEEP_N: return CORNER_N;
-		default: NOT_REACHED();
-	}
-}
-
-/**
- * Returns the leveled halftile of a halftile slope.
- *
- * @pre     The slope must be a halftile slope.
- * @param s The #Slope.
- * @return  The corner of the leveled halftile.
- */
-static inline Corner GetHalftileSlopeCorner(Slope s)
-{
-	assert(IsHalftileSlope(s));
-	return (Corner)((s >> 6) & 3);
-}
-
-/**
- * Returns the height of the highest corner of a slope relative to TileZ (= minimal height)
- *
- * @param s The #Slope.
- * @return Relative height of highest corner.
- */
-static inline uint GetSlopeMaxZ(Slope s)
-{
-	if (s == SLOPE_FLAT) return 0;
-	if (IsSteepSlope(s)) return 2 * TILE_HEIGHT;
-	return TILE_HEIGHT;
-}
-
-/**
- * Returns the opposite corner.
- *
- * @param corner A #Corner.
- * @return The opposite corner to "corner".
- */
-static inline Corner OppositeCorner(Corner corner)
-{
-	return (Corner)(corner ^ 2);
-}
-
-/**
- * Returns the slope with a specific corner raised.
- *
- * @param corner The #Corner.
- * @return The #Slope with corner "corner" raised.
- */
-static inline Slope SlopeWithOneCornerRaised(Corner corner)
-{
-	assert(IsValidCorner(corner));
-	return (Slope)(1 << corner);
-}
-
-/**
- * Returns the slope with all except one corner raised.
- *
- * @param corner The #Corner.
- * @return The #Slope with all corners but "corner" raised.
- */
-static inline Slope SlopeWithThreeCornersRaised(Corner corner)
-{
-	return ComplementSlope(SlopeWithOneCornerRaised(corner));
-}
-
-/**
- * Adds a halftile slope to a slope.
- *
- * @param s #Slope without a halftile slope.
- * @param corner The #Corner of the halftile.
- * @return The #Slope s with the halftile slope added.
- */
-static inline Slope HalftileSlope(Slope s, Corner corner)
-{
-	assert(IsValidCorner(corner));
-	return (Slope)(s | SLOPE_HALFTILE | (corner << 6));
-}
-
-
-/**
- * Enumeration for Foundations.
- */
-enum Foundation {
-	FOUNDATION_NONE,             ///< The tile has no foundation, the slope remains unchanged.
-	FOUNDATION_LEVELED,          ///< The tile is leveled up to a flat slope.
-	FOUNDATION_INCLINED_X,       ///< The tile has an along X-axis inclined foundation.
-	FOUNDATION_INCLINED_Y,       ///< The tile has an along Y-axis inclined foundation.
-	FOUNDATION_STEEP_LOWER,      ///< The tile has a steep slope. The lowest corner is raised by a foundation to allow building railroad on the lower halftile.
-
-/* Halftile foundations */
-	FOUNDATION_STEEP_BOTH,       ///< The tile has a steep slope. The lowest corner is raised by a foundation and the upper halftile is leveled.
-	FOUNDATION_HALFTILE_W,       ///< Level west halftile non-continuously.
-	FOUNDATION_HALFTILE_S,       ///< Level south halftile non-continuously.
-	FOUNDATION_HALFTILE_E,       ///< Level east halftile non-continuously.
-	FOUNDATION_HALFTILE_N,       ///< Level north halftile non-continuously.
-
-/* Special anti-zig-zag foundations for single horizontal/vertical track */
-	FOUNDATION_RAIL_W,           ///< Foundation for TRACK_BIT_LEFT, but not a leveled foundation.
-	FOUNDATION_RAIL_S,           ///< Foundation for TRACK_BIT_LOWER, but not a leveled foundation.
-	FOUNDATION_RAIL_E,           ///< Foundation for TRACK_BIT_RIGHT, but not a leveled foundation.
-	FOUNDATION_RAIL_N,           ///< Foundation for TRACK_BIT_UPPER, but not a leveled foundation.
-
-	FOUNDATION_INVALID = 0xFF    ///< Used inside "rail_cmd.cpp" to indicate invalid slope/track combination.
-};
-
-/**
- * Tests for FOUNDATION_NONE.
- *
- * @param f  Maybe a #Foundation.
- * @return   true iff f is a foundation.
- */
-static inline bool IsFoundation(Foundation f)
-{
-	return f != FOUNDATION_NONE;
-}
-
-/**
- * Tests if the foundation is a leveled foundation.
- *
- * @param f  The #Foundation.
- * @return   true iff f is a leveled foundation.
- */
-static inline bool IsLeveledFoundation(Foundation f)
-{
-	return f == FOUNDATION_LEVELED;
-}
-
-/**
- * Tests if the foundation is an inclined foundation.
- *
- * @param f  The #Foundation.
- * @return   true iff f is an inclined foundation.
- */
-static inline bool IsInclinedFoundation(Foundation f)
-{
-	return (f == FOUNDATION_INCLINED_X) || (f == FOUNDATION_INCLINED_Y);
-}
-
-/**
- * Tests if a foundation is a non-continuous foundation, i.e. halftile-foundation or FOUNDATION_STEEP_BOTH.
- *
- * @param f  The #Foundation.
- * @return   true iff f is a non-continuous foundation
- */
-static inline bool IsNonContinuousFoundation(Foundation f)
-{
-	return IsInsideMM(f, FOUNDATION_STEEP_BOTH, FOUNDATION_HALFTILE_N + 1);
-}
-
-/**
- * Returns the halftile corner of a halftile-foundation
- *
- * @pre f != FOUNDATION_STEEP_BOTH
- *
- * @param f  The #Foundation.
- * @return   The #Corner with track.
- */
-static inline Corner GetHalftileFoundationCorner(Foundation f)
-{
-	assert(IsInsideMM(f, FOUNDATION_HALFTILE_W, FOUNDATION_HALFTILE_N + 1));
-	return (Corner)(f - FOUNDATION_HALFTILE_W);
-}
-
-/**
- * Tests if a foundation is a special rail foundation for single horizontal/vertical track.
- *
- * @param f  The #Foundation.
- * @return   true iff f is a special rail foundation for single horizontal/vertical track.
- */
-static inline bool IsSpecialRailFoundation(Foundation f)
-{
-	return IsInsideMM(f, FOUNDATION_RAIL_W, FOUNDATION_RAIL_N + 1);
-}
-
-/**
- * Returns the track corner of a special rail foundation
- *
- * @param f  The #Foundation.
- * @return   The #Corner with track.
- */
-static inline Corner GetRailFoundationCorner(Foundation f)
-{
-	assert(IsSpecialRailFoundation(f));
-	return (Corner)(f - FOUNDATION_RAIL_W);
-}
-
-/**
- * Returns the foundation needed to flatten a slope.
- * The returned foundation is either FOUNDATION_NONE if the tile was already flat, or FOUNDATION_LEVELED.
- *
- * @pre      The slope must not be steep.
- * @param s  The current #Slope.
- * @return   The needed #Foundation.
- */
-static inline Foundation FlatteningFoundation(Slope s)
-{
-	assert(!IsSteepSlope(s));
-	return (s == SLOPE_FLAT ? FOUNDATION_NONE : FOUNDATION_LEVELED);
-}
-
-/**
- * Returns the along a specific axis inclined foundation.
- *
- * @param axis  The #Axis.
- * @return      The needed #Foundation.
- */
-static inline Foundation InclinedFoundation(Axis axis)
-{
-	return (axis == AXIS_X ? FOUNDATION_INCLINED_X : FOUNDATION_INCLINED_Y);
-}
-
-/**
- * Returns the halftile foundation for single horizontal/vertical track.
- *
- * @param corner The #Corner with the track.
- * @return       The wanted #Foundation.
- */
-static inline Foundation HalftileFoundation(Corner corner)
-{
-	assert(IsValidCorner(corner));
-	return (Foundation)(FOUNDATION_HALFTILE_W + corner);
-}
-
-/**
- * Returns the special rail foundation for single horizontal/vertical track.
- *
- * @param corner The #Corner with the track.
- * @return       The wanted #Foundation.
- */
-static inline Foundation SpecialRailFoundation(Corner corner)
-{
-	assert(IsValidCorner(corner));
-	return (Foundation)(FOUNDATION_RAIL_W + corner);
-}
-
-#endif /* SLOPE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/slope_func.h	Wed Dec 19 23:26:02 2007 +0000
@@ -0,0 +1,302 @@
+/* $Id$ */
+
+/** @file slope_func.h Functions related to slopes. */
+
+#ifndef SLOPE_FUNC_H
+#define SLOPE_FUNC_H
+
+#include "slope_type.h"
+#include "direction_type.h"
+
+/**
+ * Rangecheck for Corner enumeration.
+ *
+ * @param corner A #Corner.
+ * @return true iff corner is in a valid range.
+ */
+static inline bool IsValidCorner(Corner corner)
+{
+	return IsInsideMM(corner, 0, CORNER_END);
+}
+
+
+/**
+ * Checks if a slope is steep.
+ *
+ * @param s The given #Slope.
+ * @return True if the slope is steep, else false.
+ */
+static inline bool IsSteepSlope(Slope s)
+{
+	return (s & SLOPE_STEEP) != 0;
+}
+
+/**
+ * Checks for non-continuous slope on halftile foundations.
+ *
+ * @param s The given #Slope.
+ * @return True if the slope is non-continuous, else false.
+ */
+static inline bool IsHalftileSlope(Slope s)
+{
+	return (s & SLOPE_HALFTILE) != 0;
+}
+
+/**
+ * Return the complement of a slope.
+ *
+ * This method returns the complement of a slope. The complement of a
+ * slope is a slope with raised corner which aren't raised in the given
+ * slope.
+ *
+ * @pre The slope must neither be steep nor a halftile slope.
+ * @param s The #Slope to get the complement.
+ * @return a complement Slope of the given slope.
+ */
+static inline Slope ComplementSlope(Slope s)
+{
+	assert(!IsSteepSlope(s) && !IsHalftileSlope(s));
+	return (Slope)(0xF ^ s);
+}
+
+/**
+ * Tests if a slope has a highest corner (i.e. one corner raised or a steep slope).
+ *
+ * Note: A halftile slope is ignored.
+ *
+ * @param s The #Slope.
+ * @return  true iff the slope has a highest corner.
+ */
+static inline bool HasSlopeHighestCorner(Slope s)
+{
+	s = (Slope)(s & ~SLOPE_HALFTILE_MASK);
+	return IsSteepSlope(s) || (s == SLOPE_W) || (s == SLOPE_S) || (s == SLOPE_E) || (s == SLOPE_N);
+}
+
+/**
+ * Returns the highest corner of a slope (one corner raised or a steep slope).
+ *
+ * @pre      The slope must be a slope with one corner raised or a steep slope. A halftile slope is ignored.
+ * @param s  The #Slope.
+ * @return   Highest corner.
+ */
+static inline Corner GetHighestSlopeCorner(Slope s)
+{
+	switch (s & ~SLOPE_HALFTILE_MASK) {
+		case SLOPE_W:
+		case SLOPE_STEEP_W: return CORNER_W;
+		case SLOPE_S:
+		case SLOPE_STEEP_S: return CORNER_S;
+		case SLOPE_E:
+		case SLOPE_STEEP_E: return CORNER_E;
+		case SLOPE_N:
+		case SLOPE_STEEP_N: return CORNER_N;
+		default: NOT_REACHED();
+	}
+}
+
+/**
+ * Returns the leveled halftile of a halftile slope.
+ *
+ * @pre     The slope must be a halftile slope.
+ * @param s The #Slope.
+ * @return  The corner of the leveled halftile.
+ */
+static inline Corner GetHalftileSlopeCorner(Slope s)
+{
+	assert(IsHalftileSlope(s));
+	return (Corner)((s >> 6) & 3);
+}
+
+/**
+ * Returns the height of the highest corner of a slope relative to TileZ (= minimal height)
+ *
+ * @param s The #Slope.
+ * @return Relative height of highest corner.
+ */
+static inline uint GetSlopeMaxZ(Slope s)
+{
+	if (s == SLOPE_FLAT) return 0;
+	if (IsSteepSlope(s)) return 2 * TILE_HEIGHT;
+	return TILE_HEIGHT;
+}
+
+/**
+ * Returns the opposite corner.
+ *
+ * @param corner A #Corner.
+ * @return The opposite corner to "corner".
+ */
+static inline Corner OppositeCorner(Corner corner)
+{
+	return (Corner)(corner ^ 2);
+}
+
+/**
+ * Returns the slope with a specific corner raised.
+ *
+ * @param corner The #Corner.
+ * @return The #Slope with corner "corner" raised.
+ */
+static inline Slope SlopeWithOneCornerRaised(Corner corner)
+{
+	assert(IsValidCorner(corner));
+	return (Slope)(1 << corner);
+}
+
+/**
+ * Returns the slope with all except one corner raised.
+ *
+ * @param corner The #Corner.
+ * @return The #Slope with all corners but "corner" raised.
+ */
+static inline Slope SlopeWithThreeCornersRaised(Corner corner)
+{
+	return ComplementSlope(SlopeWithOneCornerRaised(corner));
+}
+
+/**
+ * Adds a halftile slope to a slope.
+ *
+ * @param s #Slope without a halftile slope.
+ * @param corner The #Corner of the halftile.
+ * @return The #Slope s with the halftile slope added.
+ */
+static inline Slope HalftileSlope(Slope s, Corner corner)
+{
+	assert(IsValidCorner(corner));
+	return (Slope)(s | SLOPE_HALFTILE | (corner << 6));
+}
+
+
+/**
+ * Tests for FOUNDATION_NONE.
+ *
+ * @param f  Maybe a #Foundation.
+ * @return   true iff f is a foundation.
+ */
+static inline bool IsFoundation(Foundation f)
+{
+	return f != FOUNDATION_NONE;
+}
+
+/**
+ * Tests if the foundation is a leveled foundation.
+ *
+ * @param f  The #Foundation.
+ * @return   true iff f is a leveled foundation.
+ */
+static inline bool IsLeveledFoundation(Foundation f)
+{
+	return f == FOUNDATION_LEVELED;
+}
+
+/**
+ * Tests if the foundation is an inclined foundation.
+ *
+ * @param f  The #Foundation.
+ * @return   true iff f is an inclined foundation.
+ */
+static inline bool IsInclinedFoundation(Foundation f)
+{
+	return (f == FOUNDATION_INCLINED_X) || (f == FOUNDATION_INCLINED_Y);
+}
+
+/**
+ * Tests if a foundation is a non-continuous foundation, i.e. halftile-foundation or FOUNDATION_STEEP_BOTH.
+ *
+ * @param f  The #Foundation.
+ * @return   true iff f is a non-continuous foundation
+ */
+static inline bool IsNonContinuousFoundation(Foundation f)
+{
+	return IsInsideMM(f, FOUNDATION_STEEP_BOTH, FOUNDATION_HALFTILE_N + 1);
+}
+
+/**
+ * Returns the halftile corner of a halftile-foundation
+ *
+ * @pre f != FOUNDATION_STEEP_BOTH
+ *
+ * @param f  The #Foundation.
+ * @return   The #Corner with track.
+ */
+static inline Corner GetHalftileFoundationCorner(Foundation f)
+{
+	assert(IsInsideMM(f, FOUNDATION_HALFTILE_W, FOUNDATION_HALFTILE_N + 1));
+	return (Corner)(f - FOUNDATION_HALFTILE_W);
+}
+
+/**
+ * Tests if a foundation is a special rail foundation for single horizontal/vertical track.
+ *
+ * @param f  The #Foundation.
+ * @return   true iff f is a special rail foundation for single horizontal/vertical track.
+ */
+static inline bool IsSpecialRailFoundation(Foundation f)
+{
+	return IsInsideMM(f, FOUNDATION_RAIL_W, FOUNDATION_RAIL_N + 1);
+}
+
+/**
+ * Returns the track corner of a special rail foundation
+ *
+ * @param f  The #Foundation.
+ * @return   The #Corner with track.
+ */
+static inline Corner GetRailFoundationCorner(Foundation f)
+{
+	assert(IsSpecialRailFoundation(f));
+	return (Corner)(f - FOUNDATION_RAIL_W);
+}
+
+/**
+ * Returns the foundation needed to flatten a slope.
+ * The returned foundation is either FOUNDATION_NONE if the tile was already flat, or FOUNDATION_LEVELED.
+ *
+ * @pre      The slope must not be steep.
+ * @param s  The current #Slope.
+ * @return   The needed #Foundation.
+ */
+static inline Foundation FlatteningFoundation(Slope s)
+{
+	assert(!IsSteepSlope(s));
+	return (s == SLOPE_FLAT ? FOUNDATION_NONE : FOUNDATION_LEVELED);
+}
+
+/**
+ * Returns the along a specific axis inclined foundation.
+ *
+ * @param axis  The #Axis.
+ * @return      The needed #Foundation.
+ */
+static inline Foundation InclinedFoundation(Axis axis)
+{
+	return (axis == AXIS_X ? FOUNDATION_INCLINED_X : FOUNDATION_INCLINED_Y);
+}
+
+/**
+ * Returns the halftile foundation for single horizontal/vertical track.
+ *
+ * @param corner The #Corner with the track.
+ * @return       The wanted #Foundation.
+ */
+static inline Foundation HalftileFoundation(Corner corner)
+{
+	assert(IsValidCorner(corner));
+	return (Foundation)(FOUNDATION_HALFTILE_W + corner);
+}
+
+/**
+ * Returns the special rail foundation for single horizontal/vertical track.
+ *
+ * @param corner The #Corner with the track.
+ * @return       The wanted #Foundation.
+ */
+static inline Foundation SpecialRailFoundation(Corner corner)
+{
+	assert(IsValidCorner(corner));
+	return (Foundation)(FOUNDATION_RAIL_W + corner);
+}
+
+#endif /* SLOPE_FUNC_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/slope_type.h	Wed Dec 19 23:26:02 2007 +0000
@@ -0,0 +1,101 @@
+/* $Id$ */
+
+/**
+ * @file slope_type.h Definitions of a slope.
+ * This file defines the enumeration and helper functions for handling
+ * the slope info of a tile.
+ */
+
+#ifndef SLOPE_TYPE_H
+#define SLOPE_TYPE_H
+
+#include "core/enum_type.hpp"
+
+/**
+ * Enumeration of tile corners
+ */
+enum Corner {
+	CORNER_W = 0,
+	CORNER_S = 1,
+	CORNER_E = 2,
+	CORNER_N = 3,
+	CORNER_END,
+	CORNER_INVALID = 0xFF
+};
+
+
+/**
+ * Enumeration for the slope-type.
+ *
+ * This enumeration use the chars N,E,S,W corresponding the
+ * direction north, east, south and west. The top corner of a tile
+ * is the north-part of the tile. The whole slope is encoded with
+ * 5 bits, 4 bits for each corner and 1 bit for a steep-flag.
+ *
+ * For halftile slopes an extra 3 bits are used to represent this
+ * properly; 1 bit for a halftile-flag and 2 bits to encode which
+ * extra side (corner) is leveled when the slope of the first 5
+ * bits is applied. This means that there can only be one leveled
+ * slope for steep slopes, which is logical because two leveled
+ * slopes would mean that it is not a steep slope as halftile
+ * slopes only span one height level.
+ */
+enum Slope {
+	SLOPE_FLAT     = 0x00,                                  ///< a flat tile
+	SLOPE_W        = 0x01,                                  ///< the west corner of the tile is raised
+	SLOPE_S        = 0x02,                                  ///< the south corner of the tile is raised
+	SLOPE_E        = 0x04,                                  ///< the east corner of the tile is raised
+	SLOPE_N        = 0x08,                                  ///< the north corner of the tile is raised
+	SLOPE_STEEP    = 0x10,                                  ///< indicates the slope is steep
+	SLOPE_NW       = SLOPE_N | SLOPE_W,                     ///< north and west corner are raised
+	SLOPE_SW       = SLOPE_S | SLOPE_W,                     ///< south and west corner are raised
+	SLOPE_SE       = SLOPE_S | SLOPE_E,                     ///< south and east corner are raised
+	SLOPE_NE       = SLOPE_N | SLOPE_E,                     ///< north and east corner are raised
+	SLOPE_EW       = SLOPE_E | SLOPE_W,                     ///< east and west corner are raised
+	SLOPE_NS       = SLOPE_N | SLOPE_S,                     ///< north and south corner are raised
+	SLOPE_ELEVATED = SLOPE_N | SLOPE_E | SLOPE_S | SLOPE_W, ///< all corner are raised, similar to SLOPE_FLAT
+	SLOPE_NWS      = SLOPE_N | SLOPE_W | SLOPE_S,           ///< north, west and south corner are raised
+	SLOPE_WSE      = SLOPE_W | SLOPE_S | SLOPE_E,           ///< west, south and east corner are raised
+	SLOPE_SEN      = SLOPE_S | SLOPE_E | SLOPE_N,           ///< south, east and north corner are raised
+	SLOPE_ENW      = SLOPE_E | SLOPE_N | SLOPE_W,           ///< east, north and west corner are raised
+	SLOPE_STEEP_W  = SLOPE_STEEP | SLOPE_NWS,               ///< a steep slope falling to east (from west)
+	SLOPE_STEEP_S  = SLOPE_STEEP | SLOPE_WSE,               ///< a steep slope falling to north (from south)
+	SLOPE_STEEP_E  = SLOPE_STEEP | SLOPE_SEN,               ///< a steep slope falling to west (from east)
+	SLOPE_STEEP_N  = SLOPE_STEEP | SLOPE_ENW,               ///< a steep slope falling to south (from north)
+
+	SLOPE_HALFTILE = 0x20,                                  ///< one halftile is leveled (non continuous slope)
+	SLOPE_HALFTILE_MASK = 0xE0,                             ///< three bits used for halftile slopes
+	SLOPE_HALFTILE_W = SLOPE_HALFTILE | (CORNER_W << 6),    ///< the west halftile is leveled (non continuous slope)
+	SLOPE_HALFTILE_S = SLOPE_HALFTILE | (CORNER_S << 6),    ///< the south halftile is leveled (non continuous slope)
+	SLOPE_HALFTILE_E = SLOPE_HALFTILE | (CORNER_E << 6),    ///< the east halftile is leveled (non continuous slope)
+	SLOPE_HALFTILE_N = SLOPE_HALFTILE | (CORNER_N << 6),    ///< the north halftile is leveled (non continuous slope)
+};
+
+
+/**
+ * Enumeration for Foundations.
+ */
+enum Foundation {
+	FOUNDATION_NONE,             ///< The tile has no foundation, the slope remains unchanged.
+	FOUNDATION_LEVELED,          ///< The tile is leveled up to a flat slope.
+	FOUNDATION_INCLINED_X,       ///< The tile has an along X-axis inclined foundation.
+	FOUNDATION_INCLINED_Y,       ///< The tile has an along Y-axis inclined foundation.
+	FOUNDATION_STEEP_LOWER,      ///< The tile has a steep slope. The lowest corner is raised by a foundation to allow building railroad on the lower halftile.
+
+	/* Halftile foundations */
+	FOUNDATION_STEEP_BOTH,       ///< The tile has a steep slope. The lowest corner is raised by a foundation and the upper halftile is leveled.
+	FOUNDATION_HALFTILE_W,       ///< Level west halftile non-continuously.
+	FOUNDATION_HALFTILE_S,       ///< Level south halftile non-continuously.
+	FOUNDATION_HALFTILE_E,       ///< Level east halftile non-continuously.
+	FOUNDATION_HALFTILE_N,       ///< Level north halftile non-continuously.
+
+	/* Special anti-zig-zag foundations for single horizontal/vertical track */
+	FOUNDATION_RAIL_W,           ///< Foundation for TRACK_BIT_LEFT, but not a leveled foundation.
+	FOUNDATION_RAIL_S,           ///< Foundation for TRACK_BIT_LOWER, but not a leveled foundation.
+	FOUNDATION_RAIL_E,           ///< Foundation for TRACK_BIT_RIGHT, but not a leveled foundation.
+	FOUNDATION_RAIL_N,           ///< Foundation for TRACK_BIT_UPPER, but not a leveled foundation.
+
+	FOUNDATION_INVALID = 0xFF    ///< Used inside "rail_cmd.cpp" to indicate invalid slope/track combination.
+};
+
+#endif /* SLOPE_TYPE_H */
--- a/src/smallmap_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/smallmap_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -15,7 +15,6 @@
 #include "table/sprites.h"
 #include "landscape.h"
 #include "map.h"
-#include "tile.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "tree_map.h"
--- a/src/station.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/station.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -11,7 +11,6 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "map.h"
-#include "tile.h"
 #include "station.h"
 #include "gfx.h"
 #include "viewport.h"
--- a/src/station.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/station.h	Wed Dec 19 23:26:02 2007 +0000
@@ -9,7 +9,6 @@
 #include "player.h"
 #include "oldpool.h"
 #include "sprite.h"
-#include "tile.h"
 #include "road_type.h"
 #include "newgrf_station.h"
 #include "cargopacket.h"
--- a/src/station_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/station_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -15,7 +15,6 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "map.h"
-#include "tile.h"
 #include "station.h"
 #include "gfx.h"
 #include "viewport.h"
--- a/src/terraform_gui.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/terraform_gui.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "table/strings.h"
 #include "functions.h"
 #include "player.h"
-#include "tile.h"
 #include "gui.h"
 #include "window_gui.h"
 #include "viewport.h"
--- a/src/tgp.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/tgp.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -10,7 +10,6 @@
 #include "map.h"
 #include "table/strings.h"
 #include "clear_map.h"
-#include "tile.h"
 #include "variables.h"
 #include "void_map.h"
 #include "tgp.h"
--- a/src/tile.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/* $Id$ */
-
-/** @file tile.cpp */
-
-#include "stdafx.h"
-#include "tile.h"
-
-Slope GetTileSlope(TileIndex tile, uint *h)
-{
-	uint a;
-	uint b;
-	uint c;
-	uint d;
-	uint min;
-	uint r;
-
-	assert(tile < MapSize());
-
-	if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) {
-		if (h != NULL) *h = 0;
-		return SLOPE_FLAT;
-	}
-
-	min = a = TileHeight(tile);
-	b = TileHeight(tile + TileDiffXY(1, 0));
-	if (min > b) min = b;
-	c = TileHeight(tile + TileDiffXY(0, 1));
-	if (min > c) min = c;
-	d = TileHeight(tile + TileDiffXY(1, 1));
-	if (min > d) min = d;
-
-	r = SLOPE_FLAT;
-	if ((a -= min) != 0) r += (--a << 4) + SLOPE_N;
-	if ((c -= min) != 0) r += (--c << 4) + SLOPE_E;
-	if ((d -= min) != 0) r += (--d << 4) + SLOPE_S;
-	if ((b -= min) != 0) r += (--b << 4) + SLOPE_W;
-
-	if (h != NULL) *h = min * TILE_HEIGHT;
-
-	return (Slope)r;
-}
-
-uint GetTileZ(TileIndex tile)
-{
-	if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0;
-
-	uint h = TileHeight(tile);
-	h = min(h, TileHeight(tile + TileDiffXY(1, 0)));
-	h = min(h, TileHeight(tile + TileDiffXY(0, 1)));
-	h = min(h, TileHeight(tile + TileDiffXY(1, 1)));
-
-	return h * TILE_HEIGHT;
-}
-
-
-uint GetTileMaxZ(TileIndex t)
-{
-	if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return 0;
-
-	uint h = TileHeight(t);
-	h = max(h, TileHeight(t + TileDiffXY(1, 0)));
-	h = max(h, TileHeight(t + TileDiffXY(0, 1)));
-	h = max(h, TileHeight(t + TileDiffXY(1, 1)));
-
-	return h * TILE_HEIGHT;
-}
--- a/src/tile.h	Wed Dec 19 20:45:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-/* $Id$ */
-
-/** @file tile.h */
-
-#ifndef TILE_H
-#define TILE_H
-
-#include "macros.h"
-#include "openttd.h"
-#include "map.h"
-#include "slope.h"
-
-/** Maximum allowed tile height */
-#define MAX_TILE_HEIGHT 15
-
-/** Maximum allowed snowline height */
-#define MAX_SNOWLINE_HEIGHT (MAX_TILE_HEIGHT - 2)
-
-/**
- * The different type of a tile.
- *
- * Each tile belongs to one type, according whatever is build on it.
- *
- * @note A railway with a crossing street is marked as MP_ROAD.
- */
-enum TileType {
-	MP_CLEAR,               ///< A tile without any structures, i.e. grass, rocks, farm fields etc.
-	MP_RAILWAY,             ///< A railway
-	MP_ROAD,                ///< A tile with road (or tram tracks)
-	MP_HOUSE,               ///< A house by a town
-	MP_TREES,               ///< Tile got trees
-	MP_STATION,             ///< A tile of a station
-	MP_WATER,               ///< Water tile
-	MP_VOID,                ///< Invisible tiles at the SW and SE border
-	MP_INDUSTRY,            ///< Part of an industry
-	MP_TUNNELBRIDGE,        ///< Tunnel entry/exit and bridge heads
-	MP_UNMOVABLE,           ///< Contains an object with cannot be removed like transmitters
-};
-
-/**
- * Additional infos of a tile on a tropic game.
- *
- * Each non-water tile in a tropic game is either a rainforest tile or a
- * desert one.
- */
-enum TropicZone {
-	TROPICZONE_INVALID    = 0,      ///< Invalid tropiczone-type
-	TROPICZONE_DESERT     = 1,      ///< Tile is desert
-	TROPICZONE_RAINFOREST = 2,      ///< Rainforest tile
-};
-
-Slope GetTileSlope(TileIndex tile, uint *h);
-uint GetTileZ(TileIndex tile);
-uint GetTileMaxZ(TileIndex tile);
-
-/**
- * Returns the height of a tile
- *
- * This function returns the height of the northern corner of a tile.
- * This is saved in the global map-array. It does not take affect by
- * any slope-data of the tile.
- *
- * @param tile The tile to get the height from
- * @return the height of the tile
- * @pre tile < MapSize()
- */
-static inline uint TileHeight(TileIndex tile)
-{
-	assert(tile < MapSize());
-	return GB(_m[tile].type_height, 0, 4);
-}
-
-/**
- * Sets the height of a tile.
- *
- * This function sets the height of the northern corner of a tile.
- *
- * @param tile The tile to change the height
- * @param height The new height value of the tile
- * @pre tile < MapSize()
- * @pre heigth <= MAX_TILE_HEIGHT
- */
-static inline void SetTileHeight(TileIndex tile, uint height)
-{
-	assert(tile < MapSize());
-	assert(height <= MAX_TILE_HEIGHT);
-	SB(_m[tile].type_height, 0, 4, height);
-}
-
-/**
- * Returns the height of a tile in pixels.
- *
- * This function returns the height of the northern corner of a tile in pixels.
- *
- * @param tile The tile to get the height
- * @return The height of the tile in pixel
- */
-static inline uint TilePixelHeight(TileIndex tile)
-{
-	return TileHeight(tile) * TILE_HEIGHT;
-}
-
-/**
- * Get the tiletype of a given tile.
- *
- * @param tile The tile to get the TileType
- * @return The tiletype of the tile
- * @pre tile < MapSize()
- */
-static inline TileType GetTileType(TileIndex tile)
-{
-	assert(tile < MapSize());
-	return (TileType)GB(_m[tile].type_height, 4, 4);
-}
-
-/**
- * Set the type of a tile
- *
- * This functions sets the type of a tile. If the type
- * MP_VOID is selected the tile must be at the south-west or
- * south-east edges of the map and vice versa.
- *
- * @param tile The tile to save the new type
- * @param type The type to save
- * @pre tile < MapSize()
- * @pre type MP_VOID <=> tile is on the south-east or south-west edge.
- */
-static inline void SetTileType(TileIndex tile, TileType type)
-{
-	assert(tile < MapSize());
-	/* VOID tiles (and no others) are exactly allowed at the lower left and right
-	 * edges of the map */
-	assert((TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) == (type == MP_VOID));
-	SB(_m[tile].type_height, 4, 4, type);
-}
-
-/**
- * Checks if a tile is a give tiletype.
- *
- * This function checks if a tile got the given tiletype.
- *
- * @param tile The tile to check
- * @param type The type to check agains
- * @return true If the type matches agains the type of the tile
- */
-static inline bool IsTileType(TileIndex tile, TileType type)
-{
-	return GetTileType(tile) == type;
-}
-
-/**
- * Returns the owner of a tile
- *
- * This function returns the owner of a tile. This cannot used
- * for tiles which type is one of MP_HOUSE, MP_VOID and MP_INDUSTRY
- * as no player owned any of these buildings.
- *
- * @param tile The tile to check
- * @return The owner of the tile
- * @pre tile < MapSize()
- * @pre The type of the tile must not be MP_HOUSE, MP_VOID and MP_INDUSTRY
- */
-static inline Owner GetTileOwner(TileIndex tile)
-{
-	assert(tile < MapSize());
-	assert(!IsTileType(tile, MP_HOUSE));
-	assert(!IsTileType(tile, MP_VOID));
-	assert(!IsTileType(tile, MP_INDUSTRY));
-
-	return (Owner)_m[tile].m1;
-}
-
-/**
- * Sets the owner of a tile
- *
- * This function sets the owner status of a tile. Note that you cannot
- * set a owner for tiles of type MP_HOUSE, MP_VOID and MP_INDUSTRY.
- *
- * @param tile The tile to change the owner status.
- * @param owner The new owner.
- * @pre tile < MapSize()
- * @pre The type of the tile must not be MP_HOUSE, MP_VOID and MP_INDUSTRY
- */
-static inline void SetTileOwner(TileIndex tile, Owner owner)
-{
-	assert(tile < MapSize());
-	assert(!IsTileType(tile, MP_HOUSE));
-	assert(!IsTileType(tile, MP_VOID));
-	assert(!IsTileType(tile, MP_INDUSTRY));
-
-	_m[tile].m1 = owner;
-}
-
-/**
- * Checks if a tile belongs to the given owner
- *
- * @param tile The tile to check
- * @param owner The owner to check agains
- * @return True if a tile belongs the the given owner
- */
-static inline bool IsTileOwner(TileIndex tile, Owner owner)
-{
-	return GetTileOwner(tile) == owner;
-}
-
-/**
- * Set the tropic zone
- * @param tile the tile to set the zone of
- * @param type the new type
- * @pre assert(tile < MapSize());
- */
-static inline void SetTropicZone(TileIndex tile, TropicZone type)
-{
-	assert(tile < MapSize());
-	SB(_m[tile].m6, 0, 2, type);
-}
-
-/**
- * Get the tropic zone
- * @param tile the tile to get the zone of
- * @pre assert(tile < MapSize());
- * @return the zone type
- */
-static inline TropicZone GetTropicZone(TileIndex tile)
-{
-	assert(tile < MapSize());
-	return (TropicZone)GB(_m[tile].m6, 0, 2);
-}
-#endif /* TILE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tile_map.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -0,0 +1,67 @@
+/* $Id$ */
+
+/** @file tile.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "tile_map.h"
+
+Slope GetTileSlope(TileIndex tile, uint *h)
+{
+	uint a;
+	uint b;
+	uint c;
+	uint d;
+	uint min;
+	uint r;
+
+	assert(tile < MapSize());
+
+	if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) {
+		if (h != NULL) *h = 0;
+		return SLOPE_FLAT;
+	}
+
+	min = a = TileHeight(tile);
+	b = TileHeight(tile + TileDiffXY(1, 0));
+	if (min > b) min = b;
+	c = TileHeight(tile + TileDiffXY(0, 1));
+	if (min > c) min = c;
+	d = TileHeight(tile + TileDiffXY(1, 1));
+	if (min > d) min = d;
+
+	r = SLOPE_FLAT;
+	if ((a -= min) != 0) r += (--a << 4) + SLOPE_N;
+	if ((c -= min) != 0) r += (--c << 4) + SLOPE_E;
+	if ((d -= min) != 0) r += (--d << 4) + SLOPE_S;
+	if ((b -= min) != 0) r += (--b << 4) + SLOPE_W;
+
+	if (h != NULL) *h = min * TILE_HEIGHT;
+
+	return (Slope)r;
+}
+
+uint GetTileZ(TileIndex tile)
+{
+	if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0;
+
+	uint h = TileHeight(tile);
+	h = min(h, TileHeight(tile + TileDiffXY(1, 0)));
+	h = min(h, TileHeight(tile + TileDiffXY(0, 1)));
+	h = min(h, TileHeight(tile + TileDiffXY(1, 1)));
+
+	return h * TILE_HEIGHT;
+}
+
+
+uint GetTileMaxZ(TileIndex t)
+{
+	if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return 0;
+
+	uint h = TileHeight(t);
+	h = max(h, TileHeight(t + TileDiffXY(1, 0)));
+	h = max(h, TileHeight(t + TileDiffXY(0, 1)));
+	h = max(h, TileHeight(t + TileDiffXY(1, 1)));
+
+	return h * TILE_HEIGHT;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tile_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -0,0 +1,190 @@
+/* $Id$ */
+
+/** @file tile_map.h Map writing/reading functions for tiles. */
+
+#ifndef TILE_MAP_H
+#define TILE_MAP_H
+
+#include "tile_type.h"
+#include "slope_type.h"
+#include "map.h"
+
+/**
+ * Returns the height of a tile
+ *
+ * This function returns the height of the northern corner of a tile.
+ * This is saved in the global map-array. It does not take affect by
+ * any slope-data of the tile.
+ *
+ * @param tile The tile to get the height from
+ * @return the height of the tile
+ * @pre tile < MapSize()
+ */
+static inline uint TileHeight(TileIndex tile)
+{
+	assert(tile < MapSize());
+	return GB(_m[tile].type_height, 0, 4);
+}
+
+/**
+ * Sets the height of a tile.
+ *
+ * This function sets the height of the northern corner of a tile.
+ *
+ * @param tile The tile to change the height
+ * @param height The new height value of the tile
+ * @pre tile < MapSize()
+ * @pre heigth <= MAX_TILE_HEIGHT
+ */
+static inline void SetTileHeight(TileIndex tile, uint height)
+{
+	assert(tile < MapSize());
+	assert(height <= MAX_TILE_HEIGHT);
+	SB(_m[tile].type_height, 0, 4, height);
+}
+
+/**
+ * Returns the height of a tile in pixels.
+ *
+ * This function returns the height of the northern corner of a tile in pixels.
+ *
+ * @param tile The tile to get the height
+ * @return The height of the tile in pixel
+ */
+static inline uint TilePixelHeight(TileIndex tile)
+{
+	return TileHeight(tile) * TILE_HEIGHT;
+}
+
+/**
+ * Get the tiletype of a given tile.
+ *
+ * @param tile The tile to get the TileType
+ * @return The tiletype of the tile
+ * @pre tile < MapSize()
+ */
+static inline TileType GetTileType(TileIndex tile)
+{
+	assert(tile < MapSize());
+	return (TileType)GB(_m[tile].type_height, 4, 4);
+}
+
+/**
+ * Set the type of a tile
+ *
+ * This functions sets the type of a tile. If the type
+ * MP_VOID is selected the tile must be at the south-west or
+ * south-east edges of the map and vice versa.
+ *
+ * @param tile The tile to save the new type
+ * @param type The type to save
+ * @pre tile < MapSize()
+ * @pre type MP_VOID <=> tile is on the south-east or south-west edge.
+ */
+static inline void SetTileType(TileIndex tile, TileType type)
+{
+	assert(tile < MapSize());
+	/* VOID tiles (and no others) are exactly allowed at the lower left and right
+	 * edges of the map */
+	assert((TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) == (type == MP_VOID));
+	SB(_m[tile].type_height, 4, 4, type);
+}
+
+/**
+ * Checks if a tile is a give tiletype.
+ *
+ * This function checks if a tile got the given tiletype.
+ *
+ * @param tile The tile to check
+ * @param type The type to check agains
+ * @return true If the type matches agains the type of the tile
+ */
+static inline bool IsTileType(TileIndex tile, TileType type)
+{
+	return GetTileType(tile) == type;
+}
+
+/**
+ * Returns the owner of a tile
+ *
+ * This function returns the owner of a tile. This cannot used
+ * for tiles which type is one of MP_HOUSE, MP_VOID and MP_INDUSTRY
+ * as no player owned any of these buildings.
+ *
+ * @param tile The tile to check
+ * @return The owner of the tile
+ * @pre tile < MapSize()
+ * @pre The type of the tile must not be MP_HOUSE, MP_VOID and MP_INDUSTRY
+ */
+static inline Owner GetTileOwner(TileIndex tile)
+{
+	assert(tile < MapSize());
+	assert(!IsTileType(tile, MP_HOUSE));
+	assert(!IsTileType(tile, MP_VOID));
+	assert(!IsTileType(tile, MP_INDUSTRY));
+
+	return (Owner)_m[tile].m1;
+}
+
+/**
+ * Sets the owner of a tile
+ *
+ * This function sets the owner status of a tile. Note that you cannot
+ * set a owner for tiles of type MP_HOUSE, MP_VOID and MP_INDUSTRY.
+ *
+ * @param tile The tile to change the owner status.
+ * @param owner The new owner.
+ * @pre tile < MapSize()
+ * @pre The type of the tile must not be MP_HOUSE, MP_VOID and MP_INDUSTRY
+ */
+static inline void SetTileOwner(TileIndex tile, Owner owner)
+{
+	assert(tile < MapSize());
+	assert(!IsTileType(tile, MP_HOUSE));
+	assert(!IsTileType(tile, MP_VOID));
+	assert(!IsTileType(tile, MP_INDUSTRY));
+
+	_m[tile].m1 = owner;
+}
+
+/**
+ * Checks if a tile belongs to the given owner
+ *
+ * @param tile The tile to check
+ * @param owner The owner to check agains
+ * @return True if a tile belongs the the given owner
+ */
+static inline bool IsTileOwner(TileIndex tile, Owner owner)
+{
+	return GetTileOwner(tile) == owner;
+}
+
+/**
+ * Set the tropic zone
+ * @param tile the tile to set the zone of
+ * @param type the new type
+ * @pre assert(tile < MapSize());
+ */
+static inline void SetTropicZone(TileIndex tile, TropicZone type)
+{
+	assert(tile < MapSize());
+	SB(_m[tile].m6, 0, 2, type);
+}
+
+/**
+ * Get the tropic zone
+ * @param tile the tile to get the zone of
+ * @pre assert(tile < MapSize());
+ * @return the zone type
+ */
+static inline TropicZone GetTropicZone(TileIndex tile)
+{
+	assert(tile < MapSize());
+	return (TropicZone)GB(_m[tile].m6, 0, 2);
+}
+
+Slope GetTileSlope(TileIndex tile, uint *h);
+uint GetTileZ(TileIndex tile);
+uint GetTileMaxZ(TileIndex tile);
+
+#endif /* TILE_TYPE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tile_type.h	Wed Dec 19 23:26:02 2007 +0000
@@ -0,0 +1,54 @@
+/* $Id$ */
+
+/** @file tile_type.h Types related to tiles. */
+
+#ifndef TILE_TYPE_H
+#define TILE_TYPE_H
+
+#include "core/enum_type.hpp"
+
+/** Maximum allowed tile height */
+#define MAX_TILE_HEIGHT 15
+
+/** Maximum allowed snowline height */
+#define MAX_SNOWLINE_HEIGHT (MAX_TILE_HEIGHT - 2)
+
+/**
+ * The different type of a tile.
+ *
+ * Each tile belongs to one type, according whatever is build on it.
+ *
+ * @note A railway with a crossing street is marked as MP_ROAD.
+ */
+enum TileType {
+	MP_CLEAR,               ///< A tile without any structures, i.e. grass, rocks, farm fields etc.
+	MP_RAILWAY,             ///< A railway
+	MP_ROAD,                ///< A tile with road (or tram tracks)
+	MP_HOUSE,               ///< A house by a town
+	MP_TREES,               ///< Tile got trees
+	MP_STATION,             ///< A tile of a station
+	MP_WATER,               ///< Water tile
+	MP_VOID,                ///< Invisible tiles at the SW and SE border
+	MP_INDUSTRY,            ///< Part of an industry
+	MP_TUNNELBRIDGE,        ///< Tunnel entry/exit and bridge heads
+	MP_UNMOVABLE,           ///< Contains an object with cannot be removed like transmitters
+};
+
+/**
+ * Additional infos of a tile on a tropic game.
+ *
+ * Each non-water tile in a tropic game is either a rainforest tile or a
+ * desert one.
+ */
+enum TropicZone {
+	TROPICZONE_INVALID    = 0,      ///< Invalid tropiczone-type
+	TROPICZONE_DESERT     = 1,      ///< Tile is desert
+	TROPICZONE_RAINFOREST = 2,      ///< Rainforest tile
+};
+
+/**
+ * The index/ID of a Tile.
+ */
+typedef uint32 TileIndex;
+
+#endif /* TILE_TYPE_H */
--- a/src/town_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/town_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -13,7 +13,6 @@
 #include "table/sprites.h"
 #include "map.h"
 #include "landscape.h"
-#include "tile.h"
 #include "town_map.h"
 #include "tunnel_map.h"
 #include "viewport.h"
--- a/src/town_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/town_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -7,6 +7,7 @@
 
 #include "town.h"
 #include "date.h"
+#include "tile_map.h"
 
 /**
  * Get the index of which town this house/street is attached to.
--- a/src/track_func.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/track_func.h	Wed Dec 19 23:26:02 2007 +0000
@@ -7,6 +7,7 @@
 
 #include "track_type.h"
 #include "direction_type.h"
+#include "slope_func.h"
 
 /**
  * Convert an Axis to the corresponding Track
--- a/src/train_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/train_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -13,7 +13,6 @@
 #include "table/strings.h"
 #include "strings.h"
 #include "map.h"
-#include "tile.h"
 #include "tunnel_map.h"
 #include "vehicle.h"
 #include "timetable.h"
--- a/src/tree_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/tree_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -12,7 +12,6 @@
 #include "functions.h"
 #include "map.h"
 #include "landscape.h"
-#include "tile.h"
 #include "tree_map.h"
 #include "viewport.h"
 #include "command.h"
--- a/src/tunnel_map.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/tunnel_map.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -4,7 +4,6 @@
 
 #include "stdafx.h"
 #include "openttd.h"
-#include "tile.h"
 #include "tunnel_map.h"
 #include "tunnelbridge_map.h"
 
--- a/src/tunnel_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/tunnel_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -10,6 +10,7 @@
 #include "map.h"
 #include "rail_type.h"
 #include "road_type.h"
+#include "tile_map.h"
 
 
 /**
--- a/src/tunnelbridge_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -16,7 +16,6 @@
 #include "functions.h"
 #include "map.h"
 #include "landscape.h"
-#include "tile.h"
 #include "tunnel_map.h"
 #include "unmovable_map.h"
 #include "vehicle.h"
--- a/src/tunnelbridge_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/tunnelbridge_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -8,7 +8,7 @@
 #include "direction_func.h"
 #include "core/bitmath_func.hpp"  /* GB, HasBit, SB */
 #include "map.h"                  /* Tile, TileIndex */
-#include "tile.h"                 /* TileType, IsTileType */
+#include "tile_map.h"             /* TileType, IsTileType */
 #include "openttd.h"              /* TransportType */
 
 
--- a/src/unmovable_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/unmovable_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -9,7 +9,6 @@
 #include "functions.h"
 #include "landscape.h"
 #include "map.h"
-#include "tile.h"
 #include "command.h"
 #include "viewport.h"
 #include "player.h"
--- a/src/vehicle.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/vehicle.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -13,7 +13,6 @@
 #include "functions.h"
 #include "landscape.h"
 #include "map.h"
-#include "tile.h"
 #include "vehicle.h"
 #include "timetable.h"
 #include "gfx.h"
--- a/src/vehicle.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/vehicle.h	Wed Dec 19 23:26:02 2007 +0000
@@ -5,6 +5,7 @@
 #ifndef VEHICLE_H
 #define VEHICLE_H
 
+#include "vehicle_type.h"
 #include "oldpool.h"
 #include "order.h"
 #include "track_type.h"
@@ -69,20 +70,6 @@
 	RVSB_ROAD_STOP_TRACKDIR_MASK = 0x09                       ///< Only bits 0 and 3 are used to encode the trackdir for road stops
 };
 
-enum VehicleType {
-	VEH_TRAIN,
-	VEH_ROAD,
-	VEH_SHIP,
-	VEH_AIRCRAFT,
-	VEH_SPECIAL,
-	VEH_DISASTER,
-	VEH_END,
-	VEH_INVALID = 0xFF,
-};
-DECLARE_POSTFIX_INCREMENT(VehicleType);
-template <> struct EnumPropsT<VehicleType> : MakeEnumPropsT<VehicleType, byte, VEH_TRAIN, VEH_END, VEH_INVALID> {};
-typedef TinyEnumT<VehicleType> VehicleTypeByte;
-
 enum VehStatus {
 	VS_HIDDEN          = 0x01,
 	VS_STOPPED         = 0x02,
@@ -218,7 +205,6 @@
 	TrackBitsByte state;
 };
 
-struct Vehicle;
 DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125)
 
 /* Some declarations of functions, so we can make them friendly */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/vehicle_type.h	Wed Dec 19 23:26:02 2007 +0000
@@ -0,0 +1,28 @@
+/* $Id$ */
+
+/** @file vehicle_type.h Types related to vehicles. */
+
+#ifndef VEHICLE_TYPE_H
+#define VEHICLE_TYPE_H
+
+#include "core/enum_type.hpp"
+
+typedef uint16 VehicleID;
+
+enum VehicleType {
+	VEH_TRAIN,
+	VEH_ROAD,
+	VEH_SHIP,
+	VEH_AIRCRAFT,
+	VEH_SPECIAL,
+	VEH_DISASTER,
+	VEH_END,
+	VEH_INVALID = 0xFF,
+};
+DECLARE_POSTFIX_INCREMENT(VehicleType);
+template <> struct EnumPropsT<VehicleType> : MakeEnumPropsT<VehicleType, byte, VEH_TRAIN, VEH_END, VEH_INVALID> {};
+typedef TinyEnumT<VehicleType> VehicleTypeByte;
+
+struct Vehicle;
+
+#endif /* VEHICLE_TYPE_H */
--- a/src/void_map.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/void_map.h	Wed Dec 19 23:26:02 2007 +0000
@@ -5,6 +5,8 @@
 #ifndef VOID_MAP_H
 #define VOID_MAP_H
 
+#include "tile_map.h"
+
 /**
  * Make a nice void tile ;)
  * @param t the tile to make void
--- a/src/water.h	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/water.h	Wed Dec 19 23:26:02 2007 +0000
@@ -10,5 +10,6 @@
 void DrawCanalWater(TileIndex tile);
 void MakeWaterOrCanalDependingOnOwner(TileIndex tile, Owner o);
 void MakeWaterOrCanalDependingOnSurroundings(TileIndex t, Owner o);
+void FloodHalftile(TileIndex t);
 
 #endif /* WATER_H */
--- a/src/water_cmd.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/water_cmd.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -14,7 +14,6 @@
 #include "functions.h"
 #include "landscape.h"
 #include "map.h"
-#include "tile.h"
 #include "vehicle.h"
 #include "viewport.h"
 #include "command.h"
@@ -25,6 +24,7 @@
 #include "vehicle_gui.h"
 #include "train.h"
 #include "roadveh.h"
+#include "water.h"
 #include "water_map.h"
 #include "industry_map.h"
 #include "newgrf.h"
--- a/src/waypoint.cpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/waypoint.cpp	Wed Dec 19 23:26:02 2007 +0000
@@ -15,7 +15,6 @@
 #include "bridge_map.h"
 #include "saveload.h"
 #include "station.h"
-#include "tile.h"
 #include "town.h"
 #include "waypoint.h"
 #include "variables.h"
--- a/src/yapf/track_dir.hpp	Wed Dec 19 20:45:46 2007 +0000
+++ b/src/yapf/track_dir.hpp	Wed Dec 19 23:26:02 2007 +0000
@@ -3,9 +3,9 @@
 #ifndef  TRACK_DIR_HPP
 #define  TRACK_DIR_HPP
 
-#include "../tile.h"
+#include "../tile_type.h"
 #include "../openttd.h"
 #include "../map.h"
-#include "../rail.h"
+#include "../rail_type.h"
 
 #endif /* TRACK_DIR_HPP */