* application: pause box git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/ttyvaders/trunk@70 92316355-f0b4-4df1-b90c-862c8a59935fmaster
@@ -40,5 +40,5 @@ Things to do | |||||
* the nuke should break the tunnel | * the nuke should break the tunnel | ||||
* the laser stays alive when the ship exploded | |||||
* the laser stays alive when the ship explodes | |||||
@@ -21,6 +21,7 @@ bin_PROGRAMS = ttyvaders | |||||
ttyvaders_SOURCES = \ | ttyvaders_SOURCES = \ | ||||
aliens.c \ | aliens.c \ | ||||
bonus.c \ | bonus.c \ | ||||
box.c \ | |||||
ceo.c \ | ceo.c \ | ||||
collide.c \ | collide.c \ | ||||
common.h \ | common.h \ | ||||
@@ -0,0 +1,123 @@ | |||||
/* | |||||
* ttyvaders Textmode shoot'em up | |||||
* Copyright (c) 2002-2003 Sam Hocevar <sam@zoy.org> | |||||
* All Rights Reserved | |||||
* | |||||
* $Id: box.c,v 1.1 2003/02/09 11:17:40 sam Exp $ | |||||
* | |||||
* 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. | |||||
*/ | |||||
#include <stdlib.h> | |||||
#include "common.h" | |||||
box * create_box( game *g, int x, int y, int w, int h ) | |||||
{ | |||||
box *b = malloc( sizeof( box ) ); | |||||
b->x = x; | |||||
b->y = y; | |||||
b->w = w; | |||||
b->h = h; | |||||
b->frame = 0; | |||||
return b; | |||||
} | |||||
void draw_box( game *g, box *b ) | |||||
{ | |||||
int i, j, frame; | |||||
gfx_color( YELLOW ); | |||||
/* Draw the thin horizontal line */ | |||||
if( b->frame < 8 ) | |||||
{ | |||||
for( i = b->x - b->w * b->frame / 16 ; | |||||
i < b->x + b->w * b->frame / 16 ; | |||||
i++ ) | |||||
{ | |||||
gfx_goto( i, b->y ); | |||||
gfx_putchar( 'X' ); | |||||
} | |||||
return; | |||||
} | |||||
/* Draw the frame */ | |||||
frame = b->frame < 12 ? b->frame : 12; | |||||
for( i = b->x - b->w / 2 ; | |||||
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' ); | |||||
} | |||||
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' ); | |||||
} | |||||
gfx_color( BLACK ); | |||||
for( j = b->y - b->h * (frame - 8) / 8 + 1 ; | |||||
j < b->y + b->h * (frame - 8) / 8 ; | |||||
j++ ) | |||||
{ | |||||
for( i = b->x - b->w / 2 + 1 ; | |||||
i < b->x + b->w / 2 - 1 ; | |||||
i++ ) | |||||
{ | |||||
gfx_goto( i, j ); | |||||
gfx_putchar( 'X' ); | |||||
} | |||||
} | |||||
if( b->frame < 12 ) | |||||
{ | |||||
return; | |||||
} | |||||
/* Draw the text inside the frame */ | |||||
gfx_color( 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'" ); | |||||
} | |||||
void free_box( box *b ) | |||||
{ | |||||
free( b ); | |||||
} | |||||
@@ -3,7 +3,7 @@ | |||||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | * Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | ||||
* All Rights Reserved | * All Rights Reserved | ||||
* | * | ||||
* $Id: common.h,v 1.15 2002/12/23 16:21:38 sam Exp $ | |||||
* $Id: common.h,v 1.16 2003/02/09 11:17:40 sam Exp $ | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or modify | * 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 | * it under the terms of the GNU General Public License as published by | ||||
@@ -140,6 +140,14 @@ typedef struct | |||||
} aliens; | } aliens; | ||||
typedef struct | |||||
{ | |||||
int w, h; | |||||
int x, y; | |||||
int frame; | |||||
} box; | |||||
typedef struct | typedef struct | ||||
{ | { | ||||
int w, h; | int w, h; | ||||
@@ -181,6 +189,13 @@ void draw_bonus( game *g, bonus *bo ); | |||||
void update_bonus( game *g, bonus *bo ); | void update_bonus( game *g, bonus *bo ); | ||||
void add_bonus( game *g, bonus *bo, int x, int y, int type ); | void add_bonus( game *g, bonus *bo, int x, int y, int type ); | ||||
/* | |||||
* From box.c | |||||
*/ | |||||
box * create_box( game *g, int x, int y, int w, int h ); | |||||
void draw_box( game *g, box *b ); | |||||
void free_box( box *b ); | |||||
/* | /* | ||||
* From ceo.c | * From ceo.c | ||||
*/ | */ | ||||
@@ -220,7 +235,7 @@ int r00t( int a ); | |||||
/* | /* | ||||
* From overlay.c | * From overlay.c | ||||
*/ | */ | ||||
void draw_overlay( game *g ); | |||||
void draw_status( game *g ); | |||||
/* | /* | ||||
* From player.c | * From player.c | ||||
@@ -3,7 +3,7 @@ | |||||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | * Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | ||||
* All Rights Reserved | * All Rights Reserved | ||||
* | * | ||||
* $Id: main.c,v 1.16 2002/12/23 16:21:38 sam Exp $ | |||||
* $Id: main.c,v 1.17 2003/02/09 11:17:40 sam Exp $ | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or modify | * 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 | * it under the terms of the GNU General Public License as published by | ||||
@@ -61,6 +61,8 @@ static void start_game (game *g) | |||||
int skip = 0; | int skip = 0; | ||||
int purcompteur = 0; | int purcompteur = 0; | ||||
box *pausebox = NULL; | |||||
g->sf = create_starfield( g ); | g->sf = create_starfield( g ); | ||||
g->wp = malloc(sizeof(weapons)); | g->wp = malloc(sizeof(weapons)); | ||||
g->ex = malloc(sizeof(explosions)); | g->ex = malloc(sizeof(explosions)); | ||||
@@ -90,6 +92,15 @@ static void start_game (game *g) | |||||
break; | break; | ||||
case 'p': | case 'p': | ||||
poz = !poz; | poz = !poz; | ||||
if( poz ) | |||||
{ | |||||
pausebox = create_box( g, g->w / 2, g->h / 2, | |||||
g->w - 16, 8 ); | |||||
} | |||||
else | |||||
{ | |||||
free_box( pausebox ); | |||||
} | |||||
break; | break; | ||||
case '\t': | case '\t': | ||||
ceo_alert(); | ceo_alert(); | ||||
@@ -215,7 +226,14 @@ static void start_game (game *g) | |||||
draw_explosions( g, g->ex ); | draw_explosions( g, g->ex ); | ||||
draw_weapons( g, g->wp ); | draw_weapons( g, g->wp ); | ||||
draw_player( g, g->p ); | draw_player( g, g->p ); | ||||
draw_overlay( g ); | |||||
draw_status( g ); | |||||
/* Print pause box if needed */ | |||||
if( poz ) | |||||
{ | |||||
pausebox->frame++; | |||||
draw_box( g, pausebox ); | |||||
} | |||||
/* Refresh */ | /* Refresh */ | ||||
refresh_graphics(); | refresh_graphics(); | ||||
@@ -223,6 +241,11 @@ static void start_game (game *g) | |||||
purcompteur++; | purcompteur++; | ||||
} | } | ||||
if( pausebox ) | |||||
{ | |||||
free_box( pausebox ); | |||||
} | |||||
free_starfield( g, g->sf ); | free_starfield( g, g->sf ); | ||||
free_tunnel( g->t ); | free_tunnel( g->t ); | ||||
free_player( g->p ); | free_player( g->p ); | ||||
@@ -3,7 +3,7 @@ | |||||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | * Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | ||||
* All Rights Reserved | * All Rights Reserved | ||||
* | * | ||||
* $Id: overlay.c,v 1.2 2002/12/23 16:21:38 sam Exp $ | |||||
* $Id: overlay.c,v 1.3 2003/02/09 11:17:40 sam Exp $ | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or modify | * 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 | * it under the terms of the GNU General Public License as published by | ||||
@@ -24,7 +24,7 @@ | |||||
#include "common.h" | #include "common.h" | ||||
void draw_overlay( game *g ) | |||||
void draw_status( game *g ) | |||||
{ | { | ||||
static char dots30[] = "------------------------------"; | static char dots30[] = "------------------------------"; | ||||
static char dashes30[] = "=============================="; | static char dashes30[] = "=============================="; | ||||