(svn r7643) [cbh] - Codechange: Railway bridges now store track bits just like normal rail tiles. For railway bridges, GetTileTrackStatus_Bridge just calls GetTileTrackStatus_Track custombridgeheads
authorcelestar
Sat, 30 Dec 2006 11:57:57 +0000
branchcustombridgeheads
changeset 5598 166345600ba9
parent 5597 ffc0b228cee6
child 5599 a18b0c2587f7
(svn r7643) [cbh] - Codechange: Railway bridges now store track bits just like normal rail tiles. For railway bridges, GetTileTrackStatus_Bridge just calls GetTileTrackStatus_Track
bridge_cmd.c
openttd.c
rail.h
rail_cmd.c
rail_map.h
--- a/bridge_cmd.c	Fri Dec 29 12:45:44 2006 +0000
+++ b/bridge_cmd.c	Sat Dec 30 11:57:57 2006 +0000
@@ -921,6 +921,8 @@
 static uint32 GetTileTrackStatus_Bridge(TileIndex tile, TransportType mode)
 {
 	if (GetBridgeTransportType(tile) != mode) return 0;
+
+	if (IsTileType(tile, MP_RAILWAY_BRIDGE)) return GetTileTrackStatus_Track(tile, mode);
 	return AxisToTrackBits(DiagDirToAxis(GetBridgeRampDirection(tile))) * 0x101;
 }
 
--- a/openttd.c	Fri Dec 29 12:45:44 2006 +0000
+++ b/openttd.c	Sat Dec 30 11:57:57 2006 +0000
@@ -1355,15 +1355,21 @@
 		for (tile = 0; tile != MapSize(); tile++) {
 			if (IsTileType(tile, MP_TUNNEL)) {
 				if (HASBIT(_m[tile].m5, 7)) { /* Bridge */
+					DiagDirection dd = GB(_m[tile].m5, 0, 2);
+					SB(_m[tile].m5, 0, 2, 0);
 					if (GB(_m[tile].m5, 2, 2) == 0) { /* Railway Bridge */
 						SetTileType(tile, MP_RAILWAY_BRIDGE);
+						if (dd == DIAGDIR_NE || dd == DIAGDIR_SW) {
+							SETBIT(_m[tile].m5, 0);
+						} else {
+							SETBIT(_m[tile].m5, 1);
+						}
 					} else {
 						SetTileType(tile, MP_STREET_BRIDGE);
 					}
 					CLRBIT(_m[tile].m5, 7);
 					SB(_m[tile].m5, 2, 2, 0);
-					SB(_m[tile].m4, 5, 2, GB(_m[tile].m5, 0, 2));
-					SB(_m[tile].m5, 0, 2, 0);
+					SB(_m[tile].m4, 5, 2, dd);
 				} else { /* Tunnel */
 					SetTileType(tile, MP_TUNNEL);
 				}
--- a/rail.h	Fri Dec 29 12:45:44 2006 +0000
+++ b/rail.h	Sat Dec 30 11:57:57 2006 +0000
@@ -465,6 +465,7 @@
 void DrawCatenary(const TileInfo *ti);
 
 uint GetRailFoundation(Slope tileh, TrackBits bits);
+uint32 GetTileTrackStatus_Track(TileIndex tile, TransportType mode);
 
 int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback
 
--- a/rail_cmd.c	Fri Dec 29 12:45:44 2006 +0000
+++ b/rail_cmd.c	Sat Dec 30 11:57:57 2006 +0000
@@ -1843,7 +1843,7 @@
 }
 
 
-static uint32 GetTileTrackStatus_Track(TileIndex tile, TransportType mode)
+uint32 GetTileTrackStatus_Track(TileIndex tile, TransportType mode)
 {
 	byte a;
 	uint16 b;
--- a/rail_map.h	Fri Dec 29 12:45:44 2006 +0000
+++ b/rail_map.h	Sat Dec 30 11:57:57 2006 +0000
@@ -18,7 +18,7 @@
 
 static inline RailTileType GetRailTileType(TileIndex t)
 {
-	assert(IsTileType(t, MP_RAILWAY));
+	assert(IsTileType(t, MP_RAILWAY) || IsTileType(t, MP_RAILWAY_BRIDGE));
 	return (RailTileType)(_m[t].m5 & RAIL_TILE_TYPE_MASK);
 }