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

Last change on this file since 110 was 110, checked in by Sam Hocevar, 16 years ago
  • src/*.c: + Added missing #include "config.h". + Fixed a nasty bug in ee_rand() calls.
  • Property svn:keywords set to Id
File size: 5.8 KB
Line 
1/*
2 *   ttyvaders     Textmode shoot'em up
3 *   Copyright (c) 2002 Sam Hocevar <sam@zoy.org>
4 *                 All Rights Reserved
5 *
6 *   $Id: explosions.c 110 2003-11-09 23:34:24Z sam $
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 */
22
23#include "config.h"
24
25#include <stdlib.h>
26
27#include "common.h"
28
29static void draw_small_explosion(int x, int y, int frame);
30static void draw_medium_explosion(int x, int y, int frame);
31
32void init_explosions(game *g, explosions *ex)
33{
34    int i;
35
36    for(i = 0; i < EXPLOSIONS; i++)
37    {
38        ex->type[i] = EXPLOSION_NONE;
39    }
40}
41
42void add_explosion(game *g, explosions *ex, int x, int y, int vx, int vy, int type)
43{
44    int i;
45
46    for(i = 0; i < EXPLOSIONS; i++)
47    {
48        if(ex->type[i] == EXPLOSION_NONE)
49        {
50            ex->type[i] = type;
51            ex->x[i] = x;
52            ex->y[i] = y;
53            ex->vx[i] = vx;
54            ex->vy[i] = vy;
55            switch(type)
56            {
57                case EXPLOSION_MEDIUM:
58                    ex->n[i] = 11;
59                    break;
60                case EXPLOSION_SMALL:
61                    ex->n[i] = 7;
62                    break;
63            }
64            break;
65        }
66    }
67}
68
69void draw_explosions(game *g, explosions *ex)
70{
71    int i;
72
73    for(i = 0; i < EXPLOSIONS; i++)
74    {
75#if 0
76        ee_color(GREEN);
77        ee_goto(ex->x[i] + 3, ex->y[i]);
78        switch(ee_rand(0,2))
79        {
80        case 0:
81            ee_putchar('p');
82            ee_putchar('i');
83            ee_putchar('f');
84            break;
85        case 1:
86            ee_putchar('p');
87            ee_putchar('a');
88            ee_putchar('f');
89            break;
90        case 2:
91            ee_putchar('p');
92            ee_putchar('o');
93            ee_putchar('u');
94            ee_putchar('f');
95            break;
96        }
97        ee_putchar('!');
98#endif
99
100        switch(ex->type[i])
101        {
102            case EXPLOSION_MEDIUM:
103                draw_medium_explosion(ex->x[i], ex->y[i], ex->n[i]);
104                break;
105            case EXPLOSION_SMALL:
106                draw_small_explosion(ex->x[i], ex->y[i], ex->n[i]);
107                break;
108            case EXPLOSION_NONE:
109                break;
110        }
111    }
112}
113
114void update_explosions(game *g, explosions *ex)
115{
116    int i;
117
118    for(i = 0; i < EXPLOSIONS; i++)
119    {
120        switch(ex->type[i])
121        {
122            case EXPLOSION_MEDIUM:
123            case EXPLOSION_SMALL:
124                ex->x[i] += ex->vx[i];
125                ex->y[i] += ex->vy[i];
126                ex->n[i]--;
127                if(ex->n[i] < 0)
128                {
129                    ex->type[i] = EXPLOSION_NONE;
130                }
131                break;
132            case EXPLOSION_NONE:
133                break;
134        }
135    }
136}
137
138static void draw_small_explosion(int x, int y, int frame)
139{
140    switch(frame)
141    {
142    case 6:
143        ee_color(EE_YELLOW);
144        ee_goto(x, y);
145        ee_putchar('+');
146        break;
147    case 5:
148        ee_color(EE_YELLOW);
149        ee_goto(x, y);
150        ee_putchar('o');
151        break;
152    case 4:
153        ee_color(EE_YELLOW);
154        ee_goto(x, y-1);
155        ee_putchar('_');
156        ee_goto(x-1, y);
157        ee_putstr(")_(");
158        break;
159    case 3:
160        ee_color(EE_YELLOW);
161        ee_goto(x-1, y-1);
162        ee_putstr("._,");
163        ee_goto(x-1, y);
164        ee_putstr(")_(");
165        ee_goto(x-1, y+1);
166        ee_putstr("\' `");
167        break;
168    case 2:
169        ee_color(EE_YELLOW);
170        ee_goto(x-1, y-1);
171        ee_putstr(".v,");
172        ee_goto(x-1, y);
173        ee_putstr("> <");
174        ee_goto(x-1, y+1);
175        ee_putstr("\'^`");
176        break;
177    case 1:
178        ee_color(EE_WHITE);
179        ee_goto(x-1, y-1);
180        ee_putstr(". ,");
181        ee_goto(x-1, y);
182        ee_putstr("   ");
183        ee_goto(x-1, y+1);
184        ee_putstr("\' `");
185        break;
186    }
187}
188
189static void draw_medium_explosion(int x, int y, int frame)
190{
191    ee_color(EE_YELLOW);
192
193    switch(frame)
194    {
195    case 10:
196        ee_goto(x, y);
197        ee_putchar('+');
198        break;
199    case 9:
200        ee_goto(x, y);
201        ee_putchar('o');
202        break;
203    case 8:
204        ee_goto(x, y-1);
205        ee_putchar('_');
206        ee_goto(x-1, y);
207        ee_putstr(")_(");
208        break;
209    case 7:
210        ee_goto(x-1, y-1);
211        ee_putstr("._,");
212        ee_goto(x-1, y);
213        ee_putstr(")_(");
214        ee_goto(x-1, y+1);
215        ee_putstr("\' `");
216        break;
217    case 6:
218        ee_goto(x-1, y-1);
219        ee_putstr(".v,");
220        ee_goto(x-1, y);
221        ee_putstr("> <");
222        ee_goto(x-1, y+1);
223        ee_putstr("\'^`");
224        break;
225    case 5:
226        ee_color(EE_RED);
227    case 4:
228        ee_goto(x-2, y-1);
229        ee_putstr("_\\~/_");
230        ee_goto(x-2, y);
231        ee_putstr(">   <");
232        ee_goto(x-2, y+1);
233        ee_putstr("~/_\\~");
234        break;
235    case 3:
236        ee_color(EE_RED);
237    case 2:
238        ee_goto(x-2, y-1);
239        ee_putstr("_\\ /_");
240        ee_goto(x-2, y);
241        ee_putstr("_   _");
242        ee_goto(x-2, y+1);
243        ee_putstr(" / \\ ");
244        break;
245    case 1:
246        ee_color(EE_WHITE);
247        ee_goto(x-2, y-1);
248        ee_putstr(". \' ,");
249        ee_goto(x-2, y);
250        ee_putstr("     ");
251        ee_goto(x-2, y+1);
252        ee_putstr("\' . `");
253        break;
254    }
255}
256
Note: See TracBrowser for help on using the repository browser.