source: ttyvaders/trunk/src/explosions.c @ 28

Last change on this file since 28 was 20, checked in by Sam Hocevar, 18 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: 5.2 KB
Line 
1
2#include <stdlib.h>
3
4#include "common.h"
5
6static void draw_small_explosion( int x, int y, int frame );
7static void draw_medium_explosion( int x, int y, int frame );
8
9void init_explosions( game *g, explosions *ex )
10{
11    int i;
12
13    for( i = 0; i < EXPLOSIONS; i++ )
14    {
15        ex->type[i] = EXPLOSION_NONE;
16    }
17}
18
19void add_explosion( game *g, explosions *ex, int x, int y, int vx, int vy, int type )
20{
21    int i;
22
23    for( i = 0; i < EXPLOSIONS; i++ )
24    {
25        if( ex->type[i] == EXPLOSION_NONE )
26        {
27            ex->type[i] = type;
28            ex->x[i] = x;
29            ex->y[i] = y;
30            ex->vx[i] = vx;
31            ex->vy[i] = vy;
32            switch( type )
33            {
34                case EXPLOSION_MEDIUM:
35                    ex->n[i] = 11;
36                    break;
37                case EXPLOSION_SMALL:
38                    ex->n[i] = 7;
39                    break;
40            }
41            break;
42        }
43    }
44}
45
46void draw_explosions( game *g, explosions *ex )
47{
48    int i;
49
50    for( i = 0; i < EXPLOSIONS; i++ )
51    {
52#if 0
53        gfx_color( GREEN );
54        gfx_goto( ex->x[i] + 3, ex->y[i] );
55        switch( GET_RAND(0,3) )
56        {
57        case 0:
58            gfx_putchar( 'p' );
59            gfx_putchar( 'i' );
60            gfx_putchar( 'f' );
61            break;
62        case 1:
63            gfx_putchar( 'p' );
64            gfx_putchar( 'a' );
65            gfx_putchar( 'f' );
66            break;
67        case 2:
68            gfx_putchar( 'p' );
69            gfx_putchar( 'o' );
70            gfx_putchar( 'u' );
71            gfx_putchar( 'f' );
72            break;
73        }
74        gfx_putchar( '!' );
75#endif
76
77        switch( ex->type[i] )
78        {
79            case EXPLOSION_MEDIUM:
80                draw_medium_explosion( ex->x[i], ex->y[i], ex->n[i] );
81                break;
82            case EXPLOSION_SMALL:
83                draw_small_explosion( ex->x[i], ex->y[i], ex->n[i] );
84                break;
85            case EXPLOSION_NONE:
86                break;
87        }
88    }
89}
90
91void update_explosions( game *g, explosions *ex )
92{
93    int i;
94
95    for( i = 0; i < EXPLOSIONS; i++ )
96    {
97        switch( ex->type[i] )
98        {
99            case EXPLOSION_MEDIUM:
100            case EXPLOSION_SMALL:
101                ex->x[i] += ex->vx[i];
102                ex->y[i] += ex->vy[i];
103                ex->n[i]--;
104                if( ex->n[i] < 0 )
105                {
106                    ex->type[i] = EXPLOSION_NONE;
107                }
108                break;
109            case EXPLOSION_NONE:
110                break;
111        }
112    }
113}
114
115static void draw_small_explosion( int x, int y, int frame )
116{
117    switch( frame )
118    {
119    case 6:
120        gfx_color( YELLOW );
121        gfx_goto( x, y );
122        gfx_putchar( '+' );
123        break;
124    case 5:
125        gfx_color( YELLOW );
126        gfx_goto( x, y );
127        gfx_putchar( 'o' );
128        break;
129    case 4:
130        gfx_color( YELLOW );
131        gfx_goto( x, y-1 );
132        gfx_putchar( '_' );
133        gfx_goto( x-1, y );
134        gfx_putstr( ")_(" );
135        break;
136    case 3:
137        gfx_color( YELLOW );
138        gfx_goto( x-1, y-1 );
139        gfx_putstr( "._," );
140        gfx_goto( x-1, y );
141        gfx_putstr( ")_(" );
142        gfx_goto( x-1, y+1 );
143        gfx_putstr( "\' `" );
144        break;
145    case 2:
146        gfx_color( YELLOW );
147        gfx_goto( x-1, y-1 );
148        gfx_putstr( ".v," );
149        gfx_goto( x-1, y );
150        gfx_putstr( "> <" );
151        gfx_goto( x-1, y+1 );
152        gfx_putstr( "\'^`" );
153        break;
154    case 1:
155        gfx_color( WHITE );
156        gfx_goto( x-1, y-1 );
157        gfx_putstr( ". ," );
158        gfx_goto( x-1, y );
159        gfx_putstr( "   " );
160        gfx_goto( x-1, y+1 );
161        gfx_putstr( "\' `" );
162        break;
163    }
164}
165
166static void draw_medium_explosion( int x, int y, int frame )
167{
168    gfx_color( YELLOW );
169
170    switch( frame )
171    {
172    case 10:
173        gfx_goto( x, y );
174        gfx_putchar( '+' );
175        break;
176    case 9:
177        gfx_goto( x, y );
178        gfx_putchar( 'o' );
179        break;
180    case 8:
181        gfx_goto( x, y-1 );
182        gfx_putchar( '_' );
183        gfx_goto( x-1, y );
184        gfx_putstr( ")_(" );
185        break;
186    case 7:
187        gfx_goto( x-1, y-1 );
188        gfx_putstr( "._," );
189        gfx_goto( x-1, y );
190        gfx_putstr( ")_(" );
191        gfx_goto( x-1, y+1 );
192        gfx_putstr( "\' `" );
193        break;
194    case 6:
195        gfx_goto( x-1, y-1 );
196        gfx_putstr( ".v," );
197        gfx_goto( x-1, y );
198        gfx_putstr( "> <" );
199        gfx_goto( x-1, y+1 );
200        gfx_putstr( "\'^`" );
201        break;
202    case 5:
203        gfx_color( RED );
204    case 4:
205        gfx_goto( x-2, y-1 );
206        gfx_putstr( "_\\~/_" );
207        gfx_goto( x-2, y );
208        gfx_putstr( ">   <" );
209        gfx_goto( x-2, y+1 );
210        gfx_putstr( "~/_\\~" );
211        break;
212    case 3:
213        gfx_color( RED );
214    case 2:
215        gfx_goto( x-2, y-1 );
216        gfx_putstr( "_\\ /_" );
217        gfx_goto( x-2, y );
218        gfx_putstr( "_   _" );
219        gfx_goto( x-2, y+1 );
220        gfx_putstr( " / \\ " );
221        break;
222    case 1:
223        gfx_color( WHITE );
224        gfx_goto( x-2, y-1 );
225        gfx_putstr( ". \' ," );
226        gfx_goto( x-2, y );
227        gfx_putstr( "     " );
228        gfx_goto( x-2, y+1 );
229        gfx_putstr( "\' . `" );
230        break;
231    }
232}
233
Note: See TracBrowser for help on using the repository browser.