(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.
authorpasky
Sun, 27 Mar 2005 00:28:14 +0000
changeset 1576 a066e33fa297
parent 1575 a566a645401f
child 1577 6528a7b4e180
(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
player.h
players.c
saveload.c
--- a/ai.c	Sat Mar 26 21:22:29 2005 +0000
+++ b/ai.c	Sun Mar 27 00:28:14 2005 +0000
@@ -3640,7 +3640,7 @@
 
 }
 
-static void AiRemovePlayerRailOrRoad(Player *p, uint tile)
+static void AiRemovePlayerRailOrRoad(Player *p, TileIndex tile)
 {
 	byte m5;
 
@@ -3758,10 +3758,11 @@
 
 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()) {
--- a/player.h	Sat Mar 26 21:22:29 2005 +0000
+++ b/player.h	Sun Mar 27 00:28:14 2005 +0000
@@ -27,7 +27,7 @@
 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;
--- a/players.c	Sat Mar 26 21:22:29 2005 +0000
+++ b/players.c	Sun Mar 27 00:28:14 2005 +0000
@@ -974,7 +974,8 @@
 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),
--- a/saveload.c	Sat Mar 26 21:22:29 2005 +0000
+++ b/saveload.c	Sun Mar 27 00:28:14 2005 +0000
@@ -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