diff --git a/assets.h b/assets.h index 986db96..8d71d4e 100644 --- a/assets.h +++ b/assets.h @@ -121,6 +121,38 @@ const uint8_t SFG_texturesWall[][SFG_TEXTURE_SIZE * SFG_TEXTURE_SIZE] = 12,83,61,12,12,84,84,20,84,13,20,13,83,61,85,85,13,83,61,85,14,85,13,83,12,84, 11,11,83,61,84,11,20,83,61,20,12,84,12,84,13,20,13,20,83,61,85,13,85,83,61,85, 85,12,85 + }, + { +4,4,4,4,4,4,4,4,3,4,4,5,4,4,4,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,5,4,5, +36,5,4,5,20,5,5,4,5,5,5,4,5,20,5,5,5,20,5,5,5,5,5,4,4,5,4,5,4,4,4,4,4,4,5,4,5,5, +4,5,4,5,13,5,5,5,5,20,5,5,5,13,5,5,13,5,4,4,4,4,4,4,4,4,4,4,20,4,4,4,5,4,4,4,5, +77,4,5,77,4,4,5,4,5,4,4,5,4,4,76,4,3,4,3,4,35,3,4,4,4,76,76,76,4,76,76,76,4,76, +4,4,76,4,76,76,4,4,76,4,76,4,4,4,4,37,5,36,5,4,4,37,5,4,5,4,5,4,5,4,5,20,5,20,5, +36,5,5,5,4,4,4,4,37,5,4,36,36,4,37,4,36,5,4,5,20,5,4,4,5,4,5,5,5,4,5,5,4,4,13,4, +5,4,4,4,4,4,4,4,4,4,4,4,4,5,20,4,5,4,4,4,4,20,5,20,5,4,4,13,5,5,4,4,77,4,4,4,5, +4,4,4,4,4,37,4,4,4,5,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4,77,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,77,4,3,4,4,4,4,76,4,77,76,4,76,4,4,4,4,4,4,4,3,4,3,3,4,4,3,3,4,76,4,4, +4,76,76,4,4,76,4,4,4,4,4,4,76,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,20,5,20,4,37,4,4,4,4,36,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,77,4,4,4,5, +4,5,36,4,4,4,36,20,4,4,4,4,4,4,4,4,4,4,4,12,4,4,4,4,76,4,4,5,13,4,4,4,4,4,20,5, +20,4,4,4,4,3,19,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,11, +11,11,11,76,3,3,11,11,11,3,12,11,76,3,11,76,76,11,11,11,11,11,11,11,11,3,11,3,3, +35,4,12,4,4,12,4,4,19,4,37,4,4,4,20,4,36,4,4,36,4,20,4,4,36,4,37,4,4,20,4,37,4, +37,36,36,4,36,20,36,20,37,37,20,36,37,20,37,36,4,20,5,37,20,4,37,4,37,37,20,37, +4,37,20,36,5,36,36,4,20,4,37,4,20,4,4,5,37,5,37,4,36,5,36,5,36,4,20,36,20,5,4, +37,20,37,37,20,37,4,4,4,3,4,4,36,4,36,20,4,20,4,4,4,4,20,4,4,5,4,4,4,4,20,4,37, +20,4,37,20,4,20,36,4,12,4,3,4,12,4,4,36,4,20,36,4,4,4,4,20,4,4,20,4,4,36,4,20,5, +4,4,4,3,3,3,3,3,4,36,3,3,3,36,3,3,4,3,3,36,36,3,3,3,4,4,3,4,4,3,4,35,4,4,4,20, +36,36,20,37,20,4,36,36,20,36,4,36,4,36,4,4,4,37,20,4,36,5,37,4,20,4,35,4,37,36, +4,4,37,4,36,37,36,36,4,36,36,20,36,36,37,4,36,36,4,36,4,4,4,36,37,4,36,20,36,20, +37,4,37,4,36,36,4,20,36,37,36,4,37,37,36,20,4,36,36,36,36,20,36,4,4,4,4,4,4,4,4, +36,4,20,36,20,4,36,4,36,4,36,36,36,20,36,36,36,36,36,36,4,36,36,4,36,4,4,4,20, +37,4,20,4,36,4,4,3,3,3,3,3,3,3,3,36,4,3,12,12,36,12,3,35,4,19,3,3,3,11,3,4,4,4, +36,4,3,19,3,19,4,36,12,4,36,4,4,3,36,4,12,4,3,4,130,4,4,4,12,4,12,12,3,4,3,4,4, +4,4,4,4,3,12,4,3,4,19,4,3,4,12,3,36,4,4,4,4,3,3,4,4,12,4,4,4,12,4,12,4,3,4,3,4, +36,3,3,36,4,3,19,3,3,4,3,3,4,4,3,4,11,4,4,3,4,12,4,4,4,4,4,4,12,4,19,4,19,4,3,3, +3,3,4,3,4,3,4,12,3,4,3,3,4,3,4,4,4,3,4,36,4,4,12,4,3,4,3,3,3,130,3,3,3,3,3,3, +130,3,3,3,2,2,130,130,3,3,11,3,3,3,3,3,3,130,3,3,130,3,3,3 } }; diff --git a/levels.h b/levels.h index 9afe366..0f03f5b 100644 --- a/levels.h +++ b/levels.h @@ -10,12 +10,16 @@ typedef uint16_t SFG_TileDefinition; MSB aaabbbbb cccddddd LSB - aaa: ceiling texture index (from texture available on the map) + aaa: ceiling texture index (from texture available on the map), 111 + means completely transparent texture bbbb: ceiling height (1111 meaning no ceiling) ABOVE the floor - ccc: floor texture index + ccc: floor texture index, 111 means completely transparent texture dddd: floor height */ +#define SFG_TILE_CEILING_MAX_HEIGHT 31 +#define SFG_TILE_TEXTURE_TRANSPARENT 7 + typedef SFG_TileDefinition SFG_TileDictionary[SFG_TILE_DICTIONARY_SIZE]; /// helper macros for SFG_TileDefinition @@ -27,8 +31,9 @@ typedef SFG_TileDefinition SFG_TileDictionary[SFG_TILE_DICTIONARY_SIZE]; #define SFG_TILE_FLOOR_HEIGHT(tile) (tile & 0x1f) #define SFG_TILE_FLOOR_TEXTURE(tile) ((tile & 0xe0) >> 5) +#define SFG_TILE_CEILING_HEIGHT(tile) ((tile & 0x1f00) >> 8) -#define SFG_OUTSIDE_TILE SFG_TD(63,10,0,0) +#define SFG_OUTSIDE_TILE SFG_TD(63,0,7,7) typedef uint8_t SFG_MapArray[SFG_MAP_SIZE * SFG_MAP_SIZE]; /**< @@ -77,31 +82,31 @@ static const SFG_Level SFG_level0 = { .tileDictionary = { - SFG_TD(0 ,0 ,0,0),SFG_TD(5 ,0 ,0,0),SFG_TD(1 ,0 ,1,0),SFG_TD(2 ,0 ,1,0), // 0 - SFG_TD(3 ,0 ,1,0),SFG_TD(4 ,0 ,1,0),SFG_TD(5 ,0 ,1,0),SFG_TD(0 ,0 ,0,0), // 4 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 8 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 12 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 16 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 20 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 24 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 28 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 32 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 36 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 40 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 44 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 48 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 52 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 56 - SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0),SFG_TD(0 ,0 ,0,0), // 60 + SFG_TD(0 ,31,0,0),SFG_TD(5 ,63,0,0),SFG_TD(1 ,63,3,0),SFG_TD(2 ,63,3,0), // 0 + SFG_TD(3 ,31,3,0),SFG_TD(4 ,63,3,0),SFG_TD(5 ,63,3,0),SFG_TD(1 ,10,0,0), // 4 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 8 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 12 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 16 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 20 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 24 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 28 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 32 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 36 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 40 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 44 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 48 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 52 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 56 + SFG_TD(0 ,31,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0),SFG_TD(0 ,63,0,0), // 60 }, .mapArray = { #define o 0 - o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , - o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , - o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,1 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , - o ,o ,o ,o ,o ,o ,o ,o ,2 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,1 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , + o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,7 ,7 ,7 ,7 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , + o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,7 ,7 ,7 ,7 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , + o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,7 ,7 ,7 ,7 ,o ,o ,o ,o ,1 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , + o ,o ,o ,o ,o ,o ,o ,o ,2 ,o ,7 ,7 ,7 ,7 ,o ,o ,o ,o ,1 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , o ,o ,o ,o ,o ,o ,o ,o ,3 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,1 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , o ,o ,o ,o ,o ,o ,o ,o ,4 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,1 ,1 ,1 ,1 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , o ,o ,o ,o ,o ,6 ,6 ,6 ,5 ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o ,o , diff --git a/main.c b/main.c index 308918e..95cb0a7 100755 --- a/main.c +++ b/main.c @@ -71,7 +71,7 @@ void SFG_pixelFunc(RCL_PixelInfo *pixel) if (pixel->isWall) { color = - pixel->hit.type != SFG_TRANSPARENT_TEXTURE ? + pixel->hit.type != SFG_TILE_TEXTURE_TRANSPARENT ? (SFG_getTexel(SFG_texturesWall[pixel->hit.type],pixel->texCoords.x / 32,pixel->texCoords.y / 32)) : SFG_TRANSPARENT_COLOR; @@ -100,11 +100,6 @@ void SFG_pixelFunc(RCL_PixelInfo *pixel) RCL_Unit SFG_textureAt(int16_t x, int16_t y) { SFG_TileDefinition tile = SFG_getMapTile(&SFG_level0,x,y); - - if (tile == SFG_OUTSIDE_TILE && - (x < 0 || x >= SFG_MAP_SIZE || y < 0 || y >= SFG_MAP_SIZE)) - return SFG_TRANSPARENT_TEXTURE; - return SFG_TILE_FLOOR_TEXTURE(tile); } @@ -117,7 +112,13 @@ RCL_Unit SFG_floorHeightAt(int16_t x, int16_t y) RCL_Unit SFG_ceilingHeightAt(int16_t x, int16_t y) { - return RCL_UNITS_PER_SQUARE * 8; + SFG_TileDefinition tile = SFG_getMapTile(&SFG_level0,x,y); + + uint8_t height = SFG_TILE_CEILING_HEIGHT(tile); + + return height != SFG_TILE_CEILING_MAX_HEIGHT ? + ((SFG_TILE_FLOOR_HEIGHT(tile) + height) * (RCL_UNITS_PER_SQUARE / 4)) : + (RCL_UNITS_PER_SQUARE * 32); } uint32_t SFG_frame; @@ -137,7 +138,7 @@ void SFG_init() SFG_camera.position.x = RCL_UNITS_PER_SQUARE * 5; SFG_camera.position.y = RCL_UNITS_PER_SQUARE * 5; - SFG_rayConstraints.maxHits = 6; + SFG_rayConstraints.maxHits = 10; SFG_rayConstraints.maxSteps = 32; for (uint16_t i = 0; i < SFG_RESOLUTION_Y; ++i)