rail_cmd.c
branchcustombridgeheads
changeset 5623 ef2a8a524a95
parent 5603 f3aa14b91b0a
child 5632 025c3b25f1fd
equal deleted inserted replaced
5622:2f0cb276d32a 5623:ef2a8a524a95
   277 				cost += ret;
   277 				cost += ret;
   278 			}
   278 			}
   279 
   279 
   280 			if (flags & DC_EXEC) {
   280 			if (flags & DC_EXEC) {
   281 				SetRailGroundType(tile, RAIL_GROUND_BARREN);
   281 				SetRailGroundType(tile, RAIL_GROUND_BARREN);
   282 				_m[tile].m5 |= trackbit;
   282 				SetTrackBits(tile, GetTrackBits(tile) | trackbit);
   283 			}
   283 			}
   284 			break;
   284 			break;
   285 
   285 
   286 		case MP_STREET:
   286 		case MP_STREET:
   287 #define M(x) (1 << (x))
   287 #define M(x) (1 << (x))
  1000 
  1000 
  1001 static int32 ClearTile_Track(TileIndex tile, byte flags)
  1001 static int32 ClearTile_Track(TileIndex tile, byte flags)
  1002 {
  1002 {
  1003 	int32 cost;
  1003 	int32 cost;
  1004 	int32 ret;
  1004 	int32 ret;
  1005 	byte m5;
       
  1006 
       
  1007 	m5 = _m[tile].m5;
       
  1008 
  1005 
  1009 	if (flags & DC_AUTO) {
  1006 	if (flags & DC_AUTO) {
  1010 		if (!IsTileOwner(tile, _current_player))
  1007 		if (!IsTileOwner(tile, _current_player))
  1011 			return_cmd_error(STR_1024_AREA_IS_OWNED_BY_ANOTHER);
  1008 			return_cmd_error(STR_1024_AREA_IS_OWNED_BY_ANOTHER);
  1012 
  1009 
  1018 	}
  1015 	}
  1019 
  1016 
  1020 	cost = 0;
  1017 	cost = 0;
  1021 
  1018 
  1022 	switch (GetRailTileType(tile)) {
  1019 	switch (GetRailTileType(tile)) {
  1023 		/* XXX: Why the fuck do we remove these thow signals first? */
       
  1024 		case RAIL_TILE_SIGNALS:
  1020 		case RAIL_TILE_SIGNALS:
  1025 			if (HasSignalOnTrack(tile, TRACK_X)) {
  1021 		case RAIL_TILE_NORMAL: {
  1026 				ret = DoCommand(tile, TRACK_X, 0, flags, CMD_REMOVE_SIGNALS);
  1022 			TrackBits tracks = GetTrackBits(tile);
       
  1023 			uint i;
       
  1024 
       
  1025 			for_each_bit (i, tracks) {
       
  1026 				ret = DoCommand(tile, 0, i, flags, CMD_REMOVE_SINGLE_RAIL);
  1027 				if (CmdFailed(ret)) return CMD_ERROR;
  1027 				if (CmdFailed(ret)) return CMD_ERROR;
  1028 				cost += ret;
  1028 				cost += ret;
  1029 			}
       
  1030 			if (HasSignalOnTrack(tile, TRACK_LOWER)) {
       
  1031 				ret = DoCommand(tile, TRACK_LOWER, 0, flags, CMD_REMOVE_SIGNALS);
       
  1032 				if (CmdFailed(ret)) return CMD_ERROR;
       
  1033 				cost += ret;
       
  1034 			}
       
  1035 
       
  1036 			m5 &= TRACK_BIT_MASK;
       
  1037 			if (!(flags & DC_EXEC)) {
       
  1038 				for (; m5 != 0; m5 >>= 1) if (m5 & 1) cost += _price.remove_rail;
       
  1039 				return cost;
       
  1040 			}
       
  1041 			/* FALLTHROUGH */
       
  1042 
       
  1043 		case RAIL_TILE_NORMAL: {
       
  1044 			uint i;
       
  1045 
       
  1046 			for (i = 0; m5 != 0; i++, m5 >>= 1) {
       
  1047 				if (m5 & 1) {
       
  1048 					ret = DoCommand(tile, 0, i, flags, CMD_REMOVE_SINGLE_RAIL);
       
  1049 					if (CmdFailed(ret)) return CMD_ERROR;
       
  1050 					cost += ret;
       
  1051 				}
       
  1052 			}
  1029 			}
  1053 			return cost;
  1030 			return cost;
  1054 		}
  1031 		}
  1055 
  1032 
  1056 		case RAIL_TILE_DEPOT_WAYPOINT:
  1033 		case RAIL_TILE_DEPOT_WAYPOINT: