summaryrefslogtreecommitdiff
path: root/ai.c
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2005-03-25 17:30:54 +0000
committerDarkvater <darkvater@openttd.org>2005-03-25 17:30:54 +0000
commit7da3b3b92d7e4e9b25c4b0d419a4dfb3ea6a3fff (patch)
treeb34a0cc2fdff699cda869e5823f0501b2b8c37aa /ai.c
parent05dbeaeba4774d878f574d12d62acae671d9f703 (diff)
downloadopenttd-7da3b3b92d7e4e9b25c4b0d419a4dfb3ea6a3fff.tar.xz
(svn r2066) - Fix: [ 1164248 ] game crash while AI builds bridge. Also protect bridge building against invalid bridges and some safeguards when drawing.
Diffstat (limited to 'ai.c')
-rw-r--r--ai.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/ai.c b/ai.c
index 1bbc88af2..18bdc162f 100644
--- a/ai.c
+++ b/ai.c
@@ -1976,7 +1976,7 @@ static inline void AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex tile,
}
// Is building a (rail)bridge possible at this place (type doesn't matter)?
- if (DoCommandByTile(tile_new, tile, arf->player->ai.railtype_to_use<<8,
+ if (DoCommandByTile(tile_new, tile, 0 | arf->player->ai.railtype_to_use << 8,
DC_AUTO, CMD_BUILD_BRIDGE) == CMD_ERROR)
return;
AiBuildRailRecursive(arf, tile_new, dir2);
@@ -2139,16 +2139,16 @@ static void AiBuildRailConstruct(Player *p)
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 + (p->ai.railtype_to_use << 8); i != 0; i--) {
+ for (i = MAX_BRIDGES - 1; i != 0; i--) {
if (CheckBridge_Stuff(i, bridge_len)) {
- int32 cost = DoCommandByTile(arf.bridge_end_tile, p->ai.cur_tile_a, i, DC_AUTO, CMD_BUILD_BRIDGE);
+ int32 cost = DoCommandByTile(arf.bridge_end_tile, p->ai.cur_tile_a, i | (p->ai.railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
if (cost != CMD_ERROR && cost < (p->player_money >> 5))
break;
}
}
// Build it
- DoCommandByTile(arf.bridge_end_tile, p->ai.cur_tile_a, i, DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
+ DoCommandByTile(arf.bridge_end_tile, p->ai.cur_tile_a, i | (p->ai.railtype_to_use << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
p->ai.cur_tile_a = arf.bridge_end_tile;
p->ai.state_counter = 0;