#ifndef _DEF_TILES #define _DEF_TILES #define TILESET_WIDTH 16 #define TILE_AT(x, y) (x + y * TILESET_WIDTH) typedef unsigned char Tile; /* the tile ID */ typedef unsigned char Tile_flags; /* the tile properties (bitmask) */ /* flags enum and defines */ enum { I_SOLID, I_SPIKY, I_ICE, I_GLUE }; #define F_SOLID (1 << I_SOLID) #define F_SPIKY (1 << I_SPIKY) #define F_ICE (1 << I_ICE) #define F_GLUE (1 << I_GLUE) /* define properties */ #define P_AIR (0) #define P_BASE (F_SOLID) #define P_SPIKE (F_SPIKY) #define P_ICE (F_SOLID | F_ICE) #define P_GLUE (F_SOLID | F_GLUE) #define P_UNKNOWN (0) enum { ID_AIR = TILE_AT(0, 0), ID_SPIKE = TILE_AT(1, 0), ID_CHAIN = TILE_AT(0, 4), ID_ICE_0 = TILE_AT(0, 1), ID_ICE_1 = TILE_AT(0, 2), ID_ICE_2 = TILE_AT(1, 2), ID_ICE_3 = TILE_AT(0, 3), ID_ICE_4 = TILE_AT(1, 3), ID_GLUE = TILE_AT(1, 1), ID_SLIME = TILE_AT(2, 1), ID_BASE_0 = TILE_AT(0, 12), ID_BASE_1 = TILE_AT(1, 12), ID_BASE_2 = TILE_AT(2, 12), ID_BASE_3 = TILE_AT(3, 12), ID_BASE_4 = TILE_AT(0, 13), ID_BASE_5 = TILE_AT(1, 13), ID_BASE_6 = TILE_AT(2, 13), ID_BASE_7 = TILE_AT(3, 13), ID_BASE_8 = TILE_AT(0, 14), ID_BASE_9 = TILE_AT(1, 14), ID_BASE_10 = TILE_AT(2, 14), ID_BASE_11 = TILE_AT(3, 14), ID_BASE_12 = TILE_AT(0, 15), ID_BASE_13 = TILE_AT(1, 15), ID_BASE_14 = TILE_AT(2, 15), ID_BASE_15 = TILE_AT(3, 15), }; Tile_flags tile_get_flags(Tile tile); #endif /* _DEF_TILES */