Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » Loading fonts

This thread is locked; no one can reply to it. rss feed Print
Loading fonts
Sylvarant
Member #7,886
October 2006

when you want to load a font in Allegro where does he look for the file?
And what's the difference between registering and loading a font?

miran
Member #2,407
June 2002

Quote:

when you want to load a font in Allegro where does he look for the file?

Wherever you tell it to look.

Quote:

And what's the difference between registering and loading a font?

What do you mean by registering a font?

--
sig used to be here

TeamTerradactyl
Member #7,733
September 2006
avatar

I don't know about registering fonts or anything, but here's something we've used in a few games that seems to work:

1BITMAP *font6x6;
2 
3int fontHeight = 6;
4int fontWidth = 6;
5 
6int numLetters = 91;
7 
8static unsigned char font6[numLetters * (fontHeight * fontWidth)] = {
9 /* Space */
10 0,0,0,0,0,0,
11 0,0,0,0,0,0,
12 0,0,0,0,0,0,
13 0,0,0,0,0,0,
14 0,0,0,0,0,0,
15 0,0,0,0,0,0,
16 
17 /* Exclamation Point */
18 0,0,1,0,0,0,
19 0,0,1,0,0,0,
20 0,0,1,0,0,0,
21 0,0,0,0,0,0,
22 0,0,1,0,0,0,
23 0,0,0,0,0,0,
24 
25 /* Quotation Mark */
26 0,1,0,1,0,0,
27 0,1,0,1,0,0,
28 0,0,0,0,0,0,
29 0,0,0,0,0,0,
30 0,0,0,0,0,0,
31 0,0,0,0,0,0,
32 
33 ...
34 
35 /* Uppercase A */
36 0,1,1,1,0,0,
37 1,0,0,0,1,0,
38 1,0,0,0,1,0,
39 1,1,1,1,1,0,
40 1,0,0,0,1,0,
41 0,0,0,0,0,0,
42 /* Uppercase B */
43 1,1,1,1,0,0,
44 1,0,0,0,1,0,
45 1,1,1,1,0,0,
46 1,0,0,0,1,0,
47 1,1,1,1,0,0,
48 0,0,0,0,0,0,
49 
50 ...
51};
52 
53 
54void getfont(void)
55{
56 int currentLetter;
57 int letterWidth;
58 
59 unsigned char *ptr = font6;
60 
61 /* Set the color of this font to medium-gray */
62 int color_gray[] = { 0, 9, 15 };
63 
64 for (currentLetter = 0; currentLetter < (numLetters * fontHeight); currentLetter++)
65 for (letterWidth = 0; letterWidth < fontWidth; letterWidth++)
66 putpixel(font6x6, letterWidth, currentLetter, color_gray[(int) *ptr++]);
67 
68}

Here, the actual font that you'll use is the bitmap font6x6. Then you would simply use a function like this to actually write the letters onto the screen somewhere:

1void write(BITMAP *target, BITMAP *source, int x, int y, string text)
2{
3 int currentLetter;
4 int temp;
5
6 for (currentLetter = 0; currentLetter < text.length(); currentLetter++)
7 {
8 temp = text[currentLetter] - 32;
9 if (temp < 0)
10 temp = 0;
11 if (temp > numLetters)
12 temp = numLetters;
13 masked_blit(source, target, 0, temp * 6, currentLetter * 6 + x, y,
14 source->width, source->height);
15 }
16}

You call this with a simple writeFont(double_buffer, font6x6, x, y, some_string);

It's ugly, I know, but this is ONE way of creating your own custom font. You could take the same data, store it into a DAT file and save a lot more space, but this is just one example.

-TeamTerradactyl

Sylvarant
Member #7,886
October 2006

"What do you mean by registering a font?"
register font file type :
void register_font_file_type(const char *ext, FONT *(*load)(const char
*filename, RGB *pal, void *param));

Another question were can I find fonts of the correct type?

Evert
Member #794
November 2000
avatar

Quote:

Here, the actual font that you'll use is the bitmap font6x6. Then you would simply use a function like this to actually write the letters onto the screen somewhere:

Bloody hell. Next time, check the manual before you try to reinvent the wheel.

Quote:

And what's the difference between registering and loading a font?

What the manual says it is:

Quote:

FONT *load_font(const char *filename, RGB *pal, void *param);

Loads a font from a file.

Quote:

void register_font_file_type(const char *ext, FONT *(*load)(const char *filename, RGB *pal, void *param));

Informs the load_font() functions of a new file type, providing a routine to read fonts in this format.

After registering the FONT type, you can use Allegro's normal load_font() function to load it.

Go to: