road_cmd.c
changeset 3234 a2791a480b71
parent 3189 bf047128dee7
child 3242 4c32bf21153b
equal deleted inserted replaced
3233:9e09534dcac1 3234:a2791a480b71
   127 
   127 
   128 	switch (ti.type) {
   128 	switch (ti.type) {
   129 		case MP_TUNNELBRIDGE:
   129 		case MP_TUNNELBRIDGE:
   130 			if (!EnsureNoVehicleZ(tile, TilePixelHeight(tile))) return CMD_ERROR;
   130 			if (!EnsureNoVehicleZ(tile, TilePixelHeight(tile))) return CMD_ERROR;
   131 
   131 
   132 			if ((ti.map5 & 0xE9) == 0xE8) {
   132 			if (!IsBridge(tile) ||
   133 				if (pieces & ROAD_X) return CMD_ERROR;
   133 					!IsBridgeMiddle(tile) ||
   134 			} else if ((ti.map5 & 0xE9) == 0xE9) {
   134 					!IsTransportUnderBridge(tile) ||
   135 				if (pieces & ROAD_Y) return CMD_ERROR;
   135 					GetTransportTypeUnderBridge(tile) != TRANSPORT_ROAD ||
   136 			} else {
   136 					(pieces & ComplementRoadBits(GetRoadBitsUnderBridge(tile))) != 0) {
   137 				return CMD_ERROR;
   137 				return CMD_ERROR;
   138 			}
   138 			}
   139 
   139 
   140 			cost = _price.remove_road * 2;
   140 			cost = _price.remove_road * 2;
   141 
   141 
   355 			/* check for flat land */
   355 			/* check for flat land */
   356 			if (IsSteepTileh(ti.tileh)) { // very steep tile
   356 			if (IsSteepTileh(ti.tileh)) { // very steep tile
   357 				return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
   357 				return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
   358 			}
   358 			}
   359 
   359 
   360 			/* is this middle part of a bridge? */
   360 			if (!IsBridge(tile) || !IsBridgeMiddle(tile)) goto do_clear;
   361 			if ((ti.map5 & 0xC0) != 0xC0) goto do_clear;
       
   362 
   361 
   363 			/* only allow roads pertendicular to bridge */
   362 			/* only allow roads pertendicular to bridge */
   364 			if (((pieces & ROAD_Y) != 0) == ((ti.map5 & 0x01U) != 0)) goto do_clear;
   363 			if ((pieces & (GetBridgeAxis(tile) == AXIS_X ? ROAD_X : ROAD_Y)) != 0) {
       
   364 				goto do_clear;
       
   365 			}
   365 
   366 
   366 			/* check if clear land under bridge */
   367 			/* check if clear land under bridge */
   367 			if ((ti.map5 & 0xF8) == 0xE8) { /* road under bridge */
   368 			if (IsTransportUnderBridge(tile)) {
   368 				return_cmd_error(STR_1007_ALREADY_BUILT);
   369 				switch (GetTransportTypeUnderBridge(tile)) {
   369 			} else if ((ti.map5 & 0xE0) == 0xE0) { /* other transport route under bridge */
   370 					case TRANSPORT_ROAD: return_cmd_error(STR_1007_ALREADY_BUILT);
   370 				return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
   371 					default: return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
   371 			} else if ((ti.map5 & 0xF8) == 0xC8) { /* water under bridge */
   372 				}
   372 				return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
   373 			} else {
       
   374 				if (IsWaterUnderBridge(tile)) {
       
   375 					return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
       
   376 				}
   373 			}
   377 			}
   374 
   378 
   375 			/* all checked, can build road now! */
   379 			/* all checked, can build road now! */
   376 			cost = _price.build_road * 2;
   380 			cost = _price.build_road * 2;
   377 			if (flags & DC_EXEC) {
   381 			if (flags & DC_EXEC) {