diff --git a/programs/carModel.h b/programs/carModel.h index e15e0e6..4c4008e 100644 --- a/programs/carModel.h +++ b/programs/carModel.h @@ -11,10 +11,10 @@ const S3L_Unit carVertices[CAR_VERTEX_COUNT * 3] = { 31, 103, -3, // 15 -48, 59, 31, // 18 48, 59, 31, // 21 - -51, 52, 86, // 24 + -40, 52, 86, // 24 -44, 14, 86, // 27 44, 14, 86, // 30 - 51, 52, 86 // 33 + 40, 52, 86 // 33 }; // carVertices #define CAR_TRIANGLE_COUNT 18 @@ -28,7 +28,7 @@ const S3L_Index carTriangleIndices[CAR_TRIANGLE_COUNT * 3] = { 9, 6, 8, // 18 7, 8, 6, // 21 3, 4, 0, // 24 - 8, 10, 9, // 27 + 9, 11, 10, // 27 7, 3, 10, // 30 0, 6, 9, // 33 6, 0, 2, // 36 @@ -36,7 +36,7 @@ const S3L_Index carTriangleIndices[CAR_TRIANGLE_COUNT * 3] = { 2, 5, 7, // 42 2, 1, 4, // 45 7, 11, 8, // 48 - 8, 11, 10 // 51 + 9, 8, 11 // 51 }; // carTriangleIndices #define CAR_UV_COUNT 24 @@ -60,11 +60,11 @@ const S3L_Unit carUVs[CAR_UV_COUNT * 2] = { 398, 493, // 32 397, 476, // 34 484, 451, // 36 - 386, 451, // 38 - 386, 476, // 40 - 398, 509, // 42 - 398, 493, // 44 - 397, 451 // 46 + 386, 476, // 38 + 397, 451, // 40 + 386, 451, // 42 + 398, 509, // 44 + 398, 493 // 46 }; // carUVs #define CAR_UV_INDEX_COUNT 18 @@ -78,15 +78,15 @@ const S3L_Index carUVIndices[CAR_UV_INDEX_COUNT * 3] = { 14, 15, 16, // 18 4, 17, 5, // 21 18, 8, 7, // 24 - 17, 19, 20, // 27 - 9, 1, 21, // 30 + 19, 20, 21, // 27 + 9, 1, 22, // 30 12, 15, 14, // 33 15, 12, 11, // 36 - 21, 22, 9, // 39 + 22, 23, 9, // 39 3, 10, 4, // 42 3, 6, 8, // 45 - 4, 23, 17, // 48 - 17, 23, 19 // 51 + 4, 20, 17, // 48 + 19, 17, 20 // 51 }; // carUVIndices S3L_Model3D carModel; diff --git a/programs/city.c b/programs/city.c index 9ba0cb1..bd2b842 100644 --- a/programs/city.c +++ b/programs/city.c @@ -243,10 +243,8 @@ int main() } while (SDL_PollEvent(&event)) - { if (event.type == SDL_QUIT) running = 0; - } uint8_t *state = SDL_GetKeyboardState(NULL); diff --git a/programs/level.c b/programs/level.c index 37409a6..5279c07 100644 --- a/programs/level.c +++ b/programs/level.c @@ -21,6 +21,8 @@ #define S3L_PERSPECTIVE_CORRECTION 0 #endif +#define S3L_NEAR (S3L_FRACTIONS_PER_UNIT / 5) + #define S3L_SORT 0 #define S3L_Z_BUFFER 1 diff --git a/programs/levelTexture1Pal.h b/programs/levelTexture1Pal.h index 44db88a..ad770d4 100644 --- a/programs/levelTexture1Pal.h +++ b/programs/levelTexture1Pal.h @@ -23,640 +23,50 @@ uint16_t level1Palette[256] = { 49168,53265,57363,61460,63509 }; // level1Palette -#define LEVEL1_TEXTURE_WIDTH 128 -#define LEVEL1_TEXTURE_HEIGHT 128 +#define LEVEL1_TEXTURE_WIDTH 32 +#define LEVEL1_TEXTURE_HEIGHT 32 -uint8_t level1Texture[16384] = { -20,20,20,20,20,20,20,20,21,21,21,20,20,20,20,20,20,20,20,20,20,20,21,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,21, -22,22,22,22,22,21,21,21,21,21,21,21,21,20,20,20,20,20,20,20,21,21,21,21,21,21, -21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,21,21,21,21,21,21,21,21,21,21, -21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,22,22,22,22,22,22,23,22,22, -22,21,22,21,21,21,21,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23, -23,23,22,22,22,22,21,22,22,22,22,21,21,20,20,20,20,20,20,21,21,21,21,21,21,21, -21,21,21,21,21,21,21,21,21,21,21,21,20,20,21,20,21,21,21,21,21,21,21,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,21,22,22,21,21,20,22,20,20,25,24,25,24, -23,24,24,22,21,20,20,20,20,20,21,23,24,24,24,25,25,25,24,25,25,25,25,25,25,24, -25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,23,24,24,23,22,20,20,20,20,21,21,21,21,22,23,24,24,24,24, -24,24,23,23,23,24,24,24,24,24,24,23,23,24,24,24,24,24,24,24,25,25,25,25,25,25, -25,25,24,25,25,25,25,25,25,24,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26, -26,25,22,21,20,20,20,21,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,24,25,25,25,24,24,24,24,24,25,25,24,24,24,24,24,25,25,25, -25,25,25,25,25,25,24,25,25,23,21,20,20,20,21,21,21,22,24,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26, -26,26,26,26,26,26,26,26,26,26,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,25, -24,21,20,20,20,22,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,24,24,24,24,24,24,25,25,24,24,25,25,25,25,24,25,25,25, -25,25,25,25,25,25,25,24,21,21,20,21,21,22,23,24,25,25,26,26,26,25,25,25,25,25, -25,25,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26, -26,26,26,26,26,26,26,26,26,26,25,25,25,25,25,25,24,25,25,26,26,26,26,25,24,21, -20,20,20,22,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25, -25,25,25,25,25,24,22,21,20,21,21,22,23,24,24,25,25,25,25,25,24,23,23,23,23,23, -23,23,23,23,23,23,23,24,23,24,24,23,24,24,24,24,24,24,24,24,25,25,25,25,26,25, -25,25,25,25,25,25,25,25,25,25,25,24,24,24,22,22,22,23,24,25,26,25,24,21,20,20, -20,23,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25, -25,25,25,24,23,21,20,20,21,22,23,24,24,23,23,23,23,23,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,24,23,24,24,24,24, -24,24,24,24,23,23,23,23,22,22,22,22,22,22,22,22,22,24,25,25,23,22,20,20,21,23, -25,25,25,25,25,25,25,25,25,25,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,25,25,25,25,25, -24,24,23,21,21,20,20,22,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22, -22,22,21,21,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,25,25,22,22,20,20,20,24,25,25, -25,25,25,25,25,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23, -22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,24,24,25,25,25,24,24,24, -23,21,21,20,20,22,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,21,21,21,21, -21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,23,24,24,22,23,21,20,20,23,25,25,25,25, -24,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,25,25,25,24,24,24,23,21, -21,20,21,22,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,21,21,21,21, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,23,24,24,22,23,21,20,20,23,25,25,25,25,23,23, -22,22,22,22,22,22,22,22,21,22,22,22,22,22,22,22,22,22,22,22,22,22,23,22,22,23, -23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,24,24,24,24,24,23,23,21,21,20, -21,22,23,23,23,23,23,23,23,23,22,22,22,22,22,22,23,23,23,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,23,23,23,23,22,22,22,23,23,23,23,23,23,23,23,23,23,23,22, -22,22,22,22,23,23,22,23,23,23,24,24,22,23,21,20,20,22,25,25,25,24,23,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,22,23,23,23,23, -23,23,23,23,22,23,23,23,23,22,22,22,22,22,24,25,24,24,24,23,23,22,21,20,21,22, -23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,22,23,23,22,23,23,23,24,24,22,23,21,20,20,23,25,25,25,23,23,22,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,22, -22,22,22,22,23,23,23,23,23,22,22,23,24,25,24,24,23,23,23,22,21,20,21,22,23,23, -23,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,23,24,23,23,24,23,23,23, -24,23,23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,24,24,23,22,23,21,20,20,23,25,25,26,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,24,24,24,23,23,23,22,21,20,21,22,23,23,23,23, -23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24,24,23,23,24,24,24, -24,24,24,24,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,24,24,23,22,23,22,20,20,22,25,25,26,24,24,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,23,23,23, -23,23,23,23,23,23,23,23,23,24,24,24,23,23,23,22,21,20,21,22,23,23,23,23,23,23, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,23,23,23,24,23,23,24,23,23,23,23,23,23,24,24,24,24, -24,24,24,23,22,23,22,20,20,22,24,25,25,24,24,24,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,23,23,23,23,24,24,23,23,24, -23,23,24,24,24,23,23,24,24,24,23,23,23,22,21,20,21,22,23,23,23,23,23,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,23,22,22,21,20,19,21,24,24,25,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23, -23,24,24,23,23,23,23,23,24,23,23,23,24,24,24,23,23,23,23,23,23,23,23,23,23,23, -23,24,23,23,23,24,24,24,23,23,23,22,21,20,21,22,23,23,23,23,23,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23, -22,22,21,21,19,20,23,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,24, -24,24,24,23,24,23,24,24,23,24,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,24, -23,23,23,23,24,24,23,23,22,22,20,20,21,22,23,23,23,23,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,24,24,24,24,23,22,22, -21,21,20,20,22,24,25,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23, -23,23,24,24,24,24,24,23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,24,25,25,24,23,22,22,21,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,23,24,24,24,24,23,23,23,24,23,23,23,24,24,24,24,23,22,22,21,20, -20,20,21,23,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,23, -24,24,24,24,24,24,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -25,25,24,23,22,22,20,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,23,24,24,24,23,23,23,23,23,24,24,24,24,24,24,24,23,22,22,21,20,20,20, -22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,24,24,24,24, -24,24,24,24,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25, -24,23,22,21,20,20,20,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,20,20,20,22,23, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,24,23, -22,21,20,20,20,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,22,21,20,20,20,22,23,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,24,23,22,21, -20,19,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,21,20,20,21,23,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,24,23,22,21,20,20, -21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,20,20,20,21,23,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,24,23,22,21,20,20,21,22, -23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,22,22,21,20,20,20,21,23,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,24,23,22,21,21,20,21,22,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,25,24,23,22,21,20,20,20,21,22,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,25,25,24,23,22,22,20,20,21,22,23,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,25,24,22,22,21,20,20,20,21,22,24,25,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,25,25,24,23,22,22,20,20,21,22,23,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,23,22,20,20,20,20,21,22,24,25,24,24,24,24,24,24,24,24,24,24,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,25,25,24,23,22,22,20,20,20,22,23,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,23,22,20,20,21,20,21,22,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,25,25,24,23,22,22,20,20,20,22,23,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -22,22,21,21,21,21,20,22,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,25,25,24,22,22,22,20,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,22,22, -21,20,21,21,20,22,23,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,25,25,23,22,22,22,21,20,21,22,23,24,25,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,22,22,21,20, -21,20,21,22,23,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -25,24,23,22,22,22,21,20,21,22,23,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,22,22,21,20,20,20, -20,22,23,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,24, -23,22,22,22,21,21,20,22,23,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,23,22,22,21,20,20,20,21,22, -22,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,24,24,24,24,25,25,24,22,22, -22,22,20,20,20,21,23,24,25,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,22,22,22,20,20,20,20,20,22,22,23, -25,25,25,24,24,25,25,25,24,24,24,24,25,25,25,25,25,25,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,23,22,21,22,22, -20,20,20,21,23,24,25,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,23,23,23,23,23,23,23,23,22,22,22,22,21,20,20,21,20,20,22,22,22,24,25, -25,25,25,25,25,25,24,24,24,24,24,24,24,24,24,24,24,23,23,24,24,24,24,24,24,24, -24,24,24,24,24,25,25,25,25,25,25,25,24,24,24,24,24,23,23,22,22,22,22,22,20,20, -20,21,23,23,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,22,22,22,22,22,22,22,22,22,21,21,21,21,20,20,22,22,22,22,23,24,24, -24,24,24,23,23,24,23,24,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -23,24,24,24,24,24,24,24,23,22,23,23,22,22,22,22,22,22,21,22,22,21,20,20,20,21, -23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,24,24,24,24,24,24,23,23,23,23,23,23,23,22,23,23,23,23,22,23,23, -22,22,22,22,22,22,22,22,22,22,21,21,21,20,20,20,20,21,22,22,22,22,22,22,22,22, -22,21,21,22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, -21,22,22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,21,21,21,20,20,20,22,23, -23,23,23,23,23,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -21,21,21,21,21,21,21,20,20,20,20,20,20,20,20,20,20,22,21,21,22,21,21,21,21,21, -21,21,21,20,21,21,21,21,20,20,20,20,20,21,21,20,20,20,20,20,20,20,20,20,20,20, -21,21,21,21,20,20,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20,21,22,22,23, -23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,21,22,22,22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21, -21,21,21,21,21,21,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,20,20,20,20, -20,20,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20,20,20,20,20,21,22,22,23,23, -23,23,22,22,22,22,21,21,22,21,21,22,22,22,22,22,21,21,21,21,21,21,21,22,21,21, -21,21,21,20,21,21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,20,19,19,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,20,20, -21,21,21,21,20,20,20,20,20,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21, -21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,19,19,19,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,21,20,20,21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21, -21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21, -21,21,22,21,22,22,22,21,21,21,21,21,21,21,22,21,21,21,21,21,21,21,21,21,21,21, -21,21,21,21,21,20,21,21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,21,21,21,21,21,21,20,21,21,21,21,21,20,20,20,20,20,20,22,22,23,23,23,24,24, -24,23,23,22,23,24,23,24,24,23,23,24,25,24,25,24,24,24,24,25,24,23,23,24,23,23, -23,23,22,22,21,22,22,22,22,21,20,20,20,20,20,19,20,20,20,20,21,22,24,24,25,25, -24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,22,23,23,22,23,23,23,23, -23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,23,22, -22,23,23,22,22,22,22,22,21,21,21,21,20,20,20,20,22,24,25,26,26,26,26,26,26,26, -26,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25, -26,25,25,25,25,25,25,25,24,25,24,22,20,19,20,21,21,24,25,25,26,26,26,26,26,26, -26,25,26,8,26,26,26,25,25,25,25,24,24,24,25,25,25,24,24,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,24,24,25,24,24,24,25, -25,25,24,23,23,24,23,22,21,20,21,20,20,23,25,26,26,9,9,9,26,26,26,26,26,26,26, -26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, -26,26,26,26,26,26,26,25,21,19,20,21,22,24,25,26,26,26,26,26,8,26,8,9,9,8,9,8,26, -26,26,26,25,25,25,25,25,25,25,25,25,25,26,26,26,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,26,8,8,9,9,9,9,9,9,9,26,26,25,25,26,24, -22,21,20,21,23,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25, -26,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,26,26,26,25, -21,19,20,21,23,25,25,26,26,26,26,8,8,8,9,9,9,8,8,8,8,8,26,25,25,25,25,25,25,8, -26,25,26,26,26,26,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,26,9,9,9,9,9,9,9,9,9,9,9,9,26,26,26,26,23,21,20,20,24,24,24,24,24,24, -24,24,23,24,24,25,25,24,24,24,23,23,23,23,24,24,23,23,23,23,24,24,24,22,22,22, -24,24,23,24,23,24,24,25,24,23,23,24,25,26,26,25,20,19,20,21,22,24,25,9,9,9,8,8, -8,8,8,8,25,25,25,25,25,24,24,24,24,24,24,24,23,24,24,25,25,24,24,23,24,23,24,24, -23,24,25,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,24,24,24,25,25,25,8,25,8, -9,9,9,9,9,9,26,26,26,24,20,20,20,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,21,21,21,21,21, -21,22,21,22,24,25,25,21,19,20,21,22,23,25,25,25,24,24,25,25,24,23,23,24,23,23, -23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,23,23,23,23,23,23,22,23,23,22,22,22,22,22,22,23,23,23,23,23,24,24,24, -24,24,25,8,8,25,21,20,20,22,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -21,22,24,24,20,20,21,21,22,23,24,24,23,22,23,23,22,22,22,22,23,22,23,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23, -24,25,24,22,20,20,22,23,23,22,22,22,22,22,22,22,22,23,23,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23, -23,22,20,20,21,21,22,22,24,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,22,23,24, -25,21,20,20,23,23,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,23,23,21, -20,20,20,21,22,22,24,24,23,24,24,23,24,24,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,22,22,22,22,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,24,24,21, -20,20,23,23,23,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,21,20,19, -20,21,22,22,23,24,24,24,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,24,21,21,20, -23,23,23,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,24, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,21,20,20,20,21, -22,22,23,24,24,24,24,24,23,24,24,23,24,23,24,23,24,23,23,24,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,20,20,20,23,23, -23,22,22,23,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,21,20,20,20,21,22,22, -23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23, -23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,23,23,23,23,23,23,23,23,23,23,22,23,23,23,22,22,23,22,21,20,20,23,23,23,22, -22,22,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,21,21,20,21,21,22,22,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23, -24,23,24,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,23,23,23, -23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,20,20,20,22,23,23,23,22,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,21,21,21,22,22,22,23,23,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,23,23,23,23,23,23, -23,23,23,23,23,23,22,22,22,22,22,22,22,22,21,20,20,20,22,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,23,24,23,23,23,23,23,23,24,23, -23,23,23,23,23,24,23,23,23,23,23,23,23,22,21,21,21,22,22,22,23,23,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23, -23,23,23,23,23,23,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,22,22,22,22,22,22,22,22,22,20,21,20,22,23,23,23,23,23,24,24,24,24, -24,24,24,24,24,24,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,23,23,24,24,24,24,24,24,23,23,21,21,21,21,22,22,22,23,24,24,24,23,24,24,24, -24,24,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24,24,24,23, -23,23,23,23,22,22,22,22,23,23,22,23,23,23,23,24,24,24,24,24,24,23,23,23,23,23, -23,23,22,23,22,22,22,22,22,22,22,20,21,20,22,23,23,23,23,24,24,24,24,24,24,24, -24,24,23,23,24,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,23,21,21,21,21,22,22,22,23,23,24,24,23,24,23,23,23,23, -23,23,24,24,24,24,24,23,23,24,23,24,24,24,23,23,23,23,24,23,24,23,24,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,23,23,23,23,23,23,22, -22,22,22,22,22,23,23,23,22,21,21,20,22,23,23,23,23,24,24,24,24,24,24,24,24,24, -24,24,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,23,22,21,21,20,22,22,22,23,23,24,24,24,24,24,24,23,23,23,23, -24,24,24,24,24,24,24,24,23,24,24,24,24,24,24,24,24,23,24,24,24,24,24,24,24,23, -24,24,24,24,24,24,23,23,23,23,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23, -23,23,23,23,23,23,23,21,20,19,22,23,23,23,23,23,23,24,23,23,23,24,24,24,23,23, -23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,23,22,22,21,21,22,22,22,23,23,23,24,23,24,24,24,23,23,23,23,24,23, -24,23,24,23,23,24,23,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,24, -23,23,23,23,23,23,23,23,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23,24,24,24, -24,24,24,24,22,21,21,19,21,23,23,24,24,24,24,24,23,23,23,24,24,24,24,23,24,23, -23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,23,22,22,21,21,22,22,22,23,23,24,24,23,23,24,24,23,23,23,23,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,24,24,24,24, -24,24,24,23,23,23,23,24,23,24,24,24,24,24,24,23,24,24,24,24,24,24,24,24,24,24, -24,24,23,21,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -23,22,22,21,21,22,22,23,23,24,24,24,23,23,23,23,23,23,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,23,23,23,23,24,24,24,24,24,24,24,23,23,23,23,23,24,24,24,24,24,24,24,24,24, -23,21,20,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22, -22,21,22,22,22,23,23,24,24,24,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23, -23,23,23,23,24,24,24,24,24,24,24,23,24,23,24,24,24,24,24,24,24,24,24,24,23,21, -20,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,22,22,21, -22,22,22,23,23,24,24,24,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,21,20,20, -21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,22,22,21,22,22, -22,23,23,24,24,24,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,21,20,20,21,22, -23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,22,22,21,21,22,22,22, -23,24,24,24,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,21,20,19,20,22,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,21,22,22,22,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,21,20,20,20,22,23,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,21,21,21,22,23,24,24,24, -24,24,24,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21,20,20,20,22,23,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,21,21,21,22,23,24,24,24,24,24, -24,23,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24, -24,24,24,24,24,24,24,24,24,24,24,23,22,22,21,20,20,22,23,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,23,22,22,21,21,21,21,21,23,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,23,22,22,21,20,20,22,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,23,22,22,21,21,21,21,21,23,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,23,22,22,21,20,20,22,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,25,24,23,22,22,21,20,21,21,22,23,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,23,24,24,24,24,24,24,24,24,24,24,23,23,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,23,22,22,20,19,20,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,25,24,23,22,22,20,20,21,21,21,23,24,24,24,24,24,24,24,24,24,24,24,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -23,23,23,23,24,24,24,23,24,24,23,23,24,23,23,23,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,22,22,20,19,21,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24, -25,24,23,22,21,20,20,21,21,21,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23, -23,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24, -24,24,22,22,20,19,21,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24, -23,22,21,20,20,21,21,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -22,22,20,19,20,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,23,21, -21,20,20,21,21,21,22,23,24,23,24,24,24,24,24,24,24,24,24,24,23,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,23,22, -20,19,20,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,23,22,21,20, -20,21,21,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21,20,19, -20,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,23,22,21,20,20,21, -21,22,22,23,24,25,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21,20,19,19,20, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,23,21,21,20,20,21,21,22, -22,23,23,24,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21,20,19,19,19,21,22, -23,24,24,25,25,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,23,22,21,20,21,21,21,21,23,23, -23,23,23,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21,20,19,19,19,19,21,22,22, -22,23,23,23,22,21,22,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,21,21,21,21,22,23,23,23, -23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21,20,19,19,19,21,22,22,22,22,21, -22,21,21,21,21,21,22,22,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,21,21,21,21,21,23,23,23,23,23, -24,24,24,24,24,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,23,24,24, -24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,24,24,24,24,24,24,24,24,23,22,21,19,19,19,19,22,23,23,23,22,20,21,21, -22,22,23,23,23,22,22,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,23,22,21,20,21,21,21,21,21,22,23,23,23,22,23,23, -22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,22,22,22,23,23,22,22,22,22,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,24,23,22,20,19,19,19,20,22,22,22,22,21,20,20,21,22,22, -23,23,23,23,22,21,21,21,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -22,22,22,23,22,23,23,23,22,21,21,20,21,21,21,21,21,21,21,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,23,22,23,22,21,19,19,18,19,20,20,21,21,21,21,20,19,20,20,20,20,21, -21,21,21,20,20,20,20,20,20,20,21,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21, -21,22,21,22,22,21,21,21,20,20,20,20,21,21,21,21,21,21,21,22,22,22,22,22,22,21, -21,21,21,21,21,21,21,21,21,22,21,22,22,22,22,22,22,21,22,21,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,21,21,21,21,21,22,22,21,21,21,21,21,21,21,21,21,21, -21,21,21,21,21,20,20,19,19,18,19,19,19,20,19,19,20,20,20,19,19,20,20,20,19,19, -19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,20, -21,20,20,21,21,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, -21,21,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,21, -22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20,20,20,20,20,20,20, -20,20,20,19,19,18,18,18,19,19,19,19,19,19,19,19,19,19,19,20,20,19,19,19,19,19, -19,19,19,20,20,20,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, -21,21,21,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,21,20,21,21,21, -21,21,21,21,21,21,21,20,20,21,20,20,20,20,20,20,20,20,20,20,20,20,19,19,20,19, -19,19,18,19,18,19,19,19,20,20,19,19,19,19,19,19,19,19,19,20,19,20,19,19,19,19, -19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,21, -22,22,21,21,22,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,24, -23,22,22,22,22,22,22,22,22,22,22,22,21,21,21,21,21,20,20,20,20,21,20,20,21,20, -21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,20,21,20,19,19,19,19,19,19,19, -19,19,21,22,21,22,22,22,22,21,22,21,21,22,21,21,20,20,20,19,20,19,20,20,20,20, -20,20,20,20,20,20,20,21,21,22,22,21,21,22,23,24,23,23,23,23,23,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24, -24,24,24,24,24,24,24,24,24,24,24,23,22,21,21,20,20,20,21,21,20,20,21,21,21,22, -21,21,21,21,21,21,22,21,21,22,22,22,23,22,22,22,21,21,21,21,21,21,22,21,21,21, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,22,22,23,23,23,22,22,20, -20,20,20,20,22,23,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,23,22,21,20,20,21,21,21,22,23,24,23,24,24,24,24, -24,23,24,25,25,25,25,25,25,25,25,25,25,25,25,24,24,23,23,24,24,24,24,24,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,22,20,20, -20,21,23,24,25,25,25,24,25,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,23,21,20,20,20,21,22,24,24,25,25,25,25,25,25,25,25, -26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,23,22,20,20,20,22, -24,25,25,25,24,24,23,23,24,24,24,23,24,24,24,24,24,24,24,24,24,24,25,24,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,24,23,21,20,20,20,21,22,24,24,25,25,25,25,25,25,25,25,25,25, -25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,25,25,25,25,25, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,20,20,20,21,23,24, -24,24,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,23,22,20,20,20,21,22,24,24,24,24,25,25,25,24,25,24,24,24,24,24, -23,23,23,23,23,23,23,23,24,23,24,24,24,24,25,25,25,25,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,20,20,20,21,23,24,24,22, -22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23, -23,23,23,23,22,20,20,20,21,22,23,23,24,24,23,23,23,23,24,23,23,23,23,23,22,22, -22,22,22,22,22,21,22,22,21,22,22,22,22,22,23,23,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,22,20,20,20,21,23,24,23,22,22,22, -22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,21,22,22,22,22,21,22,22,22,22, -23,23,22,20,20,20,21,22,23,23,23,23,23,23,24,24,23,23,23,23,23,23,23,22,22,22, -22,22,22,21,21,21,21,21,21,21,21,21,22,21,21,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,22,22,22,22,23,23,23,23,21,20,20,20,21,23,23,23,22,21,22,22,22, -23,23,23,23,23,23,24,23,23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,22,23,22,23,22,22,22,22,22,22,22,22,22,22,22,22,21,22,22,22,22,22,22, -22,20,20,20,20,22,23,23,23,22,23,23,24,24,23,23,23,23,23,23,23,23,23,22,22,22, -22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,21,22,21,21,22,22, -22,21,21,22,22,22,22,23,23,23,23,22,20,20,20,21,22,23,23,22,22,22,22,23,23,23, -23,23,23,23,24,23,23,23,23,23,23,24,23,23,23,23,23,24,24,24,23,23,23,23,23,23, -23,22,23,22,22,23,22,22,22,23,22,22,22,22,22,22,22,22,22,22,22,22,23,22,22,20, -20,20,20,22,23,23,23,23,23,24,24,24,23,23,23,23,23,23,23,23,23,22,22,22,22,21, -21,21,21,21,21,21,21,20,21,21,21,21,21,22,22,22,22,22,22,21,21,21,21,21,21,21, -21,21,21,22,22,23,23,23,23,22,20,20,20,21,22,23,22,22,22,22,23,23,23,23,23,23, -23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,23,24,23,23,23,23,23,22, -23,22,22,22,22,22,23,23,22,23,22,22,22,22,22,22,22,22,22,23,23,22,22,20,20,20, -20,22,22,23,23,23,24,24,24,24,23,23,23,23,23,23,23,23,23,22,22,22,22,22,21,21, -20,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,23,23,24,23,23,21,20,20,21,22,23,23,22,22,22,23,23,23,23,23,23,24,24, -24,24,23,23,23,23,24,23,23,23,23,24,23,23,23,24,24,24,24,24,23,23,23,22,23,23, -23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,23,23,23,23,22,22,21,20,20,20,22, -22,23,23,24,24,24,24,24,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,21,21, -21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,21,22, -22,23,23,24,23,23,22,20,20,21,22,23,22,22,22,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,22,22,22,22,23,23,23,22,22,21,20,20,20,22,22,23, -23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,23, -23,24,23,23,21,20,20,21,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,22,22,22,23,23,23,22,22,21,20,20,20,22,22,23,23,24, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,23,23,24, -23,23,21,21,20,21,23,23,23,23,23,23,23,23,23,23,23,23,24,23,24,23,23,23,24,23, -23,23,23,23,23,23,23,23,23,24,23,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,21,20,20,20,22,22,23,24,24,24,24, -24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,23,23,24,24,23,23, -22,21,20,22,23,23,23,24,24,24,23,24,23,23,23,23,23,23,23,23,23,23,24,23,23,23, -23,23,23,23,23,23,23,24,23,24,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,24, -23,23,23,23,23,23,23,23,23,24,23,22,22,21,20,20,20,22,22,23,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24, -24,24,24,24,23,23,23,24,23,23,23,23,23,23,23,23,23,23,23,23,24,24,23,23,22,21, -20,22,23,23,23,24,24,24,24,24,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,24,23,24,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,24,23,23, -23,23,23,23,23,23,24,24,23,23,22,21,20,20,20,22,22,23,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,24,24,23,23,22,21,20,22, -23,23,23,23,24,24,24,24,24,23,23,24,23,23,24,23,23,23,23,23,23,24,23,23,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24,23,23, -23,23,24,23,24,24,23,23,22,21,20,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,22,21,20,22,23,23, -23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,23,23,22,21,20,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,21,20,20,22,22,23,23,23, -23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23, -23,24,23,23,22,21,20,20,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,22,20,20,22,23,23,23,23,23,23, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24,24, -23,23,22,21,20,20,20,21,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,23,23,21,20,20,21,22,23,23,23,24,23,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,24,24,23,23, -22,21,20,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,23,23,21,20,20,22,22,23,23,23,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21, -20,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,23,23,21,20,20,22,23,23,23,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,20, -20,22,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,23,23,20,20,20,21,23,23,23,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,20,20,22, -22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,23,23,20,19,20,21,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,20,20,21,22,23, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,23,22,20,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,20,20,22,22,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -23,22,20,20,20,22,22,23,23,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,20,20,20,22,22,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22, -20,20,20,21,22,23,23,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,25,24,23,22,21,20,20,20,22,22,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,20,20, -20,21,22,23,23,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,25,25,23,22,21,20,20,20,22,22,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,20,20,21,21, -22,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,25,24,23,22,21,20,20,20,22,22,23,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,20,20,21,21,21,23, -23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,25,24,23,22,21,20,20,20,21,22,22,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,20,20,21,21,21,22,23,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,25,24,23,22,20,20,20,20,22,22,22,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,22,21,21,20,21,21,22,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25, -24,23,22,20,19,20,20,21,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -23,23,23,23,23,23,23,23,23,24,24,23,23,22,21,20,20,20,20,21,23,23,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23, -21,20,19,19,20,22,22,22,22,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, -24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,22,23,23,23,23,22,23,23,23,23, -23,23,23,23,23,23,22,23,22,22,22,22,21,20,20,20,20,21,22,22,22,22,22,22,22,23, -23,23,23,22,22,22,22,22,23,23,22,23,22,22,22,22,23,23,23,23,23,23,23,23,23,23, -23,23,23,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,20,19, -19,19,19,21,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, -23,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, -22,22,22,22,22,21,20,20,20,21,20,20,20,20,19,19,20,20,20,20,20,21,21,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,20,20,20,21,22,22, -21,20,20,20,20,21,22,21,21,21,21,21,21,21,21,21,22,22,22,21,21,20,20,20,19,19, -19,20,21,22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, -22,22,22,22,22,22,22,22,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,20,20, -20,21,20,20,20,21,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21, -21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20,19, -20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20 +uint8_t level1Texture[1024] = { +20,20,21,20,20,20,20,20,20,20,20,21,21,22,22,21,21,20,21,21,21,21,21,20,21,21, +21,21,21,20,20,20,26,26,24,20,25,25,25,25,25,25,25,24,25,25,24,25,25,21,21,25, +26,25,24,24,25,25,26,26,26,26,26,25,22,22,22,20,25,25,22,22,22,22,22,22,22,22, +23,24,25,23,20,23,23,22,22,21,22,22,22,22,22,22,22,22,23,23,22,20,25,23,23,23, +23,23,23,23,23,22,23,22,24,23,21,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24, +22,19,25,24,23,23,23,23,24,24,23,23,23,23,24,23,21,23,24,24,24,24,24,24,24,24, +24,24,24,24,24,24,22,20,24,24,24,24,23,24,24,24,24,24,24,24,25,22,20,24,24,24, +24,24,24,24,24,24,24,24,24,24,24,24,22,20,24,24,24,24,24,24,24,24,24,24,24,24, +25,22,21,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,20,24,24,24,23,24,24, +24,24,24,24,24,24,25,22,20,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,22,21, +23,24,24,24,24,24,24,24,24,24,24,24,25,22,21,25,24,24,24,24,24,24,24,24,24,24, +24,24,23,23,22,21,22,25,25,24,24,24,24,24,24,25,25,24,23,22,20,24,24,24,24,24, +24,24,24,24,24,23,23,23,20,20,20,20,20,21,21,21,21,20,20,21,21,20,21,21,21,20, +20,22,23,22,22,22,21,21,21,21,21,20,20,20,20,22,24,23,23,23,25,24,23,23,21,22, +20,20,21,25,24,24,23,23,22,23,23,23,23,23,23,22,23,23,22,21,20,24,24,24,24,23, +23,24,22,23,24,23,26,20,25,8,8,25,24,24,24,24,24,25,24,24,25,24,25,8,9,26,20,22, +22,23,23,23,23,23,23,23,22,22,23,20,24,24,23,23,23,23,22,23,22,22,22,22,22,22, +22,23,23,23,20,23,23,23,23,23,23,23,23,23,23,23,22,21,23,24,24,24,24,24,23,24, +23,23,23,22,22,23,23,23,22,22,21,23,24,24,23,23,24,24,24,24,24,24,23,21,23,23, +23,24,24,23,23,24,24,23,23,23,24,24,23,23,22,23,20,23,24,24,24,24,24,24,24,24, +24,24,23,21,23,23,23,24,24,24,24,24,24,24,24,24,23,24,23,23,24,24,20,23,24,24, +24,24,24,24,24,24,24,24,22,21,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, +24,24,21,23,24,24,24,24,24,24,24,24,24,24,23,21,23,24,24,24,24,24,24,24,24,24, +24,24,24,24,24,24,24,24,20,24,24,24,24,24,24,24,23,24,24,24,23,20,22,24,24,24, +24,24,24,24,24,24,24,24,24,23,23,24,24,24,20,24,24,24,24,24,24,24,24,24,24,24, +23,20,22,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,20,21,22,21,22,24, +24,24,24,24,24,24,23,21,21,23,24,23,23,24,24,24,24,24,24,23,23,23,23,23,24,24, +19,19,20,19,19,19,20,20,20,21,21,21,21,20,21,21,21,21,20,21,21,21,21,22,22,21, +21,21,20,20,20,20,24,24,24,24,24,23,22,20,24,24,24,25,25,25,25,25,25,25,25,25, +25,25,23,20,22,24,24,25,25,25,24,24,23,23,23,23,23,23,22,20,24,22,23,23,23,23, +23,23,23,23,22,22,22,22,23,20,23,23,24,23,22,22,21,22,21,22,22,21,21,22,23,20, +22,23,23,24,23,23,23,23,23,23,22,22,22,22,23,20,22,24,23,23,23,22,20,21,23,23, +23,23,22,22,23,20,23,23,23,24,24,23,23,23,23,23,23,23,23,23,23,20,22,24,23,23, +23,23,23,23,24,24,24,24,24,24,23,20,23,24,24,24,24,24,24,24,24,24,24,24,24,24, +23,20,22,24,24,24,24,24,24,24,24,24,24,24,24,24,23,20,23,24,24,24,24,24,24,24, +24,24,24,24,24,24,24,20,22,24,24,24,24,24,24,24,24,24,24,24,24,24,23,20,24,24, +24,24,24,24,24,24,24,24,24,24,24,24,24,20,22,24,24,24,24,24,24,24,24,24,24,24, +24,24,23,21,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,20,22,24,24,24,24,24, +24,24,24,24,24,23,23,23,23,20,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,19, +22,24,24,24,24,24,24,24 }; // level1Texture #endif // guard diff --git a/small3dlib.h b/small3dlib.h index 1ffc0fa..17f9527 100644 --- a/small3dlib.h +++ b/small3dlib.h @@ -4,10 +4,16 @@ /* Simple realtime 3D software rasterization renderer. It is fast, focused on resource-limited computers, located in a single C header file, with no - dependencies, using only integer arithmetics. + dependencies, using only 32bit integer arithmetics. author: Miloslav Ciz license: CC0 1.0 + additional waiver of all IP + version: TODO + + Before including the library, define S3L_PIXEL_FUNCTION to the name of the + function you'll be using to draw single pixels (this function will be called + by the library to render the frames). Also define S3L_RESOLUTION_X and + S3L_RESOLUTION_Y. -------------------- @@ -33,12 +39,13 @@ CONVENTIONS: This library should never draw pixels outside the specified screen - boundaries, so you don't have to check this! + boundaries, so you don't have to check this (that would cost CPU time)! You can safely assume that triangles are rasterized one by one and from top down, left to right (so you can utilize e.g. various caches), and if sorting is disabled the order of rasterization will be that specified in the scene - structure (of course, some triangles and models may be skipped). + structure and model arrays (of course, some triangles and models may be + skipped due to culling etc.). Angles are in S3L_Units, a full angle (2 pi) is S3L_FRACTIONS_PER_UNITs. @@ -57,8 +64,8 @@ Untransformed camera is placed at [0,0,0], looking forward along +z axis. The projection plane is centered at [0,0,0], stretrinch from -S3L_FRACTIONS_PER_UNIT to S3L_FRACTIONS_PER_UNIT horizontally (x), - vertical size (y) depends on the camera aspect ratio. Camera FOV is defined - by focal length. + vertical size (y) depends on the aspect ratio (S3L_RESOLUTION_X and + S3L_RESOLUTION_Y). Camera FOV is defined by focal length in S3L_Units. y ^ | _ @@ -74,7 +81,7 @@ ZXY order (by Z, then by X, then by Y). Positive rotation about an axis rotates CW (clock-wise) when looking in the direction of the axis. - Coordinates of pixels on screen start typically at the top left, from [0,0]. + Coordinates of pixels on the screen start at the top left, from [0,0]. There is NO subpixel accuracy (screen coordinates are only integer). @@ -101,12 +108,12 @@ - Adjacent triangles don't have any overlapping pixels, nor gaps between. - Triangles of points that lie on a single line are NOT rasterized. - - A single "long" triangle CAN be rasterized as non-continuous. + - A single "long" triangle CAN be rasterized as isolated islands of pixels. - Transforming (e.g. mirroring, rotating by 90 degrees etc.) a result of rasterizing triangle A is NOT generally equal to applying the same transformation to triangle A first and then rasterizing it. Even the number of rasterized pixels is usually different. - - If specifying a triangle with integer coordinates, then: + - If specifying a triangle with integer coordinates (which we are), then: - The bottom-most corner (or side) of a triangle is never rasterized (because it is connected to a right side). - The top-most corner can only be rasterized on completely horizontal side @@ -175,14 +182,20 @@ typedef uint16_t S3L_Index; /** Specifies what type of perspective correction (PC) to use. Remember this is an expensive operation! Possible values: - - 0: No perspective correction. Fastest, ugly. - - 1: Per-pixel perspective correction, nice but very expensive. - - 2: Approximation (computing only at every S3L_PC_APPROX_LENGTHth pixel). */ + - 0: No perspective correction. Fastest, inaccurate from most angles. + - 1: Per-pixel perspective correction, accurate but very expensive. + - 2: Approximation (computing only at every S3L_PC_APPROX_LENGTHth pixel). + Quake-style approximation is used, which only computes the PC after + S3L_PC_APPROX_LENGTH pixels. This is reasonably accurate and fast. */ #define S3L_PERSPECTIVE_CORRECTION 0 #endif #ifndef S3L_PC_APPROX_LENGTH + /** For S3L_PERSPECTIVE_CORRECTION == 2, this specifies after how many pixels + PC is recomputed. Should be a power of two to keep up the performance. + Smaller is nicer but slower. */ + #define S3L_PC_APPROX_LENGTH 32 #endif @@ -192,7 +205,8 @@ typedef uint16_t S3L_Index; #ifndef S3L_COMPUTE_DEPTH /** Whether to compute depth for each pixel (fragment). Some other options - may turn this on automatically. */ + may turn this on automatically. If you don't need depth information, turning + this off can save performance. */ #define S3L_COMPUTE_DEPTH 1 #endif @@ -204,37 +218,41 @@ typedef uint16_t S3L_Index; won't be pixel-accurate and has to mostly be done by other means (typically sorting). - 1: Use full z-buffer (of S3L_Units) for visibiltiy determination. This is - the most accurate option (and also a fast one), but requires a big + the most accurate option (and also a fast one), but requires a big amount of memory. - 2: Use reduced-size z-buffer (of bytes). This is fast and somewhat accurate, but inaccuracies can occur and a considerable amount of memory is needed. */ - #define S3L_Z_BUFFER 0 + #define S3L_Z_BUFFER 0 #endif #ifndef S3L_REDUCED_Z_BUFFER_GRANULARITY /** For S3L_Z_BUFFER == 2 this sets the reduced z-buffer granularity. */ + #define S3L_REDUCED_Z_BUFFER_GRANULARITY 5 #endif #ifndef S3L_STENCIL_BUFFER /** Whether to use stencil buffer for drawing -- with this a pixel that would - be resterized over an already rasterized pixel will be discarded. This is - mostly for front-to-back sorted drawing. */ + be resterized over an already rasterized pixel (within a frame) will be + discarded. This is mostly for front-to-back sorted drawing. */ #define S3L_STENCIL_BUFFER 0 #endif #ifndef S3L_SORT /** Defines how to sort triangles before drawing a frame. This can be used to - solve visibility in case z-buffer is not used, to prevent overwrting already + solve visibility in case z-buffer is not used, to prevent overwriting already rasterized pixels, implement transparency etc. Note that for simplicity and performance a relatively simple sorting is used which doesn't work completely correctly, so mistakes can occur (even the best sorting wouldn't be able to - solve e.g. intersecting triangles). Possible values: + solve e.g. intersecting triangles). Note that sorting requires a bit of extra + memory -- an array of the triangles to sort -- the size of this array limits + the maximum number of triangles that can be drawn in a single frame + (S3L_MAX_TRIANGES_DRAWN). Possible values: - - 0: Don't sort triangles. This is fastest. + - 0: Don't sort triangles. This is fastest and doesn't use extra memory. - 1: Sort triangles from back to front. This can in most cases solve visibility without requiring almost any extra memory compared to z-buffer. @@ -275,7 +293,8 @@ typedef uint16_t S3L_Index; #endif /** Vector that consists of four scalars and can represent homogenous - coordinates, but is generally also used as Vec3 and Vec2. */ + coordinates, but is generally also used as Vec3 and Vec2 for various + purposes. */ typedef struct { S3L_Unit x; @@ -284,6 +303,9 @@ typedef struct S3L_Unit w; } S3L_Vec4; +#define S3L_logVec4(v)\ + printf("Vec4: %d %d %d %d\n",((v).x),((v).y),((v).z),((v).w)) + static inline void S3L_initVec4(S3L_Vec4 *v); static inline void S3L_setVec4(S3L_Vec4 *v, S3L_Unit x, S3L_Unit y, S3L_Unit z, S3L_Unit w); @@ -301,7 +323,7 @@ static inline S3L_Unit S3L_dotProductVec3(S3L_Vec4 a, S3L_Vec4 b); be normalized as well. */ void S3L_reflect(S3L_Vec4 toLight, S3L_Vec4 normal, S3L_Vec4 *result); -/** Determines the winding of triangle, returns 1 (CW, clockwise), -1 (CCW, +/** Determines the winding of a triangle, returns 1 (CW, clockwise), -1 (CCW, counterclockwise) or 0 (points lie on a single line). */ static inline int8_t S3L_triangleWinding( S3L_ScreenCoord x0, @@ -311,9 +333,6 @@ static inline int8_t S3L_triangleWinding( S3L_ScreenCoord x2, S3L_ScreenCoord y2); -#define S3L_logVec4(v)\ - printf("Vec4: %d %d %d %d\n",((v).x),((v).y),((v).z),((v).w)) - typedef struct { S3L_Vec4 translation; @@ -355,7 +374,6 @@ void S3L_rotationToDirections( S3L_Vec4 *right, S3L_Vec4 *up); - /** 4x4 matrix, used mostly for 3D transforms. The indexing is this: matrix[column][row]. */ typedef S3L_Unit S3L_Mat4[4][4]; @@ -386,7 +404,7 @@ void S3L_makeScaleMatrix( S3L_Unit scaleZ, S3L_Mat4 *m); -/** Makes a matrixfor rotation in the ZXY order. */ +/** Makes a matrix for rotation in the ZXY order. */ void S3L_makeRotationMatrixZXY( S3L_Unit byX, S3L_Unit byY, @@ -538,7 +556,6 @@ void S3L_triangleNormal(S3L_Vec4 t0, S3L_Vec4 t1, S3L_Vec4 t2, vectors (into x, y, z and w, depending on 'numComponents'). This function is meant to be used per-triangle (typically from a cache), NOT per-pixel, as it is not as fast as possible! */ - void S3L_getIndexedTriangleValues( S3L_Index triangleIndex, const S3L_Index *indices, @@ -554,7 +571,6 @@ void S3L_getIndexedTriangleValues( sizeof(S3L_Unit). Note that for advanced allowing sharp edges it is not sufficient to have per-vertex normals, but must be per-triangle. This function doesn't support this. */ - void S3L_computeModelNormals(S3L_Model3D model, S3L_Unit *dst, int8_t transformNormals);