mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-17 21:25:40 +00:00
(svn r9912) -Fix: the AIs could build any road(station)s.
This commit is contained in:
parent
df3a9b4052
commit
ef48d1012b
@ -2600,10 +2600,10 @@ static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData
|
|||||||
} else if (p->mode == 1) {
|
} else if (p->mode == 1) {
|
||||||
if (_want_road_truck_station) {
|
if (_want_road_truck_station) {
|
||||||
// Truck station
|
// Truck station
|
||||||
ret = DoCommand(c, p->attr, RoadStop::TRUCK, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_ROAD_STOP);
|
ret = DoCommand(c, p->attr, ROADTYPES_ROAD << 2 | RoadStop::TRUCK, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_ROAD_STOP);
|
||||||
} else {
|
} else {
|
||||||
// Bus station
|
// Bus station
|
||||||
ret = DoCommand(c, p->attr, RoadStop::BUS, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_ROAD_STOP);
|
ret = DoCommand(c, p->attr, ROADTYPES_ROAD << 2 | RoadStop::BUS, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_ROAD_STOP);
|
||||||
}
|
}
|
||||||
clear_town_stuff:;
|
clear_town_stuff:;
|
||||||
|
|
||||||
|
@ -42,9 +42,9 @@ int AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte
|
|||||||
return AI_DoCommand(tile, direction + (numtracks << 8) + (length << 16), 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_RAILROAD_STATION);
|
return AI_DoCommand(tile, direction + (numtracks << 8) + (length << 16), 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_RAILROAD_STATION);
|
||||||
|
|
||||||
if (type == AI_BUS)
|
if (type == AI_BUS)
|
||||||
return AI_DoCommand(tile, direction, RoadStop::BUS, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD_STOP);
|
return AI_DoCommand(tile, direction, ROADTYPES_ROAD << 2 | RoadStop::BUS, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD_STOP);
|
||||||
|
|
||||||
return AI_DoCommand(tile, direction, RoadStop::TRUCK, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD_STOP);
|
return AI_DoCommand(tile, direction, ROADTYPES_ROAD << 2 | RoadStop::TRUCK, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD_STOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ int AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag)
|
|||||||
if (p->ainew.tbt == AI_TRAIN) {
|
if (p->ainew.tbt == AI_TRAIN) {
|
||||||
return AI_DoCommand(tile_a, tile_b, (0x00 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
return AI_DoCommand(tile_a, tile_b, (0x00 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
||||||
} else {
|
} else {
|
||||||
return AI_DoCommand(tile_a, tile_b, (0x80 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
return AI_DoCommand(tile_a, tile_b, ((0x80 | ROADTYPES_ROAD) << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte fla
|
|||||||
} else {
|
} else {
|
||||||
// Tunnel code
|
// Tunnel code
|
||||||
if ((AI_PATHFINDER_FLAG_TUNNEL & route_extra[part]) != 0) {
|
if ((AI_PATHFINDER_FLAG_TUNNEL & route_extra[part]) != 0) {
|
||||||
cost += AI_DoCommand(route[part], 0x200, 0, flag, CMD_BUILD_TUNNEL);
|
cost += AI_DoCommand(route[part], 0x200 | ROADTYPES_ROAD, 0, flag, CMD_BUILD_TUNNEL);
|
||||||
PathFinderInfo->position++;
|
PathFinderInfo->position++;
|
||||||
// TODO: problems!
|
// TODO: problems!
|
||||||
if (CmdFailed(cost)) {
|
if (CmdFailed(cost)) {
|
||||||
|
@ -237,17 +237,10 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
|
|||||||
if (IsTunnel(atile)) {
|
if (IsTunnel(atile)) {
|
||||||
if (GetTunnelDirection(atile) != i) continue;
|
if (GetTunnelDirection(atile) != i) continue;
|
||||||
} else {
|
} else {
|
||||||
if ((_m[atile].m5 & 1) != DiagDirToAxis(i)) continue;
|
if (GetBridgeRampDirection(atile) != i) continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// But also if we are on a bridge, we can only move a certain direction
|
|
||||||
if (!PathFinderInfo->rail_or_road && IsRoad(ctile)) {
|
|
||||||
if (IsTileType(ctile, MP_TUNNELBRIDGE)) {
|
|
||||||
// An existing bridge/tunnel... let's test the direction ;)
|
|
||||||
if ((_m[ctile].m5 & 1) != (i & 1)) continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((AI_PATHFINDER_FLAG_BRIDGE & current->path.node.user_data[0]) != 0 ||
|
if ((AI_PATHFINDER_FLAG_BRIDGE & current->path.node.user_data[0]) != 0 ||
|
||||||
(AI_PATHFINDER_FLAG_TUNNEL & current->path.node.user_data[0]) != 0) {
|
(AI_PATHFINDER_FLAG_TUNNEL & current->path.node.user_data[0]) != 0) {
|
||||||
@ -291,9 +284,9 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
|
|||||||
dir = 0;
|
dir = 0;
|
||||||
} else {
|
} else {
|
||||||
// It already has road.. check if we miss any bits!
|
// It already has road.. check if we miss any bits!
|
||||||
if ((_m[ctile].m5 & dir) != dir) {
|
if ((GetRoadBits(ctile, ROADTYPE_ROAD) & dir) != dir) {
|
||||||
// We do miss some pieces :(
|
// We do miss some pieces :(
|
||||||
dir &= ~_m[ctile].m5;
|
dir &= ~GetRoadBits(ctile, ROADTYPE_ROAD);
|
||||||
} else {
|
} else {
|
||||||
dir = 0;
|
dir = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user