|
How to make a ASCII game? |
Chris Katko
Member #1,881
January 2002
|
What would be your way to go about making the graphics for a Nethack, or Dwarf Fortress game? I realize I could use Allegro and cache all the text. (Though, it'd probably need shaders to handle color, considering all of the possible permutations.) You also lose any "real" advantage of text (telnet/ssh). I brought up ncurses and tried it. It's insanely simple to setup and use. One include, and two or three lines of code. However, immediately I was struck with a problem. Linux doesn't support extended ASCII. Supposedly, you can change terminal emulation modes to get it to work. Nope. None of those work. Supposedly, you can get a font that has ASCII code pages. But then you're requiring people to have appropriate fonts. An hour or two of sifting through people's dead links has yielded no success in getting extended page ASCII to work. Which pisses me off. So I guess I should just go with Allegro, but does anyone here of experience in the matter? -----sig: |
SiegeLord
Member #7,827
October 2006
|
DwarfFortress uses an SDL window, hence the support for custom graphics. I think that's superior to a plain terminal, since it's easier to create custom bitmap fonts. If you wanted to stick to text mode, I imagine a better method these days is to use UTF8 rather than extended ASCII. "For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18 |
Chris Katko
Member #1,881
January 2002
|
I guess I'm just gonna have to use a window. It makes sense, I'm just dragging my feet about writing the renderer. The thing about UTF-8 is you lose all of the special ASCII characters. You can't do this: {"name":"x4ujtucwz6etb6ed8n7m.gif","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/0\/a03715c7166b97eb040e1574efd3f368.gif","w":640,"h":350,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/0\/a03715c7166b97eb040e1574efd3f368"} With UTF-8, because it doesn't have all the nifty text UI characters. -----sig: |
Elias
Member #358
May 2000
|
What do you mean? UTF-8 has every single unicode character, which has every single 8-bit ASCII character ╔══════════════════════╗ ║▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜║ ║▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐║ ║▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐║ ║▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐║ ║▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐║ ║▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐║ ║▌░░░░░░░░░░░░░░░░░░░░▐║ ║▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟║ ╚══════════════════════╝
-- |
Chris Katko
Member #1,881
January 2002
|
Do allegro's font parsers support all 256 characters? Because I've got a font that supposedily supports extended characters and all I'm getting is blank over and over for special characters. Using this font: http://webdraft.hu/fonts/classic-console/ I'm getting nothing but blanks. 1
2class text_renderer_t
3 {
4 public:
5 bool is_initialized = false;
6 ALLEGRO_FONT *_font;
7
8 void load_ttf_font(const char *filename, int size, int flags)
9 {
10 _font = al_load_ttf_font(filename, size, flags);
11 if(_font != NULL)is_initialized = true;
12
13 assert(_font); //debugging for now. no error handler
14 }
15
16 void load_bitmap_font(const char *filename)
17 {
18 _font = al_load_bitmap_font(filename);
19 if(_font != NULL)is_initialized = true;
20
21 assert(_font); //debugging for now. no error handler
22 }
23
24 void draw_char(int x, int y, char character, ALLEGRO_COLOR color)
25 {
26 assert(is_initialized);
27 char text[2];
28 text[0] = character;
29 text[1] = '\0';
30 al_draw_text(_font, color, x, y, 0, text);
31 }
32
33
34 }text;
35
36
37//
38
39 text.load_ttf_font("data/clacon.ttf", 16, 0);
Using Allegro 5.1.7, Ubuntu. [edit] Going through all 256 entries gives: {"name":"609682","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/e\/5e30134ab2a74e70ecf216544545b3f9.png","w":640,"h":222,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/e\/5e30134ab2a74e70ecf216544545b3f9"} *Note the blue rectangle is not related to the font. -----sig: |
Elias
Member #358
May 2000
|
You need to type in unicode like I did above, or otherwise use a translation table from codepage 437 to unicode. E.g. ╔ is ASCII 201 in cp437 which is unicode 9556, so: al_draw_text("╔") // wors al_draw_text(al_utf8_encode(9556)) // works al_draw_text({0xE2, 0x95, 0x94, 0}) // works (pseudo code, need to add missing arguments to all functions) -- |
Izual
Member #2,756
September 2002
|
If you are going only for the ASCII looks then you can just load one of those character tilesets.
|
Chris Katko
Member #1,881
January 2002
|
Elias said: al_draw_text("╔") // wors That works! But unfortunately, it appears my ASCII TTF fonts looks ugly as hell no matter what I do. So I'll have to go the bitmap route. However, shouldn't al_load_ttf_font() support something like AL_DEFAULT_POINT_SIZE (="-1")? -----sig: |
|