diff --git a/libee/Makefile.am b/libee/Makefile.am index ccfca84..7329aa0 100644 --- a/libee/Makefile.am +++ b/libee/Makefile.am @@ -6,6 +6,6 @@ CPPFLAGS_ncurses = -DUSE_NCURSES endif lib_LIBRARIES = libee.a -libee_a_SOURCES = ee.c -libee_a_CPPFLAGS = -I../src $(CPPFLAGS_slang) $(CPPFLAGS_ncurses) +libee_a_SOURCES = ee.c ee.h +libee_a_CPPFLAGS = $(CPPFLAGS_slang) $(CPPFLAGS_ncurses) diff --git a/libee/ee.c b/libee/ee.c index 1fbdf53..0081007 100644 --- a/libee/ee.c +++ b/libee/ee.c @@ -1,6 +1,6 @@ /* - * ttyvaders Textmode shoot'em up - * Copyright (c) 2002 Sam Hocevar + * libee ASCII-Art library + * Copyright (c) 2002, 2003 Sam Hocevar * All Rights Reserved * * $Id$ @@ -27,34 +27,44 @@ #include #include -#include "common.h" +#include "ee.h" -int init_graphics( void ) +int ee_init(void) { #ifdef USE_SLANG + static char * colors[] = { "black", "green", "yellow", "white", + "red", "gray", "lightgray", "blue", "cyan", "magenta", NULL }; + int i; + /* Initialize slang library */ SLsig_block_signals(); SLtt_get_terminfo(); - if( SLkp_init() == -1 ) + if(SLkp_init() == -1) { SLsig_unblock_signals(); - return 1; + return -1; } - SLang_init_tty (-1, 0, 1); + SLang_init_tty(-1, 0, 1); - if( SLsmg_init_smg() == -1 ) + if(SLsmg_init_smg() == -1) { SLsig_unblock_signals(); - return 1; + return -1; } SLsig_unblock_signals(); SLsmg_cls(); - SLtt_set_cursor_visibility( 0 ); + SLtt_set_cursor_visibility(0); SLsmg_refresh(); + + for(i = 0; colors[i]; i++) + { + SLtt_set_color(i + 1, NULL, colors[i], "black"); + } + #elif USE_NCURSES /* Initialize ncurses library */ initscr(); @@ -63,99 +73,68 @@ int init_graphics( void ) cbreak(); noecho(); nodelay(stdscr, TRUE); - curs_set( 0 ); + curs_set(0); + + start_color(); + + init_pair(EE_BLACK, COLOR_BLACK, COLOR_BLACK); + init_pair(EE_GREEN, COLOR_GREEN, COLOR_BLACK); + init_pair(EE_YELLOW, COLOR_YELLOW, COLOR_BLACK); + init_pair(EE_WHITE, COLOR_WHITE, COLOR_BLACK); + init_pair(EE_RED, COLOR_RED, COLOR_BLACK); + init_pair(EE_GRAY, COLOR_WHITE, COLOR_BLACK); // XXX + init_pair(EE_LIGHTGRAY, COLOR_WHITE, COLOR_BLACK); // XXX + init_pair(EE_BLUE, COLOR_BLUE, COLOR_BLACK); + init_pair(EE_CYAN, COLOR_CYAN, COLOR_BLACK); + init_pair(EE_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); + #else /* Dummy driver */ + #endif return 0; } -void init_game( game *g ) +int ee_get_width(void) { #ifdef USE_SLANG - static char * const colors[] = - { - "black", "green", "yellow", "white", - "red", "gray", "lightgray", "blue", "cyan", "magenta", NULL - }; - - int i; - - for( i = 0; colors[i] ; i++ ) - { - SLtt_set_color( i+1, NULL, colors[i], "black" ); - } - - g->w = SLtt_Screen_Cols; - g->h = SLtt_Screen_Rows; + return SLtt_Screen_Cols; #elif USE_NCURSES - start_color(); - - init_pair( BLACK, COLOR_BLACK, COLOR_BLACK ); - init_pair( GREEN, COLOR_GREEN, COLOR_BLACK ); - init_pair( YELLOW, COLOR_YELLOW, COLOR_BLACK ); - init_pair( WHITE, COLOR_WHITE, COLOR_BLACK ); - init_pair( RED, COLOR_RED, COLOR_BLACK ); - init_pair( GRAY, COLOR_WHITE, COLOR_BLACK ); // XXX - init_pair( LIGHTGRAY, COLOR_WHITE, COLOR_BLACK ); // XXX - init_pair( BLUE, COLOR_BLUE, COLOR_BLACK ); - init_pair( CYAN, COLOR_CYAN, COLOR_BLACK ); - init_pair( MAGENTA, COLOR_MAGENTA, COLOR_BLACK ); - - g->w = COLS; - g->h = LINES; + return COLS; #else - /* Use dummy driver */ - g->w = 80; - g->h = 25; + return 80; #endif } -char get_key( void ) +int ee_get_height(void) { #ifdef USE_SLANG - if( SLang_input_pending (0) ) - { - return SLang_getkey(); - } + return SLtt_Screen_Rows; #elif USE_NCURSES - char key; - - if( ( key = getch() ) != ERR ) - { - return key; - } + return LINES; #else - /* Use dummy driver */ - char key = GET_RAND(0,256); - - if( key != 'q' && key != 'p' && key != '\t' ) - { - return key; - } + return 25; #endif - - return 0; } -void clear_graphics( game *g ) +void ee_clear(void) { #ifdef USE_SLANG //SLsmg_cls(); int y; - for( y = 0; y < g->h; y++ ) + for(y = 0; y < ee_get_height(); y++) { - gfx_goto( 0, y ); - gfx_putstr( " " ); + ee_goto(0, y); + ee_putstr(" "); } #elif USE_NCURSES //clear(); int y; - for( y = 0; y < g->h; y++ ) + for(y = 0; y < ee_get_height(); y++) { - gfx_goto( 0, y ); - gfx_putstr( " " ); + ee_goto(0, y); + ee_putstr(" "); } #else /* Use dummy driver */ @@ -175,21 +154,20 @@ static int64_t local_time(void) } #define DELAY 40000 - -void refresh_graphics( void ) +void ee_refresh(void) { static int64_t local_clock = 0; int64_t now; - gfx_goto( 0, 0 ); + ee_goto(0, 0); - if( !local_clock ) + if(!local_clock) { /* Initialize local_clock */ local_clock = local_time(); } - if( local_time() > local_clock + 10000 ) + if(local_time() > local_clock + 10000) { /* If we are late, we shouldn't display anything */ } @@ -204,25 +182,47 @@ void refresh_graphics( void ) now = local_time(); - if( now < local_clock + DELAY - 10000 ) + if(now < local_clock + DELAY - 10000) { - usleep( local_clock + DELAY - 10000 - now ); + usleep(local_clock + DELAY - 10000 - now); } local_clock += DELAY; } -void end_graphics( void ) +void ee_end(void) { #ifdef USE_SLANG - SLtt_set_cursor_visibility( 1 ); + SLtt_set_cursor_visibility(1); SLang_reset_tty(); SLsmg_reset_smg(); #elif USE_NCURSES - curs_set( 1 ); + curs_set(1); endwin(); #else /* Use dummy driver */ #endif } +char ee_get_key(void) +{ +#ifdef USE_SLANG + if(SLang_input_pending(0)) + { + return SLang_getkey(); + } +#elif USE_NCURSES + char key = getch(); + + if(key != ERR) + { + return key; + } +#else + return 0; + +#endif + + return 0; +} + diff --git a/libee/ee.h b/libee/ee.h new file mode 100644 index 0000000..61f13a1 --- /dev/null +++ b/libee/ee.h @@ -0,0 +1,74 @@ +/* + * libee ASCII-Art library + * Copyright (c) 2002, 2003 Sam Hocevar + * All Rights Reserved + * + * $Id$ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Graphics primitives + */ +#ifdef USE_SLANG +# include +# define ee_color(x) SLsmg_set_color(x) +# define ee_goto(x,y) SLsmg_gotorc(y,x) +# define ee_putchar(x) SLsmg_write_char(x) +# define ee_putstr(x) SLsmg_write_string(x) +#elif USE_NCURSES +# define box box_divert +# include +# undef box +# define ee_color(x) attrset(COLOR_PAIR(x)) +# define ee_goto(x,y) move(y,x) +# define ee_putchar(x) addch(x) +# define ee_putstr(x) addstr(x) +#else +# define ee_color(x) (void)(x) +# define ee_goto(x,y) do{ (void)(x); (void)(y); } while(0) +# define ee_putchar(x) (void)(x) +# define ee_putstr(x) (void)(x) +#endif + +#define ee_putcharTO(x,y,c) do{ ee_goto(x,y); ee_putchar(c); }while(0) + +/* + * Colours + */ +#define EE_BLACK 1 +#define EE_GREEN 2 +#define EE_YELLOW 3 +#define EE_WHITE 4 +#define EE_RED 5 +#define EE_GRAY 6 +#define EE_LIGHTGRAY 7 +#define EE_BLUE 8 +#define EE_CYAN 9 +#define EE_MAGENTA 10 + +/* + * Prototypes + */ +int ee_init(void); +int ee_get_width(void); +int ee_get_height(void); +void ee_clear(void); +void ee_refresh(void); +void ee_end(void); + +char ee_get_key(void); + diff --git a/src/Makefile.am b/src/Makefile.am index 229a55c..dd2c0f7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -35,6 +35,6 @@ ttyvaders_SOURCES = \ weapons.c \ $(NULL) -ttyvaders_CPPFLAGS = $(CPPFLAGS_slang) $(CPPFLAGS_ncurses) +ttyvaders_CPPFLAGS = -I../libee $(CPPFLAGS_slang) $(CPPFLAGS_ncurses) ttyvaders_LDADD = ../libee/libee.a $(LDFLAGS_slang) $(LDFLAGS_ncurses) diff --git a/src/aliens.c b/src/aliens.c index e045a4d..23dbfd3 100644 --- a/src/aliens.c +++ b/src/aliens.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: aliens.c,v 1.8 2002/12/23 13:46:27 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -133,127 +133,127 @@ static void draw_alien_bar( game *g, int x, int y, int frame ) switch( frame ) { case 0: - gfx_color( MAGENTA ); - gfx_goto( x, y ); - gfx_putstr( ",---." ); - gfx_goto( x, y+1 ); - gfx_putchar( '\\' ); - gfx_color( WHITE ); - gfx_putstr( "o O" ); - gfx_color( MAGENTA ); - gfx_putchar( '/' ); - gfx_goto( x, y+2 ); - gfx_putstr( "^^^^^" ); + ee_color( EE_MAGENTA ); + ee_goto( x, y ); + ee_putstr( ",---." ); + ee_goto( x, y+1 ); + ee_putchar( '\\' ); + ee_color( EE_WHITE ); + ee_putstr( "o O" ); + ee_color( EE_MAGENTA ); + ee_putchar( '/' ); + ee_goto( x, y+2 ); + ee_putstr( "^^^^^" ); break; case 1: - gfx_color( MAGENTA ); - gfx_goto( x, y ); - gfx_putstr( ",---." ); - gfx_goto( x, y+1 ); - gfx_putchar( '\\' ); - gfx_color( WHITE ); - gfx_putstr( "O o" ); - gfx_color( MAGENTA ); - gfx_putchar( '/' ); - gfx_goto( x, y+2 ); - gfx_putstr( "^^^^^" ); + ee_color( EE_MAGENTA ); + ee_goto( x, y ); + ee_putstr( ",---." ); + ee_goto( x, y+1 ); + ee_putchar( '\\' ); + ee_color( EE_WHITE ); + ee_putstr( "O o" ); + ee_color( EE_MAGENTA ); + ee_putchar( '/' ); + ee_goto( x, y+2 ); + ee_putstr( "^^^^^" ); break; } } static void draw_alien_baz( game *g, int x, int y, int frame ) { - gfx_color( GREEN ); - gfx_goto( x, y-1 ); - gfx_putstr( "__" ); + ee_color( EE_GREEN ); + ee_goto( x, y-1 ); + ee_putstr( "__" ); - gfx_goto( x-1, y ); - gfx_putchar( '/' ); - gfx_goto( x+2, y ); - gfx_putchar( '\\' ); + ee_goto( x-1, y ); + ee_putchar( '/' ); + ee_goto( x+2, y ); + ee_putchar( '\\' ); switch( frame ) { case 3: - gfx_goto( x-2, y+1 ); - gfx_putstr( "//'`\\\\" ); + ee_goto( x-2, y+1 ); + ee_putstr( "//'`\\\\" ); break; case 4: case 2: - gfx_goto( x-2, y+1 ); - gfx_putstr( "/(~~)\\" ); + ee_goto( x-2, y+1 ); + ee_putstr( "/(~~)\\" ); break; case 5: case 1: - gfx_goto( x-2, y+1 ); - gfx_putstr( "((^^))" ); + ee_goto( x-2, y+1 ); + ee_putstr( "((^^))" ); break; case 0: - gfx_goto( x-1, y+1 ); - gfx_putstr( "\\\\//" ); + ee_goto( x-1, y+1 ); + ee_putstr( "\\\\//" ); break; } - gfx_color( WHITE ); - gfx_goto( x, y ); - gfx_putstr( "oo" ); + ee_color( EE_WHITE ); + ee_goto( x, y ); + ee_putstr( "oo" ); } static void draw_alien_foo( game *g, int x, int y, int frame ) { - gfx_color( YELLOW ); + ee_color( EE_YELLOW ); switch( frame ) { case 0: - gfx_goto( x, y ); - gfx_putchar( '.' ); - gfx_goto( x+6, y ); - gfx_putchar( ',' ); - gfx_goto( x+1, y+1 ); - gfx_putstr( "\\ X /" ); + ee_goto( x, y ); + ee_putchar( '.' ); + ee_goto( x+6, y ); + ee_putchar( ',' ); + ee_goto( x+1, y+1 ); + ee_putstr( "\\ X /" ); break; case 7: case 1: - gfx_goto( x-1, y ); - gfx_putchar( '.' ); - gfx_goto( x+7, y ); - gfx_putchar( ',' ); - gfx_goto( x, y+1 ); - gfx_putstr( "`- X -'" ); + ee_goto( x-1, y ); + ee_putchar( '.' ); + ee_goto( x+7, y ); + ee_putchar( ',' ); + ee_goto( x, y+1 ); + ee_putstr( "`- X -'" ); break; case 6: case 2: - gfx_goto( x-1, y+1 ); - gfx_putstr( "`-- X --'" ); + ee_goto( x-1, y+1 ); + ee_putstr( "`-- X --'" ); break; case 5: case 3: - gfx_goto( x, y+1 ); - gfx_putstr( ",- X -." ); - gfx_goto( x-1, y+2 ); - gfx_putchar( '\'' ); - gfx_goto( x+7, y+2 ); - gfx_putchar( '`' ); + ee_goto( x, y+1 ); + ee_putstr( ",- X -." ); + ee_goto( x-1, y+2 ); + ee_putchar( '\'' ); + ee_goto( x+7, y+2 ); + ee_putchar( '`' ); break; case 4: - gfx_goto( x+1, y+1 ); - gfx_putstr( ", X ." ); - gfx_goto( x, y+2 ); - gfx_putchar( '/' ); - gfx_goto( x+6, y+2 ); - gfx_putchar( '\\' ); + ee_goto( x+1, y+1 ); + ee_putstr( ", X ." ); + ee_goto( x, y+2 ); + ee_putchar( '/' ); + ee_goto( x+6, y+2 ); + ee_putchar( '\\' ); break; } - gfx_goto( x+2, y+2 ); - gfx_putstr( "`V'" ); + ee_goto( x+2, y+2 ); + ee_putstr( "`V'" ); - gfx_color( WHITE ); - gfx_goto( x+2, y+1 ); - gfx_putchar( 'o' ); - gfx_goto( x+4, y+1 ); - gfx_putchar( 'o' ); + ee_color( EE_WHITE ); + ee_goto( x+2, y+1 ); + ee_putchar( 'o' ); + ee_goto( x+4, y+1 ); + ee_putchar( 'o' ); } diff --git a/src/bonus.c b/src/bonus.c index d06781f..3c6de2f 100644 --- a/src/bonus.c +++ b/src/bonus.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: bonus.c,v 1.3 2002/12/22 18:44:12 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,30 +43,30 @@ void draw_bonus( game *g, bonus *bo ) switch( bo->type[i] ) { case BONUS_GREEN: - gfx_color( (bo->n[i]/2 % 3) ? GREEN : WHITE ); - gfx_goto( bo->x[i]+1, bo->y[i]-1 ); - gfx_putchar( '_' ); - gfx_goto( bo->x[i], bo->y[i] ); - gfx_putstr( "/ \\" ); - gfx_goto( bo->x[i], bo->y[i]+1 ); - gfx_putstr( "\\_/" ); - gfx_color( WHITE ); - gfx_goto( bo->x[i]+1, bo->y[i] ); - gfx_putchar( 'g' ); + ee_color( (bo->n[i]/2 % 3) ? EE_GREEN : EE_WHITE ); + ee_goto( bo->x[i]+1, bo->y[i]-1 ); + ee_putchar( '_' ); + ee_goto( bo->x[i], bo->y[i] ); + ee_putstr( "/ \\" ); + ee_goto( bo->x[i], bo->y[i]+1 ); + ee_putstr( "\\_/" ); + ee_color( EE_WHITE ); + ee_goto( bo->x[i]+1, bo->y[i] ); + ee_putchar( 'g' ); break; case BONUS_LIFE: - gfx_color( (bo->n[i] % 3) ? RED : WHITE ); - gfx_goto( bo->x[i]+1, bo->y[i]-1 ); - gfx_putchar( '_' ); - gfx_goto( bo->x[i]+3, bo->y[i]-1 ); - gfx_putchar( '_' ); - gfx_goto( bo->x[i], bo->y[i] ); - gfx_putstr( "( ' )" ); - gfx_goto( bo->x[i]+1, bo->y[i]+1 ); - gfx_putstr( "`v'" ); - gfx_color( WHITE ); - gfx_goto( bo->x[i]+3, bo->y[i] ); - gfx_putchar( '^' ); + ee_color( (bo->n[i] % 3) ? EE_RED : EE_WHITE ); + ee_goto( bo->x[i]+1, bo->y[i]-1 ); + ee_putchar( '_' ); + ee_goto( bo->x[i]+3, bo->y[i]-1 ); + ee_putchar( '_' ); + ee_goto( bo->x[i], bo->y[i] ); + ee_putstr( "( ' )" ); + ee_goto( bo->x[i]+1, bo->y[i]+1 ); + ee_putstr( "`v'" ); + ee_color( EE_WHITE ); + ee_goto( bo->x[i]+3, bo->y[i] ); + ee_putchar( '^' ); break; case BONUS_NONE: break; diff --git a/src/box.c b/src/box.c index 6e4ff08..9d045e2 100644 --- a/src/box.c +++ b/src/box.c @@ -3,7 +3,7 @@ * Copyright (c) 2002-2003 Sam Hocevar * All Rights Reserved * - * $Id: box.c,v 1.1 2003/02/09 11:17:40 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,7 +41,7 @@ void draw_box( game *g, box *b ) { int i, j, frame; - gfx_color( YELLOW ); + ee_color( EE_YELLOW ); /* Draw the thin horizontal line */ if( b->frame < 8 ) @@ -50,8 +50,8 @@ void draw_box( game *g, box *b ) i < b->x + b->w * b->frame / 16 ; i++ ) { - gfx_goto( i, b->y ); - gfx_putchar( 'X' ); + ee_goto( i, b->y ); + ee_putchar( 'X' ); } return; @@ -64,23 +64,23 @@ void draw_box( game *g, box *b ) i < b->x + b->w / 2 ; i++ ) { - gfx_goto( i, b->y - b->h * (frame - 8) / 8 ); - gfx_putchar( 'X' ); - gfx_goto( i, b->y + b->h * (frame - 8) / 8 ); - gfx_putchar( 'X' ); + ee_goto( i, b->y - b->h * (frame - 8) / 8 ); + ee_putchar( 'X' ); + ee_goto( i, b->y + b->h * (frame - 8) / 8 ); + ee_putchar( 'X' ); } for( j = b->y - b->h * (frame - 8) / 8 ; j < b->y + b->h * (frame - 8) / 8 ; j++ ) { - gfx_goto( b->x - b->w / 2, j ); - gfx_putchar( 'X' ); - gfx_goto( b->x + b->w / 2 - 1, j ); - gfx_putchar( 'X' ); + ee_goto( b->x - b->w / 2, j ); + ee_putchar( 'X' ); + ee_goto( b->x + b->w / 2 - 1, j ); + ee_putchar( 'X' ); } - gfx_color( BLACK ); + ee_color( EE_BLACK ); for( j = b->y - b->h * (frame - 8) / 8 + 1 ; j < b->y + b->h * (frame - 8) / 8 ; @@ -90,8 +90,8 @@ void draw_box( game *g, box *b ) i < b->x + b->w / 2 - 1 ; i++ ) { - gfx_goto( i, j ); - gfx_putchar( 'X' ); + ee_goto( i, j ); + ee_putchar( 'X' ); } } @@ -101,19 +101,19 @@ void draw_box( game *g, box *b ) } /* Draw the text inside the frame */ - gfx_color( YELLOW ); + ee_color( EE_YELLOW ); /* FIXME: use a font */ - gfx_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 2 ); - gfx_putstr( "XXXX. .XXXX X X .XXXX .XXXX XXXX." ); - gfx_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 3 ); - gfx_putstr( "X `X X' X X X X' X' X `X" ); - gfx_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 4 ); - gfx_putstr( "XXXX' XXXXX X X `XXX XXXX X X" ); - gfx_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 5 ); - gfx_putstr( "X' X' `X X. ,X `X X' X ,X" ); - gfx_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 6 ); - gfx_putstr( "X X X `XXXX XXXX' `XXXX XXXX'" ); + ee_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 2 ); + ee_putstr( "XXXX. .XXXX X X .XXXX .XXXX XXXX." ); + ee_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 3 ); + ee_putstr( "X `X X' X X X X' X' X `X" ); + ee_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 4 ); + ee_putstr( "XXXX' XXXXX X X `XXX XXXX X X" ); + ee_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 5 ); + ee_putstr( "X' X' `X X. ,X `X X' X ,X" ); + ee_goto( b->x - b->w / 2 + 12, b->y - b->h / 2 + 6 ); + ee_putstr( "X X X `XXXX XXXX' `XXXX XXXX'" ); } void free_box( box *b ) diff --git a/src/ceo.c b/src/ceo.c index 295d6be..9b2528a 100644 --- a/src/ceo.c +++ b/src/ceo.c @@ -33,16 +33,16 @@ void ceo_alert( game *g ) while( !end ) { - clear_graphics( g ); + ee_clear(); - if( get_key() == '\t' ) + if( ee_get_key() == '\t' ) { end = 1; } fprintf( stderr, "foo\n" ); - refresh_graphics(); + ee_refresh(); usleep( 40000 ); } diff --git a/src/common.h b/src/common.h index 09c89ef..943db69 100644 --- a/src/common.h +++ b/src/common.h @@ -42,28 +42,7 @@ /* * Graphics primitives */ -#ifdef USE_SLANG -# include -# define gfx_color(x) SLsmg_set_color(x) -# define gfx_goto(x,y) SLsmg_gotorc(y,x) -# define gfx_putchar(x) SLsmg_write_char(x) -# define gfx_putstr(x) SLsmg_write_string(x) -#elif USE_NCURSES -#define box box_other -# include -#undef box -# define gfx_color(x) attrset(COLOR_PAIR(x)) -# define gfx_goto(x,y) move(y,x) -# define gfx_putchar(x) addch(x) -# define gfx_putstr(x) addstr(x) -#else -# define gfx_color(x) (void)(x) -# define gfx_goto(x,y) do{ (void)(x); (void)(y); } while(0) -# define gfx_putchar(x) (void)(x) -# define gfx_putstr(x) (void)(x) -#endif - -#define gfx_putcharTO(x,y,c) do{ gfx_goto(x,y); gfx_putchar(c); }while(0) +#include "ee.h" /* * Useful macros @@ -164,17 +143,6 @@ typedef struct } game; -#define BLACK 1 -#define GREEN 2 -#define YELLOW 3 -#define WHITE 4 -#define RED 5 -#define GRAY 6 -#define LIGHTGRAY 7 -#define BLUE 8 -#define CYAN 9 -#define MAGENTA 10 - /* * From aliens.c */ @@ -218,16 +186,6 @@ void add_explosion( game *g, explosions *ex, int x, int y, int vx, int vy, int t void draw_explosions( game *g, explosions *ex ); void update_explosions( game *g, explosions *ex ); -/* - * From graphics.c - */ -int init_graphics( void ); -void init_game( game *g ); -char get_key( void ); -void clear_graphics( game *g ); -void refresh_graphics( void ); -void end_graphics( void ); - /* * From math.c */ diff --git a/src/explosions.c b/src/explosions.c index 574ecf4..09e7c8f 100644 --- a/src/explosions.c +++ b/src/explosions.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: explosions.c,v 1.4 2002/12/22 18:44:12 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -71,28 +71,28 @@ void draw_explosions( game *g, explosions *ex ) for( i = 0; i < EXPLOSIONS; i++ ) { #if 0 - gfx_color( GREEN ); - gfx_goto( ex->x[i] + 3, ex->y[i] ); + ee_color( GREEN ); + ee_goto( ex->x[i] + 3, ex->y[i] ); switch( GET_RAND(0,3) ) { case 0: - gfx_putchar( 'p' ); - gfx_putchar( 'i' ); - gfx_putchar( 'f' ); + ee_putchar( 'p' ); + ee_putchar( 'i' ); + ee_putchar( 'f' ); break; case 1: - gfx_putchar( 'p' ); - gfx_putchar( 'a' ); - gfx_putchar( 'f' ); + ee_putchar( 'p' ); + ee_putchar( 'a' ); + ee_putchar( 'f' ); break; case 2: - gfx_putchar( 'p' ); - gfx_putchar( 'o' ); - gfx_putchar( 'u' ); - gfx_putchar( 'f' ); + ee_putchar( 'p' ); + ee_putchar( 'o' ); + ee_putchar( 'u' ); + ee_putchar( 'f' ); break; } - gfx_putchar( '!' ); + ee_putchar( '!' ); #endif switch( ex->type[i] ) @@ -138,116 +138,116 @@ static void draw_small_explosion( int x, int y, int frame ) switch( frame ) { case 6: - gfx_color( YELLOW ); - gfx_goto( x, y ); - gfx_putchar( '+' ); + ee_color( EE_YELLOW ); + ee_goto( x, y ); + ee_putchar( '+' ); break; case 5: - gfx_color( YELLOW ); - gfx_goto( x, y ); - gfx_putchar( 'o' ); + ee_color( EE_YELLOW ); + ee_goto( x, y ); + ee_putchar( 'o' ); break; case 4: - gfx_color( YELLOW ); - gfx_goto( x, y-1 ); - gfx_putchar( '_' ); - gfx_goto( x-1, y ); - gfx_putstr( ")_(" ); + ee_color( EE_YELLOW ); + ee_goto( x, y-1 ); + ee_putchar( '_' ); + ee_goto( x-1, y ); + ee_putstr( ")_(" ); break; case 3: - gfx_color( YELLOW ); - gfx_goto( x-1, y-1 ); - gfx_putstr( "._," ); - gfx_goto( x-1, y ); - gfx_putstr( ")_(" ); - gfx_goto( x-1, y+1 ); - gfx_putstr( "\' `" ); + ee_color( EE_YELLOW ); + ee_goto( x-1, y-1 ); + ee_putstr( "._," ); + ee_goto( x-1, y ); + ee_putstr( ")_(" ); + ee_goto( x-1, y+1 ); + ee_putstr( "\' `" ); break; case 2: - gfx_color( YELLOW ); - gfx_goto( x-1, y-1 ); - gfx_putstr( ".v," ); - gfx_goto( x-1, y ); - gfx_putstr( "> <" ); - gfx_goto( x-1, y+1 ); - gfx_putstr( "\'^`" ); + ee_color( EE_YELLOW ); + ee_goto( x-1, y-1 ); + ee_putstr( ".v," ); + ee_goto( x-1, y ); + ee_putstr( "> <" ); + ee_goto( x-1, y+1 ); + ee_putstr( "\'^`" ); break; case 1: - gfx_color( WHITE ); - gfx_goto( x-1, y-1 ); - gfx_putstr( ". ," ); - gfx_goto( x-1, y ); - gfx_putstr( " " ); - gfx_goto( x-1, y+1 ); - gfx_putstr( "\' `" ); + ee_color( EE_WHITE ); + ee_goto( x-1, y-1 ); + ee_putstr( ". ," ); + ee_goto( x-1, y ); + ee_putstr( " " ); + ee_goto( x-1, y+1 ); + ee_putstr( "\' `" ); break; } } static void draw_medium_explosion( int x, int y, int frame ) { - gfx_color( YELLOW ); + ee_color( EE_YELLOW ); switch( frame ) { case 10: - gfx_goto( x, y ); - gfx_putchar( '+' ); + ee_goto( x, y ); + ee_putchar( '+' ); break; case 9: - gfx_goto( x, y ); - gfx_putchar( 'o' ); + ee_goto( x, y ); + ee_putchar( 'o' ); break; case 8: - gfx_goto( x, y-1 ); - gfx_putchar( '_' ); - gfx_goto( x-1, y ); - gfx_putstr( ")_(" ); + ee_goto( x, y-1 ); + ee_putchar( '_' ); + ee_goto( x-1, y ); + ee_putstr( ")_(" ); break; case 7: - gfx_goto( x-1, y-1 ); - gfx_putstr( "._," ); - gfx_goto( x-1, y ); - gfx_putstr( ")_(" ); - gfx_goto( x-1, y+1 ); - gfx_putstr( "\' `" ); + ee_goto( x-1, y-1 ); + ee_putstr( "._," ); + ee_goto( x-1, y ); + ee_putstr( ")_(" ); + ee_goto( x-1, y+1 ); + ee_putstr( "\' `" ); break; case 6: - gfx_goto( x-1, y-1 ); - gfx_putstr( ".v," ); - gfx_goto( x-1, y ); - gfx_putstr( "> <" ); - gfx_goto( x-1, y+1 ); - gfx_putstr( "\'^`" ); + ee_goto( x-1, y-1 ); + ee_putstr( ".v," ); + ee_goto( x-1, y ); + ee_putstr( "> <" ); + ee_goto( x-1, y+1 ); + ee_putstr( "\'^`" ); break; case 5: - gfx_color( RED ); + ee_color( EE_RED ); case 4: - gfx_goto( x-2, y-1 ); - gfx_putstr( "_\\~/_" ); - gfx_goto( x-2, y ); - gfx_putstr( "> <" ); - gfx_goto( x-2, y+1 ); - gfx_putstr( "~/_\\~" ); + ee_goto( x-2, y-1 ); + ee_putstr( "_\\~/_" ); + ee_goto( x-2, y ); + ee_putstr( "> <" ); + ee_goto( x-2, y+1 ); + ee_putstr( "~/_\\~" ); break; case 3: - gfx_color( RED ); + ee_color( EE_RED ); case 2: - gfx_goto( x-2, y-1 ); - gfx_putstr( "_\\ /_" ); - gfx_goto( x-2, y ); - gfx_putstr( "_ _" ); - gfx_goto( x-2, y+1 ); - gfx_putstr( " / \\ " ); + ee_goto( x-2, y-1 ); + ee_putstr( "_\\ /_" ); + ee_goto( x-2, y ); + ee_putstr( "_ _" ); + ee_goto( x-2, y+1 ); + ee_putstr( " / \\ " ); break; case 1: - gfx_color( WHITE ); - gfx_goto( x-2, y-1 ); - gfx_putstr( ". \' ," ); - gfx_goto( x-2, y ); - gfx_putstr( " " ); - gfx_goto( x-2, y+1 ); - gfx_putstr( "\' . `" ); + ee_color( EE_WHITE ); + ee_goto( x-2, y-1 ); + ee_putstr( ". \' ," ); + ee_goto( x-2, y ); + ee_putstr( " " ); + ee_goto( x-2, y+1 ); + ee_putstr( "\' . `" ); break; } } diff --git a/src/main.c b/src/main.c index 444c6da..eda0f1c 100644 --- a/src/main.c +++ b/src/main.c @@ -37,19 +37,20 @@ int main (int argc, char **argv) srand(time(NULL)); - if( init_graphics() ) + if( ee_init() ) { return 1; } /* Initialize our program */ - init_game(g); + g->w = ee_get_width(); + g->h = ee_get_height(); /* Go ! */ start_game(g); /* Clean up */ - end_graphics(); + ee_end(); return 0; } @@ -83,7 +84,7 @@ static void start_game (game *g) { char key; - while( ( key = get_key() ) ) + while( ( key = ee_get_key() ) ) { switch( key ) { @@ -214,7 +215,7 @@ static void start_game (game *g) } /* Clear screen */ - clear_graphics( g ); + ee_clear(); /* Print starfield, tunnel, aliens, player and explosions */ draw_starfield( g, g->sf ); @@ -234,7 +235,7 @@ static void start_game (game *g) } /* Refresh */ - refresh_graphics(); + ee_refresh(); purcompteur++; } diff --git a/src/overlay.c b/src/overlay.c index 37f663e..885a0cd 100644 --- a/src/overlay.c +++ b/src/overlay.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: overlay.c,v 1.3 2003/02/09 11:17:40 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,57 +30,57 @@ void draw_status( game *g ) static char dashes30[] = "=============================="; /* Draw life jauge */ - gfx_color( GRAY ); - gfx_goto( 4, 1 ); - gfx_putstr( dots30 ); + ee_color( EE_GRAY ); + ee_goto( 4, 1 ); + ee_putstr( dots30 ); if( g->p->life > MAX_LIFE * 7 / 10 ) { - gfx_color( GREEN ); + ee_color( EE_GREEN ); } else if( g->p->life > MAX_LIFE * 3 / 10 ) { - gfx_color( YELLOW ); + ee_color( EE_YELLOW ); } else { - gfx_color( RED ); + ee_color( EE_RED ); } - gfx_goto( 4, 1 ); - gfx_putstr( dashes30 + ( MAX_LIFE - g->p->life ) * 30 / MAX_LIFE ); + ee_goto( 4, 1 ); + ee_putstr( dashes30 + ( MAX_LIFE - g->p->life ) * 30 / MAX_LIFE ); - gfx_color( WHITE ); - gfx_goto( 1, 1 ); - gfx_putstr( "L |" ); - gfx_goto( 34, 1 ); - gfx_putstr( "|" ); + ee_color( EE_WHITE ); + ee_goto( 1, 1 ); + ee_putstr( "L |" ); + ee_goto( 34, 1 ); + ee_putstr( "|" ); /* Draw weapon jauge */ - gfx_color( GRAY ); - gfx_goto( 42, 1 ); - gfx_putstr( dots30 + 10 ); + ee_color( EE_GRAY ); + ee_goto( 42, 1 ); + ee_putstr( dots30 + 10 ); if( g->p->special > MAX_SPECIAL * 9 / 10 ) { - gfx_color( WHITE ); + ee_color( EE_WHITE ); } else if( g->p->special > MAX_SPECIAL * 3 / 10 ) { - gfx_color( CYAN ); + ee_color( EE_CYAN ); } else { - gfx_color( BLUE ); + ee_color( EE_BLUE ); } - gfx_goto( 42, 1 ); - gfx_putstr( dashes30 + 10 + ( MAX_SPECIAL - g->p->special ) * 20 / MAX_SPECIAL ); + ee_goto( 42, 1 ); + ee_putstr( dashes30 + 10 + ( MAX_SPECIAL - g->p->special ) * 20 / MAX_SPECIAL ); - gfx_color( WHITE ); - gfx_goto( 39, 1 ); - gfx_putstr( "S |" ); - gfx_goto( 62, 1 ); - gfx_putstr( "|" ); + ee_color( EE_WHITE ); + ee_goto( 39, 1 ); + ee_putstr( "S |" ); + ee_goto( 62, 1 ); + ee_putstr( "|" ); } diff --git a/src/player.c b/src/player.c index 12f9070..a005698 100644 --- a/src/player.c +++ b/src/player.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: player.c,v 1.8 2002/12/23 16:21:38 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,18 +53,18 @@ void draw_player( game *g, player *p ) return; } - gfx_goto( p->x + 2, p->y - 2 ); - gfx_color( GREEN ); - gfx_putstr( "/\\" ); - gfx_goto( p->x + 1, p->y - 1 ); - gfx_putchar( '(' ); - gfx_color( YELLOW ); - gfx_putstr( "()" ); - gfx_color( GREEN ); - gfx_putchar( ')' ); - gfx_goto( p->x, p->y ); - gfx_color( GREEN ); - gfx_putstr( "I<__>I" ); + ee_goto( p->x + 2, p->y - 2 ); + ee_color( EE_GREEN ); + ee_putstr( "/\\" ); + ee_goto( p->x + 1, p->y - 1 ); + ee_putchar( '(' ); + ee_color( EE_YELLOW ); + ee_putstr( "()" ); + ee_color( EE_GREEN ); + ee_putchar( ')' ); + ee_goto( p->x, p->y ); + ee_color( EE_GREEN ); + ee_putstr( "I<__>I" ); } void update_player( game *g, player *p ) diff --git a/src/starfield.c b/src/starfield.c index 43744e5..e4640a8 100644 --- a/src/starfield.c +++ b/src/starfield.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: starfield.c,v 1.5 2002/12/23 09:28:37 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,9 +51,9 @@ void draw_starfield( game *g, starfield *s ) { if( s[i].x >= 0 ) { - gfx_color( s[i].c ); - gfx_goto( s[i].x, s[i].y ); - gfx_putchar( s[i].ch ); + ee_color( s[i].c ); + ee_goto( s[i].x, s[i].y ); + ee_putchar( s[i].ch ); } } } diff --git a/src/tunnel.c b/src/tunnel.c index ff06627..664e9b2 100644 --- a/src/tunnel.c +++ b/src/tunnel.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: tunnel.c,v 1.8 2002/12/23 12:47:36 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -71,7 +71,7 @@ void draw_tunnel( game *g, tunnel *t ) int i, j; char c; - gfx_color( GREEN ); + ee_color( EE_GREEN ); /* Left border */ for( i = 0; i < g->h ; i++ ) @@ -90,15 +90,15 @@ void draw_tunnel( game *g, tunnel *t ) c = ( i == 0 || t->left[i] > t->left[i-1] ) ? '\\' : '<'; } - gfx_goto( t->left[i] + 1, i ); - gfx_putchar( c ); + ee_goto( t->left[i] + 1, i ); + ee_putchar( c ); if( i + 1 < g->h ) { for( j = 1; j < t->left[i+1] - t->left[i]; j++ ) { - gfx_goto( t->left[i] + j + 1, i ); - gfx_putchar( '_' ); + ee_goto( t->left[i] + j + 1, i ); + ee_putchar( '_' ); } } } @@ -124,24 +124,24 @@ void draw_tunnel( game *g, tunnel *t ) { for( j = 1; j < t->right[i] - t->right[i+1]; j++ ) { - gfx_goto( t->right[i+1] + j - 1, i ); - gfx_putchar( '_' ); + ee_goto( t->right[i+1] + j - 1, i ); + ee_putchar( '_' ); } } - gfx_goto( t->right[i] - 1, i ); - gfx_putchar( c ); + ee_goto( t->right[i] - 1, i ); + ee_putchar( c ); } - gfx_color( RED ); + ee_color( EE_RED ); /* Left concrete */ for( i = 0; i < g->h ; i++ ) { for( j = 0 ; j <= t->left[i]; j++ ) { - gfx_goto( j, i ); - gfx_putchar( '#' ); + ee_goto( j, i ); + ee_putchar( '#' ); } } @@ -150,8 +150,8 @@ void draw_tunnel( game *g, tunnel *t ) { for( j = t->right[i] ; j < g->w ; j++ ) { - gfx_goto( j, i ); - gfx_putchar( '#' ); + ee_goto( j, i ); + ee_putchar( '#' ); } } } diff --git a/src/weapons.c b/src/weapons.c index 67eba8b..fe7f73e 100644 --- a/src/weapons.c +++ b/src/weapons.c @@ -3,7 +3,7 @@ * Copyright (c) 2002 Sam Hocevar * All Rights Reserved * - * $Id: weapons.c,v 1.13 2002/12/23 16:44:28 sam Exp $ + * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,35 +49,35 @@ void draw_weapons( game *g, weapons *wp ) switch( wp->type[i] ) { case WEAPON_LASER: - gfx_color( WHITE ); - gfx_goto( wp->x[i] >> 4, wp->y[i] >> 4 ); - gfx_putchar( '|' ); - gfx_color( CYAN ); - gfx_goto( wp->x[i] >> 4, (wp->y[i] >> 4) + 1 ); - gfx_putchar( '|' ); + ee_color( EE_WHITE ); + ee_goto( wp->x[i] >> 4, wp->y[i] >> 4 ); + ee_putchar( '|' ); + ee_color( EE_CYAN ); + ee_goto( wp->x[i] >> 4, (wp->y[i] >> 4) + 1 ); + ee_putchar( '|' ); break; case WEAPON_SEEKER: - gfx_color( CYAN ); - gfx_goto( wp->x3[i] >> 4, wp->y3[i] >> 4 ); - gfx_putchar( '.' ); - gfx_goto( wp->x2[i] >> 4, wp->y2[i] >> 4 ); - gfx_putchar( 'o' ); - gfx_color( WHITE ); - gfx_goto( wp->x[i] >> 4, wp->y[i] >> 4 ); - gfx_putchar( '@' ); + ee_color( EE_CYAN ); + ee_goto( wp->x3[i] >> 4, wp->y3[i] >> 4 ); + ee_putchar( '.' ); + ee_goto( wp->x2[i] >> 4, wp->y2[i] >> 4 ); + ee_putchar( 'o' ); + ee_color( EE_WHITE ); + ee_goto( wp->x[i] >> 4, wp->y[i] >> 4 ); + ee_putchar( '@' ); break; case WEAPON_BOMB: - gfx_color( GRAY ); - gfx_goto( (wp->x[i] - wp->vx[i]) >> 4, (wp->y[i] - wp->vy[i]) >> 4 ); - gfx_putchar( '.' ); - gfx_goto( (wp->x3[i] - wp->vx[i]) >> 4, (wp->y3[i] - wp->vy[i]) >> 4 ); - gfx_putchar( '.' ); - gfx_goto( (wp->x2[i] - wp->vx[i]) >> 4, (wp->y2[i] - wp->vy[i]) >> 4 ); - gfx_putchar( '.' ); - gfx_goto( wp->x3[i] >> 4, wp->y3[i] >> 4 ); - gfx_putchar( '.' ); - gfx_goto( wp->x2[i] >> 4, wp->y2[i] >> 4 ); - gfx_putchar( '.' ); + ee_color( EE_GRAY ); + ee_goto( (wp->x[i] - wp->vx[i]) >> 4, (wp->y[i] - wp->vy[i]) >> 4 ); + ee_putchar( '.' ); + ee_goto( (wp->x3[i] - wp->vx[i]) >> 4, (wp->y3[i] - wp->vy[i]) >> 4 ); + ee_putchar( '.' ); + ee_goto( (wp->x2[i] - wp->vx[i]) >> 4, (wp->y2[i] - wp->vy[i]) >> 4 ); + ee_putchar( '.' ); + ee_goto( wp->x3[i] >> 4, wp->y3[i] >> 4 ); + ee_putchar( '.' ); + ee_goto( wp->x2[i] >> 4, wp->y2[i] >> 4 ); + ee_putchar( '.' ); draw_bomb( wp->x[i] >> 4, wp->y[i] >> 4, wp->vx[i], wp->vy[i] ); break; case WEAPON_FRAGBOMB: @@ -289,7 +289,7 @@ void add_weapon( game *g, weapons *wp, int x, int y, int vx, int vy, int type ) static void draw_bomb( int x, int y, int vx, int vy ) { vy *= 2; - gfx_color( CYAN ); + ee_color( EE_CYAN ); if( vx > vy ) { @@ -298,39 +298,39 @@ static void draw_bomb( int x, int y, int vx, int vy ) if( vy > vx/4 ) { /* -1pi/6 */ - gfx_goto( x-4, y-1 ); - gfx_putstr( "/`-." ); - gfx_goto( x-4, y ); - gfx_putstr( "`-._\\" ); - gfx_color( WHITE ); - gfx_goto( x-1, y ); - gfx_putstr( "_\\" ); - gfx_goto( x, y+1 ); - gfx_putchar( '`' ); + ee_goto( x-4, y-1 ); + ee_putstr( "/`-." ); + ee_goto( x-4, y ); + ee_putstr( "`-._\\" ); + ee_color( EE_WHITE ); + ee_goto( x-1, y ); + ee_putstr( "_\\" ); + ee_goto( x, y+1 ); + ee_putchar( '`' ); } else if( vy < -vx/4 ) { /* 1pi/6 */ - gfx_goto( x-4, y ); - gfx_putstr( ",-' " ); - gfx_goto( x-4, y+1 ); - gfx_putstr( "\\,-'" ); - gfx_color( WHITE ); - gfx_goto( x-1, y-1 ); - gfx_putstr( "_," ); - gfx_goto( x, y ); - gfx_putchar( '/' ); + ee_goto( x-4, y ); + ee_putstr( ",-' " ); + ee_goto( x-4, y+1 ); + ee_putstr( "\\,-'" ); + ee_color( EE_WHITE ); + ee_goto( x-1, y-1 ); + ee_putstr( "_," ); + ee_goto( x, y ); + ee_putchar( '/' ); } else { /* 0pi/6 */ - gfx_goto( x-4, y-1 ); - gfx_putstr( "____" ); - gfx_goto( x-5, y ); - gfx_putstr( "|____" ); - gfx_color( WHITE ); - gfx_goto( x, y ); - gfx_putchar( '>' ); + ee_goto( x-4, y-1 ); + ee_putstr( "____" ); + ee_goto( x-5, y ); + ee_putstr( "|____" ); + ee_color( EE_WHITE ); + ee_goto( x, y ); + ee_putchar( '>' ); } } else /* top quarter */ @@ -338,43 +338,43 @@ static void draw_bomb( int x, int y, int vx, int vy ) if( vx > -vy/4 ) { /* 2pi/6 */ - gfx_goto( x-2, y ); - gfx_putstr( "/ " ); - gfx_goto( x-3, y+1 ); - gfx_putstr( "/ /" ); - gfx_goto( x-3, y+2 ); - gfx_putstr( "`'" ); - gfx_color( WHITE ); - gfx_goto( x-1, y-1 ); - gfx_putstr( "_," ); - gfx_goto( x, y ); - gfx_putchar( '|' ); + ee_goto( x-2, y ); + ee_putstr( "/ " ); + ee_goto( x-3, y+1 ); + ee_putstr( "/ /" ); + ee_goto( x-3, y+2 ); + ee_putstr( "`'" ); + ee_color( EE_WHITE ); + ee_goto( x-1, y-1 ); + ee_putstr( "_," ); + ee_goto( x, y ); + ee_putchar( '|' ); } else if( vx < vy/4 ) { /* 4pi/6 */ - gfx_goto( x+1, y ); - gfx_putstr( " \\" ); - gfx_goto( x+1, y+1 ); - gfx_putstr( "\\ \\" ); - gfx_goto( x+2, y+2 ); - gfx_putstr( "`'" ); - gfx_color( WHITE ); - gfx_goto( x, y-1 ); - gfx_putstr( "._" ); - gfx_goto( x, y ); - gfx_putchar( '|' ); + ee_goto( x+1, y ); + ee_putstr( " \\" ); + ee_goto( x+1, y+1 ); + ee_putstr( "\\ \\" ); + ee_goto( x+2, y+2 ); + ee_putstr( "`'" ); + ee_color( EE_WHITE ); + ee_goto( x, y-1 ); + ee_putstr( "._" ); + ee_goto( x, y ); + ee_putchar( '|' ); } else { /* 3pi/6 */ - gfx_goto( x-1, y+1 ); - gfx_putstr( "| |" ); - gfx_goto( x-1, y+2 ); - gfx_putstr( "|_|" ); - gfx_color( WHITE ); - gfx_goto( x-1, y ); - gfx_putstr( ",^." ); + ee_goto( x-1, y+1 ); + ee_putstr( "| |" ); + ee_goto( x-1, y+2 ); + ee_putstr( "|_|" ); + ee_color( EE_WHITE ); + ee_goto( x-1, y ); + ee_putstr( ",^." ); } } } @@ -385,41 +385,41 @@ static void draw_bomb( int x, int y, int vx, int vy ) if( vx > vy/4 ) { /* -2pi/6 */ - gfx_goto( x-2, y-2 ); - gfx_putstr( ",." ); - gfx_goto( x-2, y-1 ); - gfx_putstr( "\\ \\" ); - gfx_goto( x-1, y ); - gfx_putchar( '\\' ); - gfx_color( WHITE ); - gfx_goto( x, y ); - gfx_putstr( "_|" ); + ee_goto( x-2, y-2 ); + ee_putstr( ",." ); + ee_goto( x-2, y-1 ); + ee_putstr( "\\ \\" ); + ee_goto( x-1, y ); + ee_putchar( '\\' ); + ee_color( EE_WHITE ); + ee_goto( x, y ); + ee_putstr( "_|" ); } else if( vx < -vy/4 ) { /* -4pi/6 */ - gfx_goto( x+1, y-2 ); - gfx_putstr( ",." ); - gfx_goto( x, y-1 ); - gfx_putstr( "/ /" ); - gfx_goto( x+1, y ); - gfx_putchar( '/' ); - gfx_color( WHITE ); - gfx_goto( x-1, y ); - gfx_putstr( "|_/" ); + ee_goto( x+1, y-2 ); + ee_putstr( ",." ); + ee_goto( x, y-1 ); + ee_putstr( "/ /" ); + ee_goto( x+1, y ); + ee_putchar( '/' ); + ee_color( EE_WHITE ); + ee_goto( x-1, y ); + ee_putstr( "|_/" ); } else { /* -3pi/6 */ - gfx_goto( x, y-3 ); - gfx_putchar( '_' ); - gfx_goto( x-1, y-2 ); - gfx_putstr( "| |" ); - gfx_goto( x-1, y-1 ); - gfx_putstr( "| |" ); - gfx_color( WHITE ); - gfx_goto( x-1, y ); - gfx_putstr( "`v'" ); + ee_goto( x, y-3 ); + ee_putchar( '_' ); + ee_goto( x-1, y-2 ); + ee_putstr( "| |" ); + ee_goto( x-1, y-1 ); + ee_putstr( "| |" ); + ee_color( EE_WHITE ); + ee_goto( x-1, y ); + ee_putstr( "`v'" ); } } else /* left quarter */ @@ -427,39 +427,39 @@ static void draw_bomb( int x, int y, int vx, int vy ) if( vy > -vx/4 ) { /* -5pi/6 */ - gfx_goto( x+1, y-1 ); - gfx_putstr( ",-'\\" ); - gfx_goto( x+2, y ); - gfx_putstr( ",-'" ); - gfx_goto( x, y+1 ); - gfx_putchar( '\'' ); - gfx_color( WHITE ); - gfx_goto( x, y ); - gfx_putstr( "/_" ); + ee_goto( x+1, y-1 ); + ee_putstr( ",-'\\" ); + ee_goto( x+2, y ); + ee_putstr( ",-'" ); + ee_goto( x, y+1 ); + ee_putchar( '\'' ); + ee_color( EE_WHITE ); + ee_goto( x, y ); + ee_putstr( "/_" ); } else if( vy < vx/4 ) { /* 5pi/6 */ - gfx_goto( x+1, y ); - gfx_putstr( " `-." ); - gfx_goto( x+1, y+1 ); - gfx_putstr( "`-./" ); - gfx_color( WHITE ); - gfx_goto( x, y-1 ); - gfx_putstr( "._" ); - gfx_goto( x, y ); - gfx_putchar( '\\' ); + ee_goto( x+1, y ); + ee_putstr( " `-." ); + ee_goto( x+1, y+1 ); + ee_putstr( "`-./" ); + ee_color( EE_WHITE ); + ee_goto( x, y-1 ); + ee_putstr( "._" ); + ee_goto( x, y ); + ee_putchar( '\\' ); } else { /* 6pi/6 */ - gfx_goto( x+1, y-1 ); - gfx_putstr( "____" ); - gfx_goto( x+1, y ); - gfx_putstr( "____|" ); - gfx_color( WHITE ); - gfx_goto( x, y ); - gfx_putchar( '<' ); + ee_goto( x+1, y-1 ); + ee_putstr( "____" ); + ee_goto( x+1, y ); + ee_putstr( "____|" ); + ee_color( EE_WHITE ); + ee_goto( x, y ); + ee_putchar( '<' ); } } } @@ -467,93 +467,93 @@ static void draw_bomb( int x, int y, int vx, int vy ) static void draw_fragbomb( int x, int y, int frame ) { - gfx_color( WHITE ); + ee_color( EE_WHITE ); - gfx_color( frame & 1 ? CYAN : WHITE ); - gfx_goto( x-2, y ); - gfx_putstr( "( )" ); - gfx_goto( x-1, y+1 ); - gfx_putstr( "`--'" ); + ee_color( frame & 1 ? EE_CYAN : EE_WHITE ); + ee_goto( x-2, y ); + ee_putstr( "( )" ); + ee_goto( x-1, y+1 ); + ee_putstr( "`--'" ); - gfx_color( frame & 1 ? WHITE : CYAN ); - gfx_goto( x-1, y-1 ); - gfx_putstr( ",--." ); - gfx_goto( x, y ); - gfx_putstr( "'," ); + ee_color( frame & 1 ? EE_WHITE : EE_CYAN ); + ee_goto( x-1, y-1 ); + ee_putstr( ",--." ); + ee_goto( x, y ); + ee_putstr( "'," ); switch( frame % 4 ) { case 0: - gfx_color( CYAN ); - gfx_goto( x, y + 2 ); - gfx_putchar( 'O' ); - gfx_goto( x + 2, y + 2 ); - gfx_putchar( 'o' ); - gfx_goto( x + 1, y + 3 ); - gfx_putchar( 'o' ); - gfx_color( GRAY ); - gfx_goto( x - 1, y + 3 ); - gfx_putchar( ':' ); - gfx_goto( x + 2, y + 4 ); - gfx_putchar( ':' ); - gfx_goto( x, y + 4 ); - gfx_putchar( '.' ); - gfx_goto( x + 1, y + 5 ); - gfx_putchar( '.' ); + ee_color( EE_CYAN ); + ee_goto( x, y + 2 ); + ee_putchar( 'O' ); + ee_goto( x + 2, y + 2 ); + ee_putchar( 'o' ); + ee_goto( x + 1, y + 3 ); + ee_putchar( 'o' ); + ee_color( EE_GRAY ); + ee_goto( x - 1, y + 3 ); + ee_putchar( ':' ); + ee_goto( x + 2, y + 4 ); + ee_putchar( ':' ); + ee_goto( x, y + 4 ); + ee_putchar( '.' ); + ee_goto( x + 1, y + 5 ); + ee_putchar( '.' ); break; case 1: - gfx_color( CYAN ); - //gfx_goto( x, y + 1 ); - //gfx_putchar( 'O' ); - gfx_goto( x + 1, y + 2 ); - gfx_putchar( 'O' ); - gfx_goto( x, y + 3 ); - gfx_putchar( 'o' ); - gfx_color( GRAY ); - gfx_goto( x + 2, y + 3 ); - gfx_putchar( ':' ); - gfx_goto( x + 1, y + 4 ); - gfx_putchar( ':' ); - gfx_goto( x - 1, y + 4 ); - gfx_putchar( '.' ); - gfx_goto( x + 2, y + 5 ); - gfx_putchar( '.' ); + ee_color( EE_CYAN ); + //ee_goto( x, y + 1 ); + //ee_putchar( 'O' ); + ee_goto( x + 1, y + 2 ); + ee_putchar( 'O' ); + ee_goto( x, y + 3 ); + ee_putchar( 'o' ); + ee_color( EE_GRAY ); + ee_goto( x + 2, y + 3 ); + ee_putchar( ':' ); + ee_goto( x + 1, y + 4 ); + ee_putchar( ':' ); + ee_goto( x - 1, y + 4 ); + ee_putchar( '.' ); + ee_goto( x + 2, y + 5 ); + ee_putchar( '.' ); break; case 2: - gfx_color( CYAN ); - //gfx_goto( x - 1, y + 1 ); - //gfx_putchar( 'O' ); - gfx_goto( x + 2, y + 2 ); - gfx_putchar( 'O' ); - gfx_goto( x, y + 2 ); - gfx_putchar( 'o' ); - gfx_goto( x + 1, y + 3 ); - gfx_putchar( 'o' ); - gfx_color( GRAY ); - gfx_goto( x, y + 4 ); - gfx_putchar( ':' ); - gfx_goto( x + 2, y + 4 ); - gfx_putchar( '.' ); - gfx_goto( x + 1, y + 5 ); - gfx_putchar( '.' ); + ee_color( EE_CYAN ); + //ee_goto( x - 1, y + 1 ); + //ee_putchar( 'O' ); + ee_goto( x + 2, y + 2 ); + ee_putchar( 'O' ); + ee_goto( x, y + 2 ); + ee_putchar( 'o' ); + ee_goto( x + 1, y + 3 ); + ee_putchar( 'o' ); + ee_color( EE_GRAY ); + ee_goto( x, y + 4 ); + ee_putchar( ':' ); + ee_goto( x + 2, y + 4 ); + ee_putchar( '.' ); + ee_goto( x + 1, y + 5 ); + ee_putchar( '.' ); break; case 3: - gfx_color( CYAN ); - //gfx_goto( x + 2, y + 1 ); - //gfx_putchar( 'O' ); - gfx_goto( x + 1, y + 2 ); - gfx_putchar( 'O' ); - gfx_goto( x - 1, y + 2 ); - gfx_putchar( 'o' ); - gfx_goto( x + 2, y + 3 ); - gfx_putchar( 'o' ); - gfx_color( GRAY ); - gfx_goto( x, y + 3 ); - gfx_putchar( ':' ); - gfx_goto( x + 1, y + 4 ); - gfx_putchar( ':' ); - gfx_goto( x, y + 5 ); - gfx_putchar( '.' ); + ee_color( EE_CYAN ); + //ee_goto( x + 2, y + 1 ); + //ee_putchar( 'O' ); + ee_goto( x + 1, y + 2 ); + ee_putchar( 'O' ); + ee_goto( x - 1, y + 2 ); + ee_putchar( 'o' ); + ee_goto( x + 2, y + 3 ); + ee_putchar( 'o' ); + ee_color( EE_GRAY ); + ee_goto( x, y + 3 ); + ee_putchar( ':' ); + ee_goto( x + 1, y + 4 ); + ee_putchar( ':' ); + ee_goto( x, y + 5 ); + ee_putchar( '.' ); break; } } @@ -566,132 +566,132 @@ static void draw_beam( int x, int y, int frame ) switch( frame ) { case 24: - gfx_color( WHITE ); - gfx_goto( x, y-3 ); - gfx_putstr( "__" ); - gfx_goto( x-1, y-2 ); - gfx_putchar( '\'' ); - gfx_goto( x+2, y-2 ); - gfx_putchar( '`' ); + ee_color( EE_WHITE ); + ee_goto( x, y-3 ); + ee_putstr( "__" ); + ee_goto( x-1, y-2 ); + ee_putchar( '\'' ); + ee_goto( x+2, y-2 ); + ee_putchar( '`' ); break; case 23: - gfx_color( CYAN ); - gfx_goto( x, y-3 ); - gfx_putstr( "__" ); - gfx_color( WHITE ); - gfx_goto( x-2, y-2 ); - gfx_putstr( "-'" ); - gfx_goto( x+2, y-2 ); - gfx_putstr( "`-" ); + ee_color( EE_CYAN ); + ee_goto( x, y-3 ); + ee_putstr( "__" ); + ee_color( EE_WHITE ); + ee_goto( x-2, y-2 ); + ee_putstr( "-'" ); + ee_goto( x+2, y-2 ); + ee_putstr( "`-" ); break; case 22: - gfx_color( CYAN ); - gfx_goto( x, y-3 ); - gfx_putstr( "__" ); - gfx_goto( x-1, y-2 ); - gfx_putchar( '\'' ); - gfx_goto( x+2, y-2 ); - gfx_putchar( '`' ); - gfx_color( WHITE ); - gfx_goto( x-3, y-2 ); - gfx_putstr( ",-" ); - gfx_goto( x+3, y-2 ); - gfx_putstr( "-." ); + ee_color( EE_CYAN ); + ee_goto( x, y-3 ); + ee_putstr( "__" ); + ee_goto( x-1, y-2 ); + ee_putchar( '\'' ); + ee_goto( x+2, y-2 ); + ee_putchar( '`' ); + ee_color( EE_WHITE ); + ee_goto( x-3, y-2 ); + ee_putstr( ",-" ); + ee_goto( x+3, y-2 ); + ee_putstr( "-." ); break; case 21: - gfx_color( CYAN ); - gfx_goto( x-1, y-3 ); - gfx_putstr( "____" ); - gfx_goto( x-2, y-2 ); - gfx_putchar( '\'' ); - gfx_goto( x+3, y-2 ); - gfx_putchar( '`' ); - gfx_color( WHITE ); - gfx_goto( x-4, y-2 ); - gfx_putstr( ",-" ); - gfx_goto( x+4, y-2 ); - gfx_putstr( "-." ); + ee_color( EE_CYAN ); + ee_goto( x-1, y-3 ); + ee_putstr( "____" ); + ee_goto( x-2, y-2 ); + ee_putchar( '\'' ); + ee_goto( x+3, y-2 ); + ee_putchar( '`' ); + ee_color( EE_WHITE ); + ee_goto( x-4, y-2 ); + ee_putstr( ",-" ); + ee_goto( x+4, y-2 ); + ee_putstr( "-." ); break; case 20: - gfx_color( WHITE ); - gfx_goto( x, y-3 ); - gfx_putstr( "%%" ); - gfx_goto( x-4, y-2 ); - gfx_putchar( ',' ); - gfx_goto( x+5, y-2 ); - gfx_putchar( '.' ); - gfx_color( CYAN ); - gfx_goto( x-1, y-3 ); - gfx_putchar( ':' ); - gfx_goto( x+2, y-3 ); - gfx_putchar( ':' ); - gfx_goto( x-3, y-2 ); - gfx_putstr( "-'" ); - gfx_goto( x+3, y-2 ); - gfx_putstr( "`-" ); + ee_color( EE_WHITE ); + ee_goto( x, y-3 ); + ee_putstr( "%%" ); + ee_goto( x-4, y-2 ); + ee_putchar( ',' ); + ee_goto( x+5, y-2 ); + ee_putchar( '.' ); + ee_color( EE_CYAN ); + ee_goto( x-1, y-3 ); + ee_putchar( ':' ); + ee_goto( x+2, y-3 ); + ee_putchar( ':' ); + ee_goto( x-3, y-2 ); + ee_putstr( "-'" ); + ee_goto( x+3, y-2 ); + ee_putstr( "`-" ); break; case 19: - gfx_color( WHITE ); - gfx_goto( x, y-4 ); - gfx_putstr( "%%" ); - gfx_goto( x, y-3 ); - gfx_putstr( "##" ); - gfx_color( CYAN ); - gfx_goto( x-1, y-4 ); - gfx_putchar( ':' ); - gfx_goto( x+2, y-4 ); - gfx_putchar( ':' ); - gfx_goto( x-1, y-3 ); - gfx_putchar( '%' ); - gfx_goto( x+2, y-3 ); - gfx_putchar( '%' ); - gfx_goto( x-4, y-2 ); - gfx_putstr( ",-'" ); - gfx_goto( x+3, y-2 ); - gfx_putstr( "`-." ); - gfx_color( BLUE ); - gfx_goto( x-2, y-3 ); - gfx_putchar( ':' ); - gfx_goto( x+3, y-3 ); - gfx_putchar( ':' ); + ee_color( EE_WHITE ); + ee_goto( x, y-4 ); + ee_putstr( "%%" ); + ee_goto( x, y-3 ); + ee_putstr( "##" ); + ee_color( EE_CYAN ); + ee_goto( x-1, y-4 ); + ee_putchar( ':' ); + ee_goto( x+2, y-4 ); + ee_putchar( ':' ); + ee_goto( x-1, y-3 ); + ee_putchar( '%' ); + ee_goto( x+2, y-3 ); + ee_putchar( '%' ); + ee_goto( x-4, y-2 ); + ee_putstr( ",-'" ); + ee_goto( x+3, y-2 ); + ee_putstr( "`-." ); + ee_color( EE_BLUE ); + ee_goto( x-2, y-3 ); + ee_putchar( ':' ); + ee_goto( x+3, y-3 ); + ee_putchar( ':' ); break; case 18: default: r = (18 - frame) * (18 - frame); - gfx_color( WHITE ); - gfx_goto( x-1, y-5-r ); - gfx_putstr( ":%%:" ); - gfx_goto( x-1, y-4-r ); - gfx_putstr( "%##%" ); - gfx_color( CYAN ); - gfx_goto( x-2, y-4-r ); - gfx_putchar( ':' ); - gfx_goto( x+3, y-4-r ); - gfx_putchar( ':' ); - gfx_goto( x-2, y-2 ); - gfx_putchar( '\'' ); - gfx_goto( x+3, y-2 ); - gfx_putchar( '`' ); - gfx_color( BLUE ); - gfx_goto( x-3, y-2 ); - gfx_putchar( ':' ); - gfx_goto( x+4, y-2 ); - gfx_putchar( ':' ); + ee_color( EE_WHITE ); + ee_goto( x-1, y-5-r ); + ee_putstr( ":%%:" ); + ee_goto( x-1, y-4-r ); + ee_putstr( "%##%" ); + ee_color( EE_CYAN ); + ee_goto( x-2, y-4-r ); + ee_putchar( ':' ); + ee_goto( x+3, y-4-r ); + ee_putchar( ':' ); + ee_goto( x-2, y-2 ); + ee_putchar( '\'' ); + ee_goto( x+3, y-2 ); + ee_putchar( '`' ); + ee_color( EE_BLUE ); + ee_goto( x-3, y-2 ); + ee_putchar( ':' ); + ee_goto( x+4, y-2 ); + ee_putchar( ':' ); for( i = 0; i <= r; i++ ) { - gfx_color( WHITE ); - gfx_goto( x-1, y-3-i ); - gfx_putstr( (i+frame) % 5 ? "####" : "%%%%" ); - gfx_color( CYAN ); - gfx_goto( x-2, y-3-i ); - gfx_putchar( '%' ); - gfx_goto( x+3, y-3-i ); - gfx_putchar( '%' ); - gfx_color( BLUE ); - gfx_goto( x-3, y-3-i ); - gfx_putchar( ':' ); - gfx_goto( x+4, y-3-i ); - gfx_putchar( ':' ); + ee_color( EE_WHITE ); + ee_goto( x-1, y-3-i ); + ee_putstr( (i+frame) % 5 ? "####" : "%%%%" ); + ee_color( EE_CYAN ); + ee_goto( x-2, y-3-i ); + ee_putchar( '%' ); + ee_goto( x+3, y-3-i ); + ee_putchar( '%' ); + ee_color( EE_BLUE ); + ee_goto( x-3, y-3-i ); + ee_putchar( ':' ); + ee_goto( x+4, y-3-i ); + ee_putchar( ':' ); } break; } @@ -702,11 +702,11 @@ static void draw_nuke( int x, int y, int frame ) int r = (29 - frame) * (29 - frame) / 8; /* Lots of duplicate pixels, but we don't care */ - gfx_color( BLUE ); + ee_color( EE_BLUE ); draw_circle( x, y, r++, ':' ); - gfx_color( CYAN ); + ee_color( EE_CYAN ); draw_circle( x, y, r++, '%' ); - gfx_color( WHITE ); + ee_color( EE_WHITE ); draw_circle( x, y, r++, '#' ); draw_circle( x, y, r++, '#' ); } @@ -718,15 +718,15 @@ static void draw_circle( int x, int y, int r, char c ) /* Optimized Bresenham. Kick ass. */ for( test = 0, dx = 0, dy = r ; dx <= dy ; dx++ ) { - gfx_putcharTO( x + dx, y + dy / 2, c ); - gfx_putcharTO( x - dx, y + dy / 2, c ); - gfx_putcharTO( x + dx, y - dy / 2, c ); - gfx_putcharTO( x - dx, y - dy / 2, c ); - - gfx_putcharTO( x + dy, y + dx / 2, c ); - gfx_putcharTO( x - dy, y + dx / 2, c ); - gfx_putcharTO( x + dy, y - dx / 2, c ); - gfx_putcharTO( x - dy, y - dx / 2, c ); + ee_putcharTO( x + dx, y + dy / 2, c ); + ee_putcharTO( x - dx, y + dy / 2, c ); + ee_putcharTO( x + dx, y - dy / 2, c ); + ee_putcharTO( x - dx, y - dy / 2, c ); + + ee_putcharTO( x + dy, y + dx / 2, c ); + ee_putcharTO( x - dy, y + dx / 2, c ); + ee_putcharTO( x + dy, y - dx / 2, c ); + ee_putcharTO( x - dy, y - dx / 2, c ); test += test > 0 ? dx - dy-- : dx; }