From 5fa38a4fc76892ab11010a1da4797e70b3d9b0e8 Mon Sep 17 00:00:00 2001 From: pasky Date: Sun, 27 Mar 2005 00:28:14 +0000 Subject: [PATCH] (svn r2080) - Fix: [OldAI] p->ai.state_counter was uint16 but could hold a tile index, therefore overflowing - changed that to uint32 and bumped the savegame revision to 32. It *MIGHT* close bug 1151374 - it certainly caused AI to stop building anything sometimes. - While at it, use TileIndex as the tile index type in AiRemovePlayerRailOrRoad() and AiStateRemoveTrack(). - Make the number of tiles scanned 4*MapSizeX() instead of 1000. It *MIGHT* close bug 1116614. --- ai.c | 7 ++++--- player.h | 2 +- players.c | 3 ++- saveload.c | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ai.c b/ai.c index 18bdc162fa..f740cb28da 100644 --- a/ai.c +++ b/ai.c @@ -3640,7 +3640,7 @@ static void AiStateRemoveStation(Player *p) } -static void AiRemovePlayerRailOrRoad(Player *p, uint tile) +static void AiRemovePlayerRailOrRoad(Player *p, TileIndex tile) { byte m5; @@ -3758,10 +3758,11 @@ pos_3: static void AiStateRemoveTrack(Player *p) { - int num = 1000; + /* Was 1000 for standard 8x8 maps. */ + int num = MapSizeX() * 4; do { - uint tile = ++p->ai.state_counter; + TileIndex tile = ++p->ai.state_counter; // Iterated all tiles? if (tile >= MapSize()) { diff --git a/player.h b/player.h index 2c93c2b0ee..2fc8fd89b0 100644 --- a/player.h +++ b/player.h @@ -27,7 +27,7 @@ typedef struct AiBuildRec { typedef struct PlayerAI { byte state; byte tick; // Used to determine how often to move - uint16 state_counter; + uint32 state_counter; // Can hold tile index! uint16 timeout_counter; byte state_mode; diff --git a/players.c b/players.c index 64c6c52526..eb5733494c 100644 --- a/players.c +++ b/players.c @@ -974,7 +974,8 @@ static const byte _player_economy_desc[] = { static const byte _player_ai_desc[] = { SLE_VAR(PlayerAI,state, SLE_UINT8), SLE_VAR(PlayerAI,tick, SLE_UINT8), - SLE_VAR(PlayerAI,state_counter, SLE_UINT16), + SLE_CONDVAR(PlayerAI,state_counter, SLE_FILE_U16 | SLE_VAR_U32, 0, 12), + SLE_CONDVAR(PlayerAI,state_counter, SLE_UINT32, 13, 255), SLE_VAR(PlayerAI,timeout_counter, SLE_UINT16), SLE_VAR(PlayerAI,state_mode, SLE_UINT8), diff --git a/saveload.c b/saveload.c index d436e97f37..e9e504a5c2 100644 --- a/saveload.c +++ b/saveload.c @@ -8,7 +8,7 @@ #include "saveload.h" enum { - SAVEGAME_MAJOR_VERSION = 0xC, + SAVEGAME_MAJOR_VERSION = 13, SAVEGAME_MINOR_VERSION = 0x1, SAVEGAME_LOADABLE_VERSION = (SAVEGAME_MAJOR_VERSION << 8) + SAVEGAME_MINOR_VERSION