Changeset - r8384:65a05dd0c46c
[Not reviewed]
master
0 1 0
smatz - 17 years ago 2008-01-23 00:36:48
smatz@openttd.org
(svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
1 file changed with 19 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/road_cmd.cpp
Show inline comments
 
@@ -42,6 +42,8 @@
 
static const uint32 VALID_LEVEL_CROSSING_SLOPES = (M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT));
 
#undef M
 

	
 
Foundation GetRoadFoundation(Slope tileh, RoadBits bits);
 

	
 
bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road, RoadType rt)
 
{
 
	RoadBits present;
 
@@ -530,6 +532,23 @@ do_clear:;
 
	if (IsTileType(tile, MP_ROAD)) {
 
		/* Don't put the pieces that already exist */
 
		pieces &= ComplementRoadBits(existing);
 

	
 
		/* Check if new road bits will have the same foundation as other existing road types */
 
		if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) {
 
			Slope slope = GetTileSlope(tile, NULL);
 
			Foundation found_new = GetRoadFoundation(slope, pieces | existing);
 

	
 
			/* Test if all other roadtypes can be built at that foundation */
 
			for (RoadType rtest = ROADTYPE_ROAD; rtest < ROADTYPE_END; rtest++) {
 
				if (rtest != rt) { // check only other road types
 
					RoadBits bits = GetRoadBits(tile, rtest);
 
					/* do not check if there are not road bits of given type */
 
					if (bits != ROAD_NONE && GetRoadFoundation(slope, bits) != found_new) {
 
						return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
 
					}
 
				}
 
			}
 
		}
 
	}
 

	
 
	cost.AddCost(CountBits(pieces) * _price.build_road);
0 comments (0 inline, 0 general)