(svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
authortron
Sun, 09 Jan 2005 17:55:11 +0000
changeset 955 25bc5b97e3e2
parent 954 4d052517a993
child 956 d72a565cc672
(svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
macros.h
map.c
map.h
misc.c
--- a/macros.h	Sun Jan 09 16:02:06 2005 +0000
+++ b/macros.h	Sun Jan 09 17:55:11 2005 +0000
@@ -81,16 +81,6 @@
 
 #define TILE_ASSERT(x) assert( TILE_MASK(x) == (x) );
 
-uint SafeTileAdd(uint x, int add, const char *exp, const char *file, int line);
-
-#if !defined(_DEBUG)
-#	define TILE_ADD(x,y) ((x)+(y))
-#else
-#	define TILE_ADD(x,y) (SafeTileAdd((x),(y), #x ", " #y,  __FILE__, __LINE__))
-#endif
-
-#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TILE_XY(x,y))
-
 //#define REMADP_COORDS(x,y,z) { int t = x; x = (y-t)*2; y+=t-z; }
 
 #define PACK_POINT(x,y) ((x) | ((y) << 16))
--- a/map.c	Sun Jan 09 16:02:06 2005 +0000
+++ b/map.c	Sun Jan 09 17:55:11 2005 +0000
@@ -18,6 +18,42 @@
 uint16 _map2                [MAP_SIZE];
 byte   _map_extra_bits      [MAP_SIZE / 4];
 
+
+#ifdef _DEBUG
+TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
+	const char *exp, const char *file, int line)
+{
+	int dx;
+	int dy;
+	uint x;
+	uint y;
+
+	dx = add & MapMaxX();
+	if (dx >= MapSizeX() / 2) dx -= MapSizeX();
+	dy = (add - dx) / (int)MapSizeX();
+
+	x = TileX(tile) + dx;
+	y = TileY(tile) + dy;
+
+	if (x >= MapSizeX() || y >= MapSizeY()) {
+		char buf[512];
+
+		sprintf(buf, "TILE_ADD(%s) when adding 0x%.4X and 0x%.4X failed",
+			exp, tile, add);
+#if !defined(_MSC_VER)
+		fprintf(stderr, "%s:%d %s\n", file, line, buf);
+#else
+		_assert(buf, (char*)file, line);
+#endif
+	}
+
+	assert(TILE_XY(x,y) == TILE_MASK(tile + add));
+
+	return TILE_XY(x,y);
+}
+#endif
+
+
 const TileIndexDiffC _tileoffs_by_dir[] = {
 	{-1,  0},
 	{ 0,  1},
--- a/map.h	Sun Jan 09 16:02:06 2005 +0000
+++ b/map.h	Sun Jan 09 17:55:11 2005 +0000
@@ -52,6 +52,18 @@
 	return (tidc.y << MapLogX()) + tidc.x;
 }
 
+
+#ifndef _DEBUG
+	#define TILE_ADD(x,y) ((x) + (y))
+#else
+	extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
+		const char *exp, const char *file, int line);
+	#define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__))
+#endif
+
+#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TILE_XY(x, y))
+
+
 static inline TileIndexDiff TileOffsByDir(uint dir)
 {
 	extern const TileIndexDiffC _tileoffs_by_dir[4];
--- a/misc.c	Sun Jan 09 16:02:06 2005 +0000
+++ b/misc.c	Sun Jan 09 17:55:11 2005 +0000
@@ -730,27 +730,6 @@
 }
 
 
-uint SafeTileAdd(uint tile, int add, const char *exp, const char *file, int line)
-{
-	uint x = TileX(tile) + (signed char)(add & 0xFF);
-	uint y = TileY(tile) + ((((0x8080 + add)>>8) & 0xFF) - 0x80);
-
-	if (x >= MapSizeX() || y >= MapSizeY()) {
-		char buf[512];
-
-		sprintf(buf, "TILE_ADD(%s) when adding 0x%.4X and %d failed", exp, tile, add);
-#if !defined(_DEBUG) || !defined(_MSC_VER)
-		fprintf(stderr, "%s:%d %s\n", file, line, buf);
-#else
-		_assert(buf, (char*)file, line);
-#endif
-	}
-
-	assert(TILE_XY(x,y) == TILE_MASK(tile + add));
-
-	return TILE_XY(x,y);
-}
-
 static void Save_NAME()
 {
 	int i;