Add text
81
assets.h
@ -588,4 +588,85 @@ uint8_t SFG_backgrounds[][SFG_TEXTURE_SIZE * SFG_TEXTURE_SIZE] =
|
||||
}
|
||||
};
|
||||
|
||||
uint8_t SFG_charToFontIndex(char c)
|
||||
{
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 'a';
|
||||
|
||||
if (c >= 'A' && c <= 'Z')
|
||||
return c - 'A';
|
||||
|
||||
if (c >= '0' && c <= '9')
|
||||
return c - '0';
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case ' ': return 26; break;
|
||||
case '.': return 27; break;
|
||||
case ',': return 28; break;
|
||||
case '!': return 29; break;
|
||||
case '/': return 41; break;
|
||||
case '-': return 42; break;
|
||||
case '+': return 43; break;
|
||||
case '(': return 44; break;
|
||||
case ')': return 45; break;
|
||||
case '%': return 46; break;
|
||||
default: return 30; break; // "?"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
4x4 font, each character stored as 16 bits.
|
||||
*/
|
||||
SFG_PROGRAM_MEMORY uint16_t SFG_font[47] =
|
||||
{
|
||||
0xfaf0, // 0 "A"
|
||||
0xfd70, // 1 "B"
|
||||
0x6990, // 2 "C"
|
||||
0xf960, // 3 "D"
|
||||
0xfd90, // 4 "E"
|
||||
0xfa80, // 5 "F"
|
||||
0x69b0, // 6 "G"
|
||||
0xf4f0, // 7 "H"
|
||||
0x9f90, // 8 "I"
|
||||
0x31f0, // 9 "J"
|
||||
0xf4b0, // 10 "K"
|
||||
0xf110, // 11 "L"
|
||||
0xfc4f, // 12 "M"
|
||||
0xf42f, // 13 "N"
|
||||
0x6996, // 14 "O"
|
||||
0xfae0, // 15 "P"
|
||||
0x69b7, // 16 "Q"
|
||||
0xfad0, // 17 "R"
|
||||
0x5da0, // 18 "S"
|
||||
0x8f80, // 19 "T"
|
||||
0xf1f0, // 20 "U"
|
||||
0xe1e0, // 21 "V"
|
||||
0xf32f, // 22 "W"
|
||||
0x9690, // 23 "X"
|
||||
0xc7c0, // 24 "Y"
|
||||
0xbd90, // 25 "Z"
|
||||
0x0000, // 26 " "
|
||||
0x0100, // 27 "."
|
||||
0x0300, // 28 ","
|
||||
0x0d00, // 29 "!"
|
||||
0x48b4, // 30 "?"
|
||||
0xf9f0, // 31 "0"
|
||||
0x9f10, // 32 "1"
|
||||
0xbdd0, // 33 "2"
|
||||
0x9da0, // 34 "3"
|
||||
0xe2f0, // 35 "4"
|
||||
0xdbb0, // 36 "5"
|
||||
0xfbb0, // 37 "6"
|
||||
0x8bc0, // 38 "7"
|
||||
0xfdf0, // 39 "8"
|
||||
0xddf0, // 40 "9"
|
||||
0x1680, // 41 "/"
|
||||
0x2220, // 42 "-"
|
||||
0x2720, // 43 "+"
|
||||
0x0690, // 44 "("
|
||||
0x0960, // 45 ")"
|
||||
0x9249 // 46 "%"
|
||||
};
|
||||
|
||||
#endif // guard
|
||||
|
BIN
assets/background1.png
Normal file
After Width: | Height: | Size: 979 B |
BIN
assets/font.png
Normal file
After Width: | Height: | Size: 447 B |
41
assets/font2array.py
Normal file
@ -0,0 +1,41 @@
|
||||
# Python tool to convert font image to C bit array.
|
||||
#
|
||||
# by drummyfish
|
||||
# released under CC0 1.0.
|
||||
|
||||
from PIL import Image
|
||||
|
||||
imageArray = []
|
||||
paletteColors = []
|
||||
paletteArray = []
|
||||
|
||||
image = Image.open("font.png").convert("RGB")
|
||||
pixels = image.load()
|
||||
|
||||
column = 0
|
||||
value = 0
|
||||
index = 0
|
||||
|
||||
result = ""
|
||||
|
||||
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,!?0123456789/-+()%"
|
||||
|
||||
for x in range(image.size[0]):
|
||||
|
||||
if column == 4:
|
||||
column = 0
|
||||
value = 0
|
||||
index += 1
|
||||
continue
|
||||
|
||||
for y in range(image.size[1]):
|
||||
value = value * 2 + (1 if pixels[x,y][0] < 128 else 0)
|
||||
|
||||
if column == 3:
|
||||
result += " 0x" + hex(value)[2:].zfill(4) + ", // " + str(index) + " \"" + chars[index] + "\"\n"
|
||||
|
||||
column += 1
|
||||
|
||||
result = "{\n" + result + "}";
|
||||
|
||||
print(result)
|
BIN
assets/sprite_barrel.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/wall_texture10.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/wall_texture11.png
Normal file
After Width: | Height: | Size: 927 B |
BIN
assets/wall_texture12.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/wall_texture13.png
Normal file
After Width: | Height: | Size: 995 B |
BIN
assets/wall_texture2.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/wall_texture3.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/wall_texture4.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/wall_texture5.png
Normal file
After Width: | Height: | Size: 956 B |
BIN
assets/wall_texture6.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
assets/wall_texture7.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/wall_texture8.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/wall_texture9.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
58
main.c
@ -1010,6 +1010,62 @@ void SFG_drawMap()
|
||||
}
|
||||
|
||||
y += SFG_MAP_PIXEL_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Draws text on screen using the bitmap font stored in assets.
|
||||
*/
|
||||
void SFG_drawText(
|
||||
const char *text,
|
||||
uint16_t x,
|
||||
uint16_t y,
|
||||
uint8_t size,
|
||||
uint8_t color)
|
||||
{
|
||||
uint16_t pos = 0;
|
||||
|
||||
uint16_t currentX = x;
|
||||
uint16_t currentY = y;
|
||||
|
||||
while (text[pos] != 0)
|
||||
{
|
||||
uint16_t character = SFG_font[SFG_charToFontIndex(text[pos])];
|
||||
|
||||
for (uint8_t i = 0; i < 4; ++i)
|
||||
{
|
||||
currentY = y;
|
||||
|
||||
for (uint8_t j = 0; j < 4; ++j)
|
||||
{
|
||||
if (character & 0x8000)
|
||||
for (uint8_t k = 0; k < size; ++k)
|
||||
for (uint8_t l = 0; l < size; ++l)
|
||||
{
|
||||
uint16_t drawX = currentX + k;
|
||||
uint16_t drawY = currentY + l;
|
||||
|
||||
if (drawX >= 0 && drawX < SFG_GAME_RESOLUTION_X &&
|
||||
drawY >= 0 && drawY < SFG_GAME_RESOLUTION_Y)
|
||||
SFG_setGamePixel(drawX,drawY,color);
|
||||
}
|
||||
|
||||
currentY += size;
|
||||
character = character << 1;
|
||||
}
|
||||
|
||||
currentX += size;
|
||||
|
||||
if (currentX >= SFG_GAME_RESOLUTION_X)
|
||||
break;
|
||||
}
|
||||
|
||||
currentX += size;
|
||||
|
||||
if (currentX >= SFG_GAME_RESOLUTION_X)
|
||||
break;
|
||||
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1073,6 +1129,8 @@ void SFG_draw()
|
||||
// substract head bob after rendering
|
||||
SFG_player.camera.height -= headBobOffset;
|
||||
#endif
|
||||
|
||||
SFG_drawText("test text!",10,20,3,7);
|
||||
}
|
||||
}
|
||||
|
||||
|