(svn r1676) Increase the size of TileIndex and TileIndexDiff to 32bits and adapt the save/load data and some other parts of the code to that change
authortron
Tue, 25 Jan 2005 21:43:57 +0000
changeset 1174 6a5e747f3ba6
parent 1173 9f4144da21c6
child 1175 a4bdf4c26d32
(svn r1676) Increase the size of TileIndex and TileIndexDiff to 32bits and adapt the save/load data and some other parts of the code to that change

WARNING: If i made any mistake here it WILL lead to corrupted savegames!
ai.c
industry_cmd.c
landscape.c
macros.h
map.h
players.c
station_cmd.c
texteff.c
town_cmd.c
train_cmd.c
vehicle.c
vehicle.h
--- a/ai.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/ai.c	Tue Jan 25 21:43:57 2005 +0000
@@ -3762,7 +3762,7 @@
 		uint tile = ++p->ai.state_counter;
 
 		// Iterated all tiles?
-		if (tile == 0) {
+		if (tile >= MapSize()) {
 			p->ai.state = AIS_REMOVE_STATION;
 			return;
 		}
--- a/industry_cmd.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/industry_cmd.c	Tue Jan 25 21:43:57 2005 +0000
@@ -1876,7 +1876,8 @@
 };
 
 static const byte _industry_desc[] = {
-	SLE_VAR(Industry,xy,							SLE_UINT16),
+	SLE_CONDVAR(Industry, xy,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Industry, xy,					SLE_UINT32, 6, 255),
 	SLE_VAR(Industry,width,						SLE_UINT8),
 	SLE_VAR(Industry,height,					SLE_UINT8),
 	SLE_REF(Industry,town,						REF_TOWN),
--- a/landscape.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/landscape.c	Tue Jan 25 21:43:57 2005 +0000
@@ -730,10 +730,10 @@
 	int rn = rng;
 	uint32 r = Random();
 
-	return TILE_XY(
+	return TILE_MASK(TILE_XY(
 		TileX(a) + ((byte)r * rn * 2 >> 8) - rn,
 		TileY(a) + ((byte)(r >> 8) * rn * 2 >> 8) - rn
-	);
+	));
 }
 
 // This function checks if we add addx/addy to tile, if we
--- a/macros.h	Tue Jan 25 21:00:38 2005 +0000
+++ b/macros.h	Tue Jan 25 21:43:57 2005 +0000
@@ -160,6 +160,7 @@
 static inline void swap_byte(byte *a, byte *b) { byte t = *a; *a = *b; *b = t; }
 static inline void swap_uint16(uint16 *a, uint16 *b) { uint16 t = *a; *a = *b; *b = t; }
 static inline void swap_int16(int16 *a, int16 *b) { int16 t = *a; *a = *b; *b = t; }
+static inline void swap_int32(int32 *a, int32 *b) { int32 t = *a; *a = *b; *b = t; }
 static inline void swap_tile(TileIndex *a, TileIndex *b) { TileIndex t = *a; *a = *b; *b = t; }
 
 
--- a/map.h	Tue Jan 25 21:00:38 2005 +0000
+++ b/map.h	Tue Jan 25 21:43:57 2005 +0000
@@ -2,7 +2,7 @@
 #define MAP_H
 
 #define TILE_FROM_XY(x,y) (int)((((y) >> 4) << MapLogX()) + ((x) >> 4))
-#define TILE_XY(x,y) (int)(((y) << MapLogX()) + (x))
+#define TILE_XY(x,y) (((y) << MapLogX()) + (x))
 
 #define TILE_MASK(x) ((x) & ((1 << (MapLogX() + MapLogY())) - 1))
 
@@ -26,8 +26,8 @@
 /* The number of tiles in the map */
 static inline uint MapSize(void) { return MapSizeX() * MapSizeY(); }
 
+typedef uint32 TileIndex;
 
-typedef uint16 TileIndex;
 
 static inline uint TileX(TileIndex tile)
 {
@@ -40,7 +40,7 @@
 }
 
 
-typedef int16 TileIndexDiff;
+typedef int32 TileIndexDiff;
 
 typedef struct TileIndexDiffC {
 	int16 x;
--- a/players.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/players.c	Tue Jan 25 21:43:57 2005 +0000
@@ -923,8 +923,10 @@
 	SLE_VAR(Player,block_preview,		SLE_UINT8),
 
 	SLE_VAR(Player,cargo_types,			SLE_UINT16),
-	SLE_VAR(Player,location_of_house,SLE_UINT16),
-	SLE_VAR(Player,last_build_coordinate,SLE_UINT16),
+	SLE_CONDVAR(Player, location_of_house,     SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Player, location_of_house,     SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Player, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Player, last_build_coordinate, SLE_UINT32, 6, 255),
 	SLE_VAR(Player,inaugurated_year,SLE_UINT8),
 
 	SLE_ARR(Player,share_owners,		SLE_UINT8, 4),
@@ -983,13 +985,17 @@
 
 	SLE_VAR(PlayerAI,route_type_mask,		SLE_UINT8),
 
-	SLE_VAR(PlayerAI,start_tile_a,			SLE_UINT16),
-	SLE_VAR(PlayerAI,cur_tile_a,				SLE_UINT16),
+	SLE_CONDVAR(PlayerAI, start_tile_a, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(PlayerAI, start_tile_a, SLE_UINT32, 6, 255),
+	SLE_CONDVAR(PlayerAI, cur_tile_a,   SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(PlayerAI, cur_tile_a,   SLE_UINT32, 6, 255),
 	SLE_VAR(PlayerAI,start_dir_a,				SLE_UINT8),
 	SLE_VAR(PlayerAI,cur_dir_a,					SLE_UINT8),
 
-	SLE_VAR(PlayerAI,start_tile_b,			SLE_UINT16),
-	SLE_VAR(PlayerAI,cur_tile_b,				SLE_UINT16),
+	SLE_CONDVAR(PlayerAI, start_tile_b, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(PlayerAI, start_tile_b, SLE_UINT32, 6, 255),
+	SLE_CONDVAR(PlayerAI, cur_tile_b,   SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(PlayerAI, cur_tile_b,   SLE_UINT32, 6, 255),
 	SLE_VAR(PlayerAI,start_dir_b,				SLE_UINT8),
 	SLE_VAR(PlayerAI,cur_dir_b,					SLE_UINT8),
 
@@ -1004,8 +1010,10 @@
 };
 
 static const byte _player_ai_build_rec_desc[] = {
-	SLE_VAR(AiBuildRec,spec_tile,			SLE_UINT16),
-	SLE_VAR(AiBuildRec,use_tile,			SLE_UINT16),
+	SLE_CONDVAR(AiBuildRec,spec_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(AiBuildRec,spec_tile, SLE_UINT32, 6, 255),
+	SLE_CONDVAR(AiBuildRec,use_tile,  SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(AiBuildRec,use_tile,  SLE_UINT32, 6, 255),
 	SLE_VAR(AiBuildRec,rand_rng,			SLE_UINT8),
 	SLE_VAR(AiBuildRec,cur_building_rule,SLE_UINT8),
 	SLE_VAR(AiBuildRec,unk6,					SLE_UINT8),
--- a/station_cmd.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/station_cmd.c	Tue Jan 25 21:43:57 2005 +0000
@@ -2810,12 +2810,18 @@
 
 
 static const byte _station_desc[] = {
-	SLE_VAR(Station,xy,							SLE_UINT16),
-	SLE_VAR(Station,bus_tile,				SLE_UINT16),
-	SLE_VAR(Station,lorry_tile,			SLE_UINT16),
-	SLE_VAR(Station,train_tile,			SLE_UINT16),
-	SLE_VAR(Station,airport_tile,		SLE_UINT16),
-	SLE_VAR(Station,dock_tile,			SLE_UINT16),
+	SLE_CONDVAR(Station, xy,           SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Station, xy,           SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Station, bus_tile,     SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Station, bus_tile,     SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Station, lorry_tile,   SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Station, lorry_tile,   SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Station, train_tile,   SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Station, train_tile,   SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Station, airport_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Station, airport_tile, SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Station, dock_tile,    SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Station, dock_tile,    SLE_UINT32, 6, 255),
 	SLE_REF(Station,town,						REF_TOWN),
 	SLE_VAR(Station,trainst_w,			SLE_UINT8),
 	SLE_CONDVAR(Station,trainst_h,	SLE_UINT8, 2, 255),
--- a/texteff.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/texteff.c	Tue Jan 25 21:43:57 2005 +0000
@@ -351,7 +351,11 @@
 
 static void SaveLoad_ANIT(void)
 {
-	SlArray(_animated_tile_list, lengthof(_animated_tile_list), SLE_UINT16);
+	if (_sl.version < 6)
+		SlArray(_animated_tile_list, lengthof(_animated_tile_list),
+			SLE_FILE_U16 | SLE_VAR_U32);
+	else
+		SlArray(_animated_tile_list, lengthof(_animated_tile_list), SLE_UINT32);
 }
 
 
--- a/town_cmd.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/town_cmd.c	Tue Jan 25 21:43:57 2005 +0000
@@ -1865,7 +1865,8 @@
 
 // Save and load of towns.
 static const byte _town_desc[] = {
-	SLE_VAR(Town,xy,					SLE_UINT16),
+	SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Town, xy, SLE_UINT32, 6, 255),
 
 	SLE_CONDVAR(Town,population,	SLE_FILE_U16 | SLE_VAR_U32, 0, 2),
 	SLE_CONDVAR(Town,population,	SLE_UINT32, 3, 255),
--- a/train_cmd.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/train_cmd.c	Tue Jan 25 21:43:57 2005 +0000
@@ -947,8 +947,8 @@
 		if (!(b->u.rail.track & 0x80)) b->direction ^= 4;
 
 		/* swap more variables */
-		swap_int16(&a->x_pos, &b->x_pos);
-		swap_int16(&a->y_pos, &b->y_pos);
+		swap_int32(&a->x_pos, &b->x_pos);
+		swap_int32(&a->y_pos, &b->y_pos);
 		swap_tile(&a->tile, &b->tile);
 		swap_byte(&a->z_pos, &b->z_pos);
 
--- a/vehicle.c	Tue Jan 25 21:00:38 2005 +0000
+++ b/vehicle.c	Tue Jan 25 21:43:57 2005 +0000
@@ -1765,11 +1765,15 @@
 	SLE_VAR(Vehicle,string_id,				SLE_STRINGID),
 	SLE_VAR(Vehicle,unitnumber,				SLE_UINT8),
 	SLE_VAR(Vehicle,owner,						SLE_UINT8),
-	SLE_VAR(Vehicle,tile,							SLE_UINT16),
-	SLE_VAR(Vehicle,dest_tile,				SLE_UINT16),
+	SLE_CONDVAR(Vehicle,tile,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,tile,					SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Vehicle,dest_tile,		SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,dest_tile,		SLE_UINT32, 6, 255),
 
-	SLE_VAR(Vehicle,x_pos,						SLE_INT16),
-	SLE_VAR(Vehicle,y_pos,						SLE_INT16),
+	SLE_CONDVAR(Vehicle,x_pos,				SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,x_pos,				SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Vehicle,y_pos,				SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,y_pos,				SLE_UINT32, 6, 255),
 	SLE_VAR(Vehicle,z_pos,						SLE_UINT8),
 	SLE_VAR(Vehicle,direction,				SLE_UINT8),
 
@@ -1918,10 +1922,13 @@
 
 	SLE_VAR(Vehicle,subtype,					SLE_UINT8),
 
-	SLE_VAR(Vehicle,tile,							SLE_UINT16),
+	SLE_CONDVAR(Vehicle,tile,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,tile,					SLE_UINT32, 6, 255),
 
-	SLE_VAR(Vehicle,x_pos,						SLE_INT16),
-	SLE_VAR(Vehicle,y_pos,						SLE_INT16),
+	SLE_CONDVAR(Vehicle,x_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
+	SLE_CONDVAR(Vehicle,x_pos,				SLE_INT32, 6, 255),
+	SLE_CONDVAR(Vehicle,y_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
+	SLE_CONDVAR(Vehicle,y_pos,				SLE_INT32, 6, 255),
 	SLE_VAR(Vehicle,z_pos,						SLE_UINT8),
 
 	SLE_VAR(Vehicle,cur_image,				SLE_UINT16),
@@ -1948,11 +1955,15 @@
 	SLE_REF(Vehicle,next,							REF_VEHICLE_OLD),
 
 	SLE_VAR(Vehicle,subtype,					SLE_UINT8),
-	SLE_VAR(Vehicle,tile,							SLE_UINT16),
-	SLE_VAR(Vehicle,dest_tile,				SLE_UINT16),
+	SLE_CONDVAR(Vehicle,tile,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,tile,					SLE_UINT32, 6, 255),
+	SLE_CONDVAR(Vehicle,dest_tile,		SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Vehicle,dest_tile,		SLE_UINT32, 6, 255),
 
-	SLE_VAR(Vehicle,x_pos,						SLE_INT16),
-	SLE_VAR(Vehicle,y_pos,						SLE_INT16),
+	SLE_CONDVAR(Vehicle,x_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
+	SLE_CONDVAR(Vehicle,x_pos,				SLE_INT32, 6, 255),
+	SLE_CONDVAR(Vehicle,y_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
+	SLE_CONDVAR(Vehicle,y_pos,				SLE_INT32, 6, 255),
 	SLE_VAR(Vehicle,z_pos,						SLE_UINT8),
 	SLE_VAR(Vehicle,direction,				SLE_UINT8),
 
@@ -2069,7 +2080,8 @@
 }
 
 static const byte _depot_desc[] = {
-	SLE_VAR(Depot,xy,						SLE_UINT16),
+	SLE_CONDVAR(Depot, xy,			SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Depot, xy,			SLE_UINT32, 6, 255),
 	SLE_VAR(Depot,town_index,		SLE_UINT16),
 	SLE_END()
 };
@@ -2095,7 +2107,8 @@
 }
 
 static const byte _waypoint_desc[] = {
-	SLE_VAR(Waypoint,xy,								SLE_UINT16),
+	SLE_CONDVAR(Waypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
+	SLE_CONDVAR(Waypoint, xy, SLE_UINT32, 6, 255),
 	SLE_VAR(Waypoint,town_or_string,		SLE_UINT16),
 	SLE_VAR(Waypoint,deleted,						SLE_UINT8),
 
--- a/vehicle.h	Tue Jan 25 21:00:38 2005 +0000
+++ b/vehicle.h	Tue Jan 25 21:43:57 2005 +0000
@@ -102,8 +102,8 @@
 	TileIndex tile;		// Current tile index
 	TileIndex dest_tile; // Heading for this tile
 
-	int16 x_pos;			// coordinates
-	int16 y_pos;
+	int32 x_pos;			// coordinates
+	int32 y_pos;
 	byte z_pos;
 	byte direction;		// facing