* new super weapon, the fragmentation bomb. git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/ttyvaders/trunk@42 92316355-f0b4-4df1-b90c-862c8a59935fmaster
@@ -104,7 +104,7 @@ Shots | |||
' ` -' `- ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. | |||
,--. | |||
( () ) | |||
( ', ) | |||
`--' | |||
o O | |||
o ° | |||
@@ -3,7 +3,7 @@ | |||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||
* All Rights Reserved | |||
* | |||
* $Id: aliens.c,v 1.6 2002/12/22 18:44:12 sam Exp $ | |||
* $Id: aliens.c,v 1.7 2002/12/22 22:17:41 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 | |||
@@ -67,6 +67,15 @@ void update_aliens( game *g, aliens *al ) | |||
for( i = 0; i < ALIENS; i++ ) | |||
{ | |||
/* If alien died, make it explode */ | |||
if( al->type[i] != ALIEN_NONE && al->life[i] < 0 ) | |||
{ | |||
add_explosion( g, g->ex, al->x[i], al->y[i], 0, 0, EXPLOSION_MEDIUM ); | |||
al->type[i] = ALIEN_NONE; | |||
add_bonus( g, g->bo, al->x[i], al->y[i], GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE ); | |||
} | |||
/* Update coordinates */ | |||
switch( al->type[i] ) | |||
{ | |||
case ALIEN_POOLP: | |||
@@ -3,7 +3,7 @@ | |||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||
* All Rights Reserved | |||
* | |||
* $Id: ceo.c,v 1.3 2002/12/22 18:44:12 sam Exp $ | |||
* $Id: ceo.c,v 1.4 2002/12/22 22:17:41 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 | |||
@@ -20,12 +20,15 @@ | |||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
*/ | |||
#include "config.h" | |||
#include <unistd.h> | |||
#include "common.h" | |||
void ceo_alert( void ) | |||
{ | |||
char key; | |||
int end = 0; | |||
int end = 0; | |||
while( !end ) | |||
{ | |||
@@ -3,7 +3,7 @@ | |||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||
* All Rights Reserved | |||
* | |||
* $Id: collide.c,v 1.6 2002/12/22 18:44:12 sam Exp $ | |||
* $Id: collide.c,v 1.7 2002/12/22 22:17:41 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 | |||
@@ -35,83 +35,92 @@ void collide_weapons_tunnel( game *g, weapons *wp, tunnel *t, explosions *ex ) | |||
switch( wp->type[i] ) | |||
{ | |||
case WEAPON_NONE: | |||
break; | |||
case WEAPON_SEEKER: | |||
case WEAPON_BOMB: | |||
if( x <= t->left[y] | |||
|| x >= t->right[y] ) | |||
{ | |||
int damage = wp->type[i] == WEAPON_SEEKER ? 1 : 2; | |||
add_explosion( g, ex, x, y, 0, 1, wp->type[i] == WEAPON_SEEKER ? EXPLOSION_SMALL : EXPLOSION_MEDIUM ); | |||
case WEAPON_LIGHTNING: | |||
case WEAPON_NONE: | |||
break; | |||
case WEAPON_SEEKER: | |||
case WEAPON_BOMB: | |||
case WEAPON_FRAGBOMB: | |||
if( x <= t->left[y] | |||
|| x >= t->right[y] ) | |||
{ | |||
int damage = wp->type[i] == WEAPON_SEEKER ? 1 : 2; | |||
if( x <= t->left[y] ) | |||
{ | |||
t->right[y-2] -= damage - 1; | |||
t->left[y-1] -= damage; | |||
t->left[y] -= damage + 1; | |||
t->left[y+1] -= damage; | |||
t->right[y+2] -= damage - 1; | |||
} | |||
else | |||
{ | |||
t->right[y-2] += damage - 1; | |||
t->right[y-1] += damage; | |||
t->right[y] += damage + 1; | |||
t->right[y+1] += damage; | |||
t->right[y+2] += damage - 1; | |||
} | |||
add_explosion( g, ex, x, y, 0, 1, wp->type[i] == WEAPON_SEEKER ? EXPLOSION_SMALL : EXPLOSION_MEDIUM ); | |||
wp->type[i] = WEAPON_NONE; | |||
if( x <= t->left[y] ) | |||
{ | |||
t->right[y-2] -= damage - 1; | |||
t->left[y-1] -= damage; | |||
t->left[y] -= damage + 1; | |||
t->left[y+1] -= damage; | |||
t->right[y+2] -= damage - 1; | |||
} | |||
break; | |||
case WEAPON_LASER: | |||
if( x <= t->left[y+1] | |||
|| x >= t->right[y+1] ) | |||
else | |||
{ | |||
add_explosion( g, ex, x, y+1, 0, 1, EXPLOSION_SMALL ); | |||
if( x <= t->left[y+1] ) | |||
{ | |||
t->left[y]--; | |||
t->left[y+1]-=2; | |||
t->left[y+2]--; | |||
} | |||
else | |||
{ | |||
t->right[y]++; | |||
t->right[y+1]+=2; | |||
t->right[y+2]++; | |||
} | |||
t->right[y-2] += damage - 1; | |||
t->right[y-1] += damage; | |||
t->right[y] += damage + 1; | |||
t->right[y+1] += damage; | |||
t->right[y+2] += damage - 1; | |||
} | |||
if( wp->type[i] == WEAPON_FRAGBOMB ) | |||
{ | |||
wp->n[i] = -1; | |||
} | |||
else | |||
{ | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
else if( x <= t->left[y] | |||
|| x >= t->right[y] ) | |||
} | |||
break; | |||
case WEAPON_LASER: | |||
if( x <= t->left[y+1] | |||
|| x >= t->right[y+1] ) | |||
{ | |||
add_explosion( g, ex, x, y+1, 0, 1, EXPLOSION_SMALL ); | |||
if( x <= t->left[y+1] ) | |||
{ | |||
t->left[y]--; | |||
t->left[y+1]-=2; | |||
t->left[y+2]--; | |||
} | |||
else | |||
{ | |||
add_explosion( g, ex, x, y, 0, 1, EXPLOSION_SMALL ); | |||
t->right[y]++; | |||
t->right[y+1]+=2; | |||
t->right[y+2]++; | |||
} | |||
if( x <= t->left[y] ) | |||
{ | |||
t->left[y-1]--; | |||
t->left[y]-=2; | |||
t->left[y+1]--; | |||
} | |||
else | |||
{ | |||
t->right[y-1]++; | |||
t->right[y]+=2; | |||
t->right[y+1]++; | |||
} | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
else if( x <= t->left[y] | |||
|| x >= t->right[y] ) | |||
{ | |||
add_explosion( g, ex, x, y, 0, 1, EXPLOSION_SMALL ); | |||
wp->type[i] = WEAPON_NONE; | |||
if( x <= t->left[y] ) | |||
{ | |||
t->left[y-1]--; | |||
t->left[y]-=2; | |||
t->left[y+1]--; | |||
} | |||
else | |||
{ | |||
t->right[y-1]++; | |||
t->right[y]+=2; | |||
t->right[y+1]++; | |||
} | |||
break; | |||
case WEAPON_NUKE: | |||
case WEAPON_BEAM: | |||
/* The nuke and the laser do not break the tunnel */ | |||
break; | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
break; | |||
case WEAPON_NUKE: | |||
case WEAPON_BEAM: | |||
/* The nuke and the laser do not break the tunnel */ | |||
break; | |||
} | |||
} | |||
} | |||
@@ -130,125 +139,110 @@ void collide_weapons_aliens( game *g, weapons *wp, aliens *al, explosions *ex ) | |||
switch( wp->type[i] ) | |||
{ | |||
case WEAPON_NONE: | |||
break; | |||
case WEAPON_NUKE: | |||
/* Big nuke */ | |||
r = (29 - wp->n[i]) * (29 - wp->n[i]) / 8; | |||
case WEAPON_LIGHTNING: | |||
case WEAPON_NONE: | |||
break; | |||
case WEAPON_NUKE: | |||
/* Big nuke */ | |||
r = (29 - wp->n[i]) * (29 - wp->n[i]) / 8; | |||
for( j = 0; j < ALIENS; j++ ) | |||
for( j = 0; j < ALIENS; j++ ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE || al->life[j] < 0 ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE ) | |||
{ | |||
continue; | |||
} | |||
if( wp->n[i] == 0 /* Nuke destroys _everything_ */ || | |||
(al->x[j] - x) * (al->x[j] - x) | |||
+ 4 * (al->y[j] - y) * (al->y[j] - y) | |||
<= r * r ) | |||
{ | |||
/* Kill alien, not nuke */ | |||
al->type[j] = ALIEN_NONE; | |||
add_explosion( g, ex, al->x[j], al->y[j], 0, 0, EXPLOSION_MEDIUM ); | |||
add_bonus( g, g->bo, al->x[j], al->y[j], GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE ); | |||
} | |||
continue; | |||
} | |||
break; | |||
case WEAPON_BEAM: | |||
r = (29 - wp->n[i]) * (29 - wp->n[i]) / 8; | |||
for( j = 0; j < ALIENS; j++ ) | |||
if( wp->n[i] == 0 /* Nuke destroys _everything_ */ || | |||
(al->x[j] - x) * (al->x[j] - x) | |||
+ 4 * (al->y[j] - y) * (al->y[j] - y) | |||
<= r * r ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE ) | |||
{ | |||
continue; | |||
} | |||
/* Kill alien, not nuke */ | |||
al->life[j] -= 10; | |||
} | |||
} | |||
break; | |||
case WEAPON_BEAM: | |||
r = (29 - wp->n[i]) * (29 - wp->n[i]) / 8; | |||
if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y >= al->y[j] + 2 && y-5-r <= al->y[j] ) | |||
{ | |||
al->life[j] -= 4; | |||
if( al->life[j] <= 0 ) | |||
{ | |||
al->type[j] = ALIEN_NONE; | |||
add_explosion( g, ex, al->x[j], al->y[j], 0, 0, EXPLOSION_MEDIUM ); | |||
add_bonus( g, g->bo, al->x[j], al->y[j], GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE ); | |||
} | |||
} | |||
for( j = 0; j < ALIENS; j++ ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE || al->life[j] < 0 ) | |||
{ | |||
continue; | |||
} | |||
break; | |||
case WEAPON_LASER: | |||
for( j = 0; j < ALIENS; j++ ) | |||
if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y >= al->y[j] + 2 && y-5-r <= al->y[j] ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE ) | |||
{ | |||
continue; | |||
} | |||
al->life[j] -= 4; | |||
} | |||
} | |||
break; | |||
if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y >= al->y[j] && y <= al->y[j] + 2 ) | |||
{ | |||
al->life[j]--; | |||
if( al->life[j] <= 0 ) | |||
{ | |||
al->type[j] = ALIEN_NONE; | |||
add_explosion( g, ex, al->x[j], al->y[j], 0, 0, EXPLOSION_MEDIUM ); | |||
add_bonus( g, g->bo, al->x[j], al->y[j], GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE ); | |||
} | |||
ok = 1; | |||
} | |||
else if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y+1 >= al->y[j] && y+1 <= al->y[j] + 2 ) | |||
{ | |||
al->life[j]--; | |||
if( al->life[j] <= 0 ) | |||
{ | |||
al->type[j] = ALIEN_NONE; | |||
add_explosion( g, ex, al->x[j], al->y[j]+1, 0, 0, EXPLOSION_MEDIUM ); | |||
add_bonus( g, g->bo, al->x[j], al->y[j]+1, GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE ); | |||
} | |||
ok = 1; | |||
} | |||
case WEAPON_LASER: | |||
for( j = 0; j < ALIENS; j++ ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE || al->life[j] < 0 ) | |||
{ | |||
continue; | |||
} | |||
if( ok ) | |||
if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y >= al->y[j] && y <= al->y[j] + 2 ) | |||
{ | |||
add_explosion( g, ex, x, y+1, 0, 0, EXPLOSION_SMALL ); | |||
wp->type[i] = WEAPON_NONE; | |||
al->life[j]--; | |||
ok = 1; | |||
} | |||
break; | |||
else if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y+1 >= al->y[j] && y+1 <= al->y[j] + 2 ) | |||
{ | |||
al->life[j]--; | |||
ok = 1; | |||
} | |||
} | |||
case WEAPON_SEEKER: | |||
case WEAPON_BOMB: | |||
for( j = 0; j < ALIENS; j++ ) | |||
if( ok ) | |||
{ | |||
add_explosion( g, ex, x, y+1, 0, 0, EXPLOSION_SMALL ); | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
break; | |||
case WEAPON_SEEKER: | |||
case WEAPON_BOMB: | |||
case WEAPON_FRAGBOMB: | |||
for( j = 0; j < ALIENS; j++ ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE || al->life[j] < 0 ) | |||
{ | |||
if( al->type[j] == ALIEN_NONE ) | |||
{ | |||
continue; | |||
} | |||
continue; | |||
} | |||
if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y >= al->y[j] && y <= al->y[j] + 2 ) | |||
{ | |||
al->life[j] -= wp->type[i] == WEAPON_BOMB ? 5 : 1; | |||
if( al->life[j] <= 0 ) | |||
{ | |||
al->type[j] = ALIEN_NONE; | |||
add_explosion( g, ex, al->x[j], al->y[j], 0, 0, EXPLOSION_MEDIUM ); | |||
add_bonus( g, g->bo, al->x[j], al->y[j], GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE ); | |||
} | |||
ok = 1; | |||
} | |||
if( x >= al->x[j] && x <= al->x[j] + 4 | |||
&& y >= al->y[j] && y <= al->y[j] + 2 ) | |||
{ | |||
al->life[j] -= wp->type[i] == WEAPON_SEEKER ? 1 : 5; | |||
ok = 1; | |||
} | |||
} | |||
if( ok ) | |||
{ | |||
add_explosion( g, ex, x, y+1, 0, 0, wp->type[i] == WEAPON_SEEKER ? EXPLOSION_SMALL : EXPLOSION_MEDIUM ); | |||
if( ok ) | |||
if( wp->type[i] == WEAPON_FRAGBOMB ) | |||
{ | |||
wp->n[i] = -1; | |||
} | |||
else | |||
{ | |||
add_explosion( g, ex, x, y+1, 0, 0, wp->type[i] == WEAPON_SEEKER ? EXPLOSION_SMALL : EXPLOSION_MEDIUM ); | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
break; | |||
} | |||
break; | |||
} | |||
} | |||
} | |||
@@ -3,7 +3,7 @@ | |||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||
* All Rights Reserved | |||
* | |||
* $Id: common.h,v 1.7 2002/12/22 18:44:12 sam Exp $ | |||
* $Id: common.h,v 1.8 2002/12/22 22:17:41 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 | |||
@@ -73,7 +73,7 @@ typedef struct | |||
typedef struct | |||
{ | |||
enum { WEAPON_NONE, WEAPON_LASER, WEAPON_SEEKER, WEAPON_NUKE, WEAPON_BEAM, WEAPON_LIGHTNING, WEAPON_BOMB } type[WEAPONS]; | |||
enum { WEAPON_NONE, WEAPON_LASER, WEAPON_SEEKER, WEAPON_NUKE, WEAPON_BEAM, WEAPON_LIGHTNING, WEAPON_BOMB, WEAPON_FRAGBOMB } type[WEAPONS]; | |||
int x[WEAPONS]; | |||
int y[WEAPONS]; | |||
int x2[WEAPONS]; | |||
@@ -3,7 +3,7 @@ | |||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||
* All Rights Reserved | |||
* | |||
* $Id: main.c,v 1.7 2002/12/22 18:44:12 sam Exp $ | |||
* $Id: main.c,v 1.8 2002/12/22 22:17:41 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 | |||
@@ -129,6 +129,13 @@ static void start_game (game *g) | |||
add_weapon( g, g->wp, (g->p->x + 2) << 4, g->p->y << 4, 0, 0, WEAPON_BEAM ); | |||
} | |||
break; | |||
case 'd': | |||
if( g->p->nuke == 0 ) | |||
{ | |||
g->p->nuke = 40; | |||
add_weapon( g, g->wp, (g->p->x + 2) << 4, g->p->y << 4, 0, -16, WEAPON_FRAGBOMB ); | |||
} | |||
break; | |||
case 'b': | |||
if( g->p->weapon == 0 ) | |||
{ | |||
@@ -205,9 +212,9 @@ static void start_game (game *g) | |||
draw_tunnel( g, g->t ); | |||
draw_bonus( g, g->bo ); | |||
draw_aliens( g, g->al ); | |||
draw_player( g, g->p ); | |||
draw_explosions( g, g->ex ); | |||
draw_weapons( g, g->wp ); | |||
draw_player( g, g->p ); | |||
/* Refresh */ | |||
refresh_graphics(); | |||
@@ -3,7 +3,7 @@ | |||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||
* All Rights Reserved | |||
* | |||
* $Id: weapons.c,v 1.7 2002/12/22 18:44:12 sam Exp $ | |||
* $Id: weapons.c,v 1.8 2002/12/22 22:17:41 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 | |||
@@ -29,6 +29,7 @@ static void draw_bomb( int x, int y, int vx, int vy ); | |||
static void draw_nuke( int x, int y, int frame ); | |||
static void draw_beam( int x, int y, int frame ); | |||
static void draw_circle( int x, int y, int r, char c ); | |||
static void draw_fragbomb( int x, int y, int frame ); | |||
void init_weapons( game *g, weapons *wp ) | |||
{ | |||
@@ -80,12 +81,16 @@ void draw_weapons( game *g, weapons *wp ) | |||
gfx_putchar( '.' ); | |||
draw_bomb( wp->x[i] >> 4, wp->y[i] >> 4, wp->vx[i], wp->vy[i] ); | |||
break; | |||
case WEAPON_FRAGBOMB: | |||
draw_fragbomb( wp->x[i] >> 4, wp->y[i] >> 4, wp->n[i] ); | |||
break; | |||
case WEAPON_BEAM: | |||
draw_beam( wp->x[i] >> 4, wp->y[i] >> 4, wp->n[i] ); | |||
break; | |||
case WEAPON_NUKE: | |||
draw_nuke( wp->x[i] >> 4, wp->y[i] >> 4, wp->n[i] ); | |||
break; | |||
case WEAPON_LIGHTNING: | |||
case WEAPON_NONE: | |||
break; | |||
} | |||
@@ -171,6 +176,33 @@ void update_weapons( game *g, weapons *wp ) | |||
wp->vy[i] = (7 * wp->vy[i] | |||
+ (dy * 24) / sqrt(dx*dx+dy*dy) ) / 8; | |||
break; | |||
case WEAPON_FRAGBOMB: | |||
/* If n was set to -1, the fragbomb exploded */ | |||
if( wp->n[i] == -1 ) | |||
{ | |||
add_weapon( g, g->wp, wp->x[i] + 24, wp->y[i], 24, 0, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] - 24, wp->y[i], -24, 0, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i], wp->y[i] + 24, 0, 24, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i], wp->y[i] - 24, 0, -24, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] + 24, wp->y[i] + 8, 24, 8, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] - 24, wp->y[i] + 8, -24, 8, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] + 24, wp->y[i] - 8, 24, -8, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] - 24, wp->y[i] - 8, -24, -8, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] + 16, wp->y[i] + 16, 16, 16, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] - 16, wp->y[i] + 16, -16, 16, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] + 16, wp->y[i] - 16, 16, -16, WEAPON_SEEKER ); | |||
add_weapon( g, g->wp, wp->x[i] - 16, wp->y[i] - 16, -16, -16, WEAPON_SEEKER ); | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
wp->x[i] += wp->vx[i]; | |||
wp->y[i] += wp->vy[i]; | |||
wp->n[i]++; | |||
if( wp->y[i] < 0 ) | |||
{ | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
break; | |||
case WEAPON_BEAM: | |||
wp->x[i] = (g->p->x + 2) << 4; | |||
@@ -188,6 +220,7 @@ void update_weapons( game *g, weapons *wp ) | |||
wp->type[i] = WEAPON_NONE; | |||
} | |||
break; | |||
case WEAPON_LIGHTNING: | |||
case WEAPON_NONE: | |||
break; | |||
} | |||
@@ -207,10 +240,13 @@ void add_weapon( game *g, weapons *wp, int x, int y, int vx, int vy, int type ) | |||
wp->vx[i] = vx; | |||
wp->vy[i] = vy; | |||
wp->type[i] = type; | |||
wp->n[i] = 0; | |||
switch( type ) | |||
{ | |||
case WEAPON_LASER: | |||
break; | |||
case WEAPON_FRAGBOMB: | |||
break; | |||
case WEAPON_SEEKER: | |||
case WEAPON_BOMB: | |||
wp->x2[i] = x; | |||
@@ -412,6 +448,99 @@ 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 ); | |||
gfx_color( frame & 1 ? CYAN : WHITE ); | |||
gfx_goto( x-2, y ); | |||
gfx_putstr( "( )" ); | |||
gfx_goto( x-1, y+1 ); | |||
gfx_putstr( "`--'" ); | |||
gfx_color( frame & 1 ? WHITE : CYAN ); | |||
gfx_goto( x-1, y-1 ); | |||
gfx_putstr( ",--." ); | |||
gfx_goto( x, y ); | |||
gfx_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( '.' ); | |||
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( '.' ); | |||
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( '.' ); | |||
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( '.' ); | |||
break; | |||
} | |||
} | |||
static void draw_beam( int x, int y, int frame ) | |||
{ | |||
int r = (29 - frame) * (29 - frame) / 8; | |||