|
@@ -2885,13 +2885,13 @@ static inline void AiCheckBuildRoadBridg
|
|
|
}
|
|
|
if (type != MP_WATER && type != MP_RAILWAY && type != MP_STREET) return;
|
|
|
flag = true;
|
|
|
}
|
|
|
|
|
|
// Is building a (rail)bridge possible at this place (type doesn't matter)?
|
|
|
if (CmdFailed(DoCommand(tile_new, tile, 0x8000, DC_AUTO, CMD_BUILD_BRIDGE)))
|
|
|
if (CmdFailed(DoCommand(tile_new, tile, ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE)))
|
|
|
return;
|
|
|
AiBuildRoadRecursive(arf, tile_new, dir2);
|
|
|
|
|
|
// At the bottom depth, check if the new path is better than the old one.
|
|
|
if (arf->depth == 1) {
|
|
|
if (AiCheckRoadPathBetter(arf, p)) arf->bridge_end_tile = tile_new;
|
|
@@ -3035,19 +3035,19 @@ do_some_terraform:
|
|
|
* start with best bridge, then go down to worse and worse bridges
|
|
|
* unnecessary to check for worse bridge (i=0), since AI will always build that.
|
|
|
*AI is so fucked up that fixing this small thing will probably not solve a thing
|
|
|
*/
|
|
|
for (i = 10; i != 0; i--) {
|
|
|
if (CheckBridge_Stuff(i, bridge_len)) {
|
|
|
int32 cost = DoCommand(tile, p->ai.cur_tile_a, i + (0x80 << 8), DC_AUTO, CMD_BUILD_BRIDGE);
|
|
|
int32 cost = DoCommand(tile, p->ai.cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE);
|
|
|
if (!CmdFailed(cost) && cost < (p->player_money >> 5)) break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Build it
|
|
|
DoCommand(tile, p->ai.cur_tile_a, i + (0x80 << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
|
|
|
DoCommand(tile, p->ai.cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
|
|
|
|
|
|
p->ai.state_counter = 0;
|
|
|
} else if (arf.best_ptr[0] & 0x40) {
|
|
|
// tunnel
|
|
|
DoCommand(tile, 0x200, 0, DC_AUTO | DC_EXEC, CMD_BUILD_TUNNEL);
|
|
|
p->ai.cur_tile_a = _build_tunnel_endtile;
|