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

Last change on this file since 20 was 20, checked in by Sam Hocevar, 17 years ago
  • real Debian package files.
  • two new types of aliens. only one rules.
  • removed gfx_write in favor of gfx_putchar and gfx_putstr.
  • added bonuses at alien death. they do nothing yet.
  • seeker missiles. 'b' to test.
  • weapon resolution is now 16*char. needs to be generalized.
  • fixed the supernova bugs. center could collide with the tunnel, and the last frame was badly displayed.
  • lots of cleanups everywhere.
File size: 4.9 KB
Line 
1
2#include <stdlib.h>
3
4#include "common.h"
5
6static void draw_alien_poolp( game *g, int x, int y, int frame );
7static void draw_alien_bool( game *g, int x, int y, int frame );
8static void draw_alien_brah( game *g, int x, int y, int frame );
9
10void init_aliens( game *g, aliens *al )
11{
12    int i;
13
14    for( i = 0; i < ALIENS; i++ )
15    {
16        al->type[i] = ALIEN_NONE;
17    }
18}
19
20void draw_aliens( game *g, aliens *al )
21{
22    int i;
23
24    for( i = 0; i < ALIENS; i++ )
25    {
26        switch( al->type[i] )
27        {
28            case ALIEN_BRAH:
29                draw_alien_brah( g, al->x[i], al->y[i], al->img[i] % 8 );
30                break;
31            case ALIEN_POOLP:
32                draw_alien_poolp( g, al->x[i], al->y[i], al->img[i] % 2 );
33                break;
34            case ALIEN_BOOL:
35                draw_alien_bool( g, al->x[i], al->y[i], al->img[i] % 5 );
36                break;
37            case ALIEN_NONE:
38                break;
39        }
40    }
41}
42
43void update_aliens( game *g, aliens *al )
44{
45    int i;
46
47    for( i = 0; i < ALIENS; i++ )
48    {
49        switch( al->type[i] )
50        {
51            case ALIEN_POOLP:
52            case ALIEN_BOOL:
53            case ALIEN_BRAH:
54                al->x[i] = ((al->x[i] + 5) % (g->w + 3)) - 3;
55                al->y[i] = al->y[i] + (rand() % 8) / 7 - (rand() % 8) / 7;
56                al->img[i] = al->img[i] + 1;
57
58                /* Check bounds */
59                if( al->y[i] < 0 ) al->y[i] = 0;
60                if( al->y[i] > g->w - 1 ) al->y[i] = g->w - 1;
61                break;
62            case ALIEN_NONE:
63                break;
64        }
65    }
66}
67
68void add_alien( game *g, aliens *al, int x, int y, int type )
69{
70    int i;
71
72    for( i = 0; i < ALIENS; i++ )
73    {
74        if( al->type[i] == ALIEN_NONE )
75        {
76            al->type[i] = type;
77            al->x[i] = x;
78            al->y[i] = y;
79            al->img[i] = 0;
80
81            switch( al->type[i] )
82            {
83                case ALIEN_POOLP:
84                    al->life[i] = 2;
85                    break;
86                case ALIEN_BOOL:
87                    al->life[i] = 2;
88                    break;
89                case ALIEN_BRAH:
90                    al->life[i] = 2;
91                    break;
92                case ALIEN_NONE:
93                    break;
94            }
95
96            break;
97        }
98    }
99}
100
101static void draw_alien_poolp( game *g, int x, int y, int frame )
102{
103    switch( frame )
104    {
105    case 0:
106        gfx_color( MAGENTA );
107        gfx_goto( x, y );
108        gfx_putstr( ",---." );
109        gfx_goto( x, y+1 );
110        gfx_putchar( '\\' );
111        gfx_color( WHITE );
112        gfx_putstr( "o O" );
113        gfx_color( MAGENTA );
114        gfx_putchar( '/' );
115        gfx_goto( x, y+2 );
116        gfx_putstr( "^^^^^" );
117        break;
118    case 1:
119        gfx_color( MAGENTA );
120        gfx_goto( x, y );
121        gfx_putstr( ",---." );
122        gfx_goto( x, y+1 );
123        gfx_putchar( '\\' );
124        gfx_color( WHITE );
125        gfx_putstr( "O o" );
126        gfx_color( MAGENTA );
127        gfx_putchar( '/' );
128        gfx_goto( x, y+2 );
129        gfx_putstr( "^^^^^" );
130        break;
131    }
132}
133
134static void draw_alien_bool( game *g, int x, int y, int frame )
135{
136    gfx_color( GREEN );
137    gfx_goto( x+1, y );
138    gfx_putstr( ",---." );
139
140    gfx_goto( x, y+1 );
141    gfx_putchar( '(' );
142
143    gfx_color( WHITE );
144    switch( frame )
145    {
146    case 4:
147        gfx_putstr( "##( )" );
148        break;
149    case 3:
150        gfx_putstr( ")##( " );
151        break;
152    case 2:
153        gfx_putstr( " )##(" );
154        break;
155    case 1:
156        gfx_putstr( "( )##" );
157        break;
158    case 0:
159        gfx_putstr( "#( )#" );
160        break;
161    }
162
163    gfx_color( GREEN );
164    gfx_goto( x+6, y+1 );
165    gfx_putchar( ')' );
166
167    gfx_goto( x+1, y+2 );
168    gfx_putstr( "`---'" );
169}
170
171static void draw_alien_brah( game *g, int x, int y, int frame )
172{
173    gfx_color( YELLOW );
174
175    switch( frame )
176    {
177    case 0:
178        gfx_goto( x, y );
179        gfx_putchar( '.' );
180        gfx_goto( x+6, y );
181        gfx_putchar( ',' );
182        gfx_goto( x+1, y+1 );
183        gfx_putstr( "\\ X /" );
184        break;
185    case 7:
186    case 1:
187        gfx_goto( x-1, y );
188        gfx_putchar( '.' );
189        gfx_goto( x+7, y );
190        gfx_putchar( ',' );
191        gfx_goto( x, y+1 );
192        gfx_putstr( "`- X -'" );
193        break;
194    case 6:
195    case 2:
196        gfx_goto( x-1, y+1 );
197        gfx_putstr( "`-- X --'" );
198        break;
199    case 5:
200    case 3:
201        gfx_goto( x, y+1 );
202        gfx_putstr( ",- X -." );
203        gfx_goto( x-1, y+2 );
204        gfx_putchar( '\'' );
205        gfx_goto( x+7, y+2 );
206        gfx_putchar( '`' );
207        break;
208    case 4:
209        gfx_goto( x+1, y+1 );
210        gfx_putstr( ", X ." );
211        gfx_goto( x, y+2 );
212        gfx_putchar( '/' );
213        gfx_goto( x+6, y+2 );
214        gfx_putchar( '\\' );
215        break;
216    }
217
218    gfx_goto( x+2, y+2 );
219    gfx_putstr( "`V'" );
220
221    gfx_color( WHITE );
222    gfx_goto( x+2, y+1 );
223    gfx_putchar( 'o' );
224    gfx_goto( x+4, y+1 );
225    gfx_putchar( 'o' );
226}
227
228
Note: See TracBrowser for help on using the repository browser.