source: ttyvaders/trunk/src/aliens.c @ 72

Last change on this file since 72 was 72, checked in by Sam Hocevar, 17 years ago
  • Fixed keywords, ignore, and lots of tiny SVN things.
  • Property svn:keywords set to Id
File size: 6.2 KB
RevLine 
[36]1/*
2 *   ttyvaders     Textmode shoot'em up
3 *   Copyright (c) 2002 Sam Hocevar <sam@zoy.org>
4 *                 All Rights Reserved
5 *
[60]6 *   $Id: aliens.c 72 2003-10-02 01:08:13Z sam $
[36]7 *
8 *   This program is free software; you can redistribute it and/or modify
9 *   it under the terms of the GNU General Public License as published by
10 *   the Free Software Foundation; either version 2 of the License, or
11 *   (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
[18]22
23#include <stdlib.h>
24
25#include "common.h"
26
[60]27static void draw_alien_foo( game *g, int x, int y, int frame );
28static void draw_alien_bar( game *g, int x, int y, int frame );
29static void draw_alien_baz( game *g, int x, int y, int frame );
[18]30
31void init_aliens( game *g, aliens *al )
32{
33    int i;
34
35    for( i = 0; i < ALIENS; i++ )
36    {
[20]37        al->type[i] = ALIEN_NONE;
[18]38    }
39}
40
41void draw_aliens( game *g, aliens *al )
42{
43    int i;
44
45    for( i = 0; i < ALIENS; i++ )
46    {
[20]47        switch( al->type[i] )
[18]48        {
[60]49            case ALIEN_FOO:
50                draw_alien_foo( g, al->x[i], al->y[i], al->img[i] % 8 );
[20]51                break;
[60]52            case ALIEN_BAR:
53                draw_alien_bar( g, al->x[i], al->y[i], al->img[i] % 2 );
[20]54                break;
[60]55            case ALIEN_BAZ:
56                draw_alien_baz( g, al->x[i], al->y[i], al->img[i] % 6 );
[20]57                break;
58            case ALIEN_NONE:
59                break;
[18]60        }
61    }
62}
63
64void update_aliens( game *g, aliens *al )
65{
66    int i;
67
68    for( i = 0; i < ALIENS; i++ )
69    {
[42]70        /* If alien died, make it explode */
71        if( al->type[i] != ALIEN_NONE && al->life[i] < 0 )
72        {
73            add_explosion( g, g->ex, al->x[i], al->y[i], 0, 0, EXPLOSION_MEDIUM );
74            al->type[i] = ALIEN_NONE;
75            add_bonus( g, g->bo, al->x[i], al->y[i], GET_RAND(0,5) ? BONUS_GREEN : BONUS_LIFE );
76        }
77
78        /* Update coordinates */
[20]79        switch( al->type[i] )
[18]80        {
[60]81            case ALIEN_FOO:
82            case ALIEN_BAR:
83            case ALIEN_BAZ:
[20]84                al->x[i] = ((al->x[i] + 5) % (g->w + 3)) - 3;
85                al->y[i] = al->y[i] + (rand() % 8) / 7 - (rand() % 8) / 7;
86                al->img[i] = al->img[i] + 1;
[18]87
[20]88                /* Check bounds */
89                if( al->y[i] < 0 ) al->y[i] = 0;
90                if( al->y[i] > g->w - 1 ) al->y[i] = g->w - 1;
91                break;
92            case ALIEN_NONE:
93                break;
[18]94        }
95    }
96}
97
[20]98void add_alien( game *g, aliens *al, int x, int y, int type )
[18]99{
100    int i;
101
102    for( i = 0; i < ALIENS; i++ )
103    {
[20]104        if( al->type[i] == ALIEN_NONE )
[18]105        {
[20]106            al->type[i] = type;
[18]107            al->x[i] = x;
108            al->y[i] = y;
109            al->img[i] = 0;
[20]110
111            switch( al->type[i] )
112            {
[60]113                case ALIEN_FOO:
[24]114                    al->life[i] = 3;
[20]115                    break;
[60]116                case ALIEN_BAR:
[24]117                    al->life[i] = 3;
[20]118                    break;
[60]119                case ALIEN_BAZ:
[24]120                    al->life[i] = 3;
[20]121                    break;
122                case ALIEN_NONE:
123                    break;
124            }
125
[18]126            break;
127        }
128    }
129}
130
[60]131static void draw_alien_bar( game *g, int x, int y, int frame )
[18]132{
[20]133    switch( frame )
[18]134    {
135    case 0:
[20]136        gfx_color( MAGENTA );
137        gfx_goto( x, y );
138        gfx_putstr( ",---." );
139        gfx_goto( x, y+1 );
140        gfx_putchar( '\\' );
141        gfx_color( WHITE );
142        gfx_putstr( "o O" );
143        gfx_color( MAGENTA );
144        gfx_putchar( '/' );
145        gfx_goto( x, y+2 );
146        gfx_putstr( "^^^^^" );
[18]147        break;
148    case 1:
[20]149        gfx_color( MAGENTA );
150        gfx_goto( x, y );
151        gfx_putstr( ",---." );
152        gfx_goto( x, y+1 );
153        gfx_putchar( '\\' );
154        gfx_color( WHITE );
155        gfx_putstr( "O o" );
156        gfx_color( MAGENTA );
157        gfx_putchar( '/' );
158        gfx_goto( x, y+2 );
159        gfx_putstr( "^^^^^" );
[18]160        break;
161    }
162}
163
[60]164static void draw_alien_baz( game *g, int x, int y, int frame )
[18]165{
[20]166    gfx_color( GREEN );
[32]167    gfx_goto( x, y-1 );
168    gfx_putstr( "__" );
[20]169
[32]170    gfx_goto( x-1, y );
171    gfx_putchar( '/' );
172    gfx_goto( x+2, y );
173    gfx_putchar( '\\' );
[20]174
175    switch( frame )
[18]176    {
[20]177    case 3:
[32]178        gfx_goto( x-2, y+1 );
179        gfx_putstr( "//'`\\\\" );
[20]180        break;
[32]181    case 4:
[20]182    case 2:
[32]183        gfx_goto( x-2, y+1 );
184        gfx_putstr( "/(~~)\\" );
[20]185        break;
[32]186    case 5:
[20]187    case 1:
[32]188        gfx_goto( x-2, y+1 );
189        gfx_putstr( "((^^))" );
[20]190        break;
[18]191    case 0:
[32]192        gfx_goto( x-1, y+1 );
193        gfx_putstr( "\\\\//" );
[18]194        break;
[20]195    }
196
[32]197    gfx_color( WHITE );
198    gfx_goto( x, y );
199    gfx_putstr( "oo" );
[20]200}
201
[60]202static void draw_alien_foo( game *g, int x, int y, int frame )
[20]203{
204    gfx_color( YELLOW );
205
206    switch( frame )
207    {
208    case 0:
209        gfx_goto( x, y );
210        gfx_putchar( '.' );
211        gfx_goto( x+6, y );
212        gfx_putchar( ',' );
213        gfx_goto( x+1, y+1 );
214        gfx_putstr( "\\ X /" );
215        break;
216    case 7:
[18]217    case 1:
[20]218        gfx_goto( x-1, y );
219        gfx_putchar( '.' );
220        gfx_goto( x+7, y );
221        gfx_putchar( ',' );
222        gfx_goto( x, y+1 );
223        gfx_putstr( "`- X -'" );
[18]224        break;
[20]225    case 6:
226    case 2:
227        gfx_goto( x-1, y+1 );
228        gfx_putstr( "`-- X --'" );
229        break;
230    case 5:
231    case 3:
232        gfx_goto( x, y+1 );
233        gfx_putstr( ",- X -." );
234        gfx_goto( x-1, y+2 );
235        gfx_putchar( '\'' );
236        gfx_goto( x+7, y+2 );
237        gfx_putchar( '`' );
238        break;
239    case 4:
240        gfx_goto( x+1, y+1 );
241        gfx_putstr( ", X ." );
242        gfx_goto( x, y+2 );
243        gfx_putchar( '/' );
244        gfx_goto( x+6, y+2 );
245        gfx_putchar( '\\' );
246        break;
[18]247    }
[20]248
249    gfx_goto( x+2, y+2 );
250    gfx_putstr( "`V'" );
251
252    gfx_color( WHITE );
253    gfx_goto( x+2, y+1 );
254    gfx_putchar( 'o' );
255    gfx_goto( x+4, y+1 );
256    gfx_putchar( 'o' );
[18]257}
[20]258
259
Note: See TracBrowser for help on using the repository browser.