diff options
-rw-r--r-- | src/map.cpp | 31 | ||||
-rw-r--r-- | src/map_func.h | 28 |
2 files changed, 24 insertions, 35 deletions
diff --git a/src/map.cpp b/src/map.cpp index cdca65e00..3dfe47890 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -93,37 +93,6 @@ TileIndex TileAdd(TileIndex tile, TileIndexDiff add, #endif /*! - * Scales the given value by the map size, where the given value is - * for a 256 by 256 map. - * @param n the value to scale - * @return the scaled size - */ -uint ScaleByMapSize(uint n) -{ - /* First shift by 12 to prevent integer overflow for large values of n. - * >>12 is safe since the min mapsize is 64x64 - * Add (1<<4)-1 to round upwards. */ - return (n * (MapSize() >> 12) + (1 << 4) - 1) >> 4; -} - - -/*! - * Scales the given value by the maps circumference, where the given - * value is for a 256 by 256 map - * @param n the value to scale - * @return the scaled size - */ -uint ScaleByMapSize1D(uint n) -{ - /* Normal circumference for the X+Y is 256+256 = 1<<9 - * Note, not actually taking the full circumference into account, - * just half of it. - * (1<<9) - 1 is there to scale upwards. */ - return (n * (MapSizeX() + MapSizeY()) + (1 << 9) - 1) >> 9; -} - - -/*! * This function checks if we add addx/addy to tile, if we * do wrap around the edges. For example, tile = (10,2) and * addx = +3 and addy = -4. This function will now return diff --git a/src/map_func.h b/src/map_func.h index 038942cd9..265b88741 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -111,14 +111,34 @@ static inline uint MapMaxY() } /** - * Scales relative to the number of tiles. + * Scales the given value by the map size, where the given value is + * for a 256 by 256 map. + * @param n the value to scale + * @return the scaled size */ -uint ScaleByMapSize(uint); +static inline uint ScaleByMapSize(uint n) +{ + /* Subtract 12 from shift in order to prevent integer overflow + * for large values of n. It's safe since the min mapsize is 64x64. + * Add (1<<4)-1 to round upwards. */ + return ((n << (MapLogX() + MapLogY() - 12)) + (1 << 4) - 1) >> 4; +} + /** - * Scale relative to the circumference of the map. + * Scales the given value by the maps circumference, where the given + * value is for a 256 by 256 map + * @param n the value to scale + * @return the scaled size */ -uint ScaleByMapSize1D(uint); +static inline uint ScaleByMapSize1D(uint n) +{ + /* Normal circumference for the X+Y is 256+256 = 1<<9 + * Note, not actually taking the full circumference into account, + * just half of it. + * (1<<9) - 1 is there to scale upwards. */ + return ((n << MapLogX()) + (n << MapLogY()) + (1 << 9) - 1) >> 9; +} /** * An offset value between to tiles. |