rail_cmd.c
changeset 3142 00b67636048f
parent 3103 fb7f22d3bc9b
child 3144 426b825578f9
equal deleted inserted replaced
3141:e840fc2a0f53 3142:00b67636048f
   128 		return true;
   128 		return true;
   129 	}
   129 	}
   130 }
   130 }
   131 
   131 
   132 
   132 
   133 static const byte _valid_tileh_slopes[4][15] = {
   133 static const byte _valid_tileh_slopes[][15] = {
   134 
   134 
   135 // set of normal ones
   135 // set of normal ones
   136 {
   136 {
   137 	TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT,
   137 	TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT,
   138 	TRACK_BIT_RIGHT,
   138 	TRACK_BIT_RIGHT,
   195 
   195 
   196 	TRACK_BIT_Y|TRACK_BIT_RIGHT|TRACK_BIT_UPPER,
   196 	TRACK_BIT_Y|TRACK_BIT_RIGHT|TRACK_BIT_UPPER,
   197 	TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT,
   197 	TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT,
   198 	TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT,
   198 	TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT,
   199 	},
   199 	},
   200 
       
   201 	// valid railway crossings on slopes
       
   202 	{
       
   203 		1, 0, 0, // 0, 1, 2
       
   204 		0, 0, 1, // 3, 4, 5
       
   205 		0, 1, 0, // 6, 7, 8
       
   206 		0, 1, 1, // 9, 10, 11
       
   207 		0, 1, 1, // 12, 13, 14
       
   208 	}
       
   209 };
   200 };
   210 
   201 
   211 uint GetRailFoundation(uint tileh, uint bits)
   202 uint GetRailFoundation(uint tileh, uint bits)
   212 {
   203 {
   213 	int i;
   204 	int i;
   344 				_m[tile].m5 = m5 | trackbit;
   335 				_m[tile].m5 = m5 | trackbit;
   345 			}
   336 			}
   346 			break;
   337 			break;
   347 
   338 
   348 		case MP_STREET:
   339 		case MP_STREET:
   349 			if (!_valid_tileh_slopes[3][tileh]) // prevent certain slopes
   340 #define M(x) (1 << (x))
       
   341 			/* Level crossings may only be built on these slopes */
       
   342 			if (!HASBIT(M(14) | M(13) | M(11) | M(10) | M(7) | M(5) | M(0), tileh)) {
   350 				return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
   343 				return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
       
   344 			}
       
   345 #undef M
       
   346 
   351 			if (!EnsureNoVehicle(tile)) return CMD_ERROR;
   347 			if (!EnsureNoVehicle(tile)) return CMD_ERROR;
   352 
   348 
   353 			if (GetRoadType(tile) == ROAD_NORMAL && (
   349 			if (GetRoadType(tile) == ROAD_NORMAL && (
   354 						(track == TRACK_X && m5 == ROAD_Y) ||
   350 						(track == TRACK_X && m5 == ROAD_Y) ||
   355 						(track == TRACK_Y && m5 == ROAD_X) // correct direction?
   351 						(track == TRACK_Y && m5 == ROAD_X) // correct direction?