/* * ttyvaders Textmode shoot'em up * Copyright (c) 2002 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. */ /* * Compile-time limits */ #define STARS 50 #define WEAPONS 200 #define BONUS 30 #define ALIENS 30 #define EXPLOSIONS 200 /* * Game defines */ #define MAX_LIFE 1000 #define MAX_SPECIAL 200 #define COST_NUKE (100*MAX_SPECIAL/100) #define COST_BEAM (75*MAX_SPECIAL/100) #define COST_FRAGBOMB (50*MAX_SPECIAL/100) /* * Graphics primitives */ #include "ee.h" /* * Useful macros */ #define GET_MAX(a,b) ((a)>(b)?(a):(b)) #define GET_MIN(a,b) ((a)<(b)?(a):(b)) /* * Game structures */ typedef struct { int w, h, *left, *right; } tunnel; typedef struct { int x, y, z, c; char ch; } starfield; typedef struct { enum { EXPLOSION_NONE, EXPLOSION_SMALL, EXPLOSION_MEDIUM } type[EXPLOSIONS]; int x[EXPLOSIONS]; int y[EXPLOSIONS]; int vx[EXPLOSIONS]; int vy[EXPLOSIONS]; int n[EXPLOSIONS]; } explosions; typedef struct { 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]; int y2[WEAPONS]; int x3[WEAPONS]; int y3[WEAPONS]; int vx[WEAPONS]; int vy[WEAPONS]; int n[WEAPONS]; } weapons; typedef struct { enum { BONUS_NONE, BONUS_LIFE, BONUS_GREEN } type[BONUS]; int x[BONUS]; int y[BONUS]; int n[BONUS]; } bonus; typedef struct { int x, y; int vx, vy; int weapon, special; int life, dead; } player; typedef struct { enum { ALIEN_NONE, ALIEN_FOO, ALIEN_BAR, ALIEN_BAZ } type[ALIENS]; int x[ALIENS]; int y[ALIENS]; int life[ALIENS]; int img[ALIENS]; } aliens; typedef struct { int w, h; int x, y; int frame; } box; typedef struct { int w, h; starfield *sf; weapons *wp; explosions *ex; tunnel *t; player *p; aliens *al; bonus *bo; } game; /* * From aliens.c */ void init_aliens(game *, aliens *); void draw_aliens(game *, aliens *); void update_aliens(game *, aliens *); void add_alien(game *, aliens *, int, int, int); /* * From bonus.c */ void init_bonus(game *, bonus *); void draw_bonus(game *, bonus *); void update_bonus(game *, bonus *); void add_bonus(game *, bonus *, int, int, int); /* * From box.c */ box * create_box(game *, int, int, int, int); void draw_box(game *, box *); void free_box(box *); /* * From ceo.c */ void ceo_alert(game *); /* * From collide.c */ void collide_weapons_tunnel(game *, weapons *, tunnel *, explosions *); void collide_weapons_aliens(game *, weapons *, aliens *, explosions *); void collide_player_tunnel(game *, player *, tunnel *, explosions *); /* * From explosions.c */ void init_explosions(game *, explosions *); void add_explosion(game *, explosions *, int, int, int, int, int); void draw_explosions(game *, explosions *); void update_explosions(game *, explosions *); /* * From overlay.c */ void draw_status(game *); /* * From player.c */ player * create_player(game *); void free_player(player *); void draw_player(game *, player *); void update_player(game *, player *); /* * From starfield.c */ starfield * create_starfield(game *); void draw_starfield(game *, starfield *); void update_starfield(game *, starfield *); void free_starfield(game *, starfield *); /* * From tunnel.c */ tunnel * create_tunnel(game *, int, int); void free_tunnel(tunnel *); void draw_tunnel(game *, tunnel *); void update_tunnel(game *, tunnel *); /* * From weapons.c */ void init_weapons(game *, weapons *); void draw_weapons(game *, weapons *); void update_weapons(game *, weapons *); void add_weapon(game *, weapons *, int, int, int, int, int);