diff options
-rw-r--r-- | macros.h | 10 | ||||
-rw-r--r-- | map.c | 36 | ||||
-rw-r--r-- | map.h | 12 | ||||
-rw-r--r-- | misc.c | 21 |
4 files changed, 48 insertions, 31 deletions
@@ -81,16 +81,6 @@ enum { #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)) @@ -18,6 +18,42 @@ byte _map_owner [MAP_SIZE]; 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}, @@ -52,6 +52,18 @@ static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) 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]; @@ -730,27 +730,6 @@ int FindFirstBit(uint32 value) } -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; |