Remove static label from game functions
[kraptor.git] / src / combo.c
blob0e7c310a13eb4fdead79ebce76ce59e50cf89b28
1 // --------------------------------------------------------
2 // combo.c
3 // --------------------------------------------------------
4 // Copyright (c) Kronoman
5 // En memoria de mi querido padre
6 // --------------------------------------------------------
7 // Esto contiene combos para agregar explosiones+particulas
8 // y tocar los sonidos, musica, etc
9 // --------------------------------------------------------
10 #ifndef COMBO_C
11 #define COMBO_C
13 #include "allegro.h"
14 #include "partic.h"
15 #include "explos.h"
16 #include "azar.h"
17 #include "combo.h"
18 #include "global.h"
20 agrega muchas particulas a la vez
21 cant es la cantidad
22 si col < 0, usara colores en gama de fuego (naranjas)
24 void poner_muchas_particulas( int x, int y,
25 int dx, int dy,
26 int vida,
27 int col, int r, int t,
28 BITMAP *spr,
29 int cant )
31 int i, c2;
32 c2 = col;
34 /* si el nivel de detalle es bajo, limita la cantidad de particulas a 10 por round */
35 if (nivel_detalle < 4 && cant > 10) cant = 10;
36 if (nivel_detalle < 2 && cant > 5) cant = 5;
38 for (i = 0; i < cant; i++)
40 if (col < 0) c2 = makecol(255,rand()%255,0);
42 agrega_particula( itofix(x), itofix(y),
43 ftofix((rand_ex(-100*dx, 100*dx))/100.0), ftofix((rand_ex(-100*dy, 100*dy))/100.0),
44 rand_ex(vida/4, vida),
45 c2, rand_ex(r/2,r)+1, t,0,0,
46 spr );
51 agrega una explosion y particulas en x,y
52 con cantidad c y radio r (tambien indica duracion particulas * 2)
53 las particulas son trozos de nave y fuego
54 el radio para la explosion es el ancho/alto en pixeles...
55 si bmpp es !=0, pondra chispas con bitmaps tambien (Explosion final de algo grande)
57 void poner_explosion_nave(int x, int y, int c, int r, int bmpp)
60 /* DEBUG: funcion mal hecha, no agrega bitmaps, solo poligonos */
61 poner_muchas_particulas( x, y,
62 5, 5,
63 r*2,
64 -1, 4, 3,
65 NULL,
66 c );
69 pone_explo_pixel(&ptr_explo_arriba, x, y, r, r*2, ftofix(0.01));
71 if (bmpp && nivel_detalle > 7 ) { /* particulas con bitmaps */
72 int z1;
73 for (z1 = 0; z1 < 3; z1++)
74 poner_muchas_particulas( x, y,
75 5, 5,
76 r*rand_ex(2, 4),
77 -1, 4, 3,
78 particula_cache_bmp[z1],
79 c/rand_ex(2,3) ); /* poner 1/3 o 1/2 de particulas */
85 Esta funcion coloca una explosion en x,y
86 con radio r, el radio expresado en PIXELS!
87 v es la vida, v2 la combustion
88 NOTA: la explosion se limita en tama~o para no sobrecargar el juego
89 NOTA: pasarle el puntero a la capa de explosion con &puntero!
91 void pone_explo_pixel(EXPLOSION **explo, int x, int y, int r, int v, fixed v2)
93 float rpx; /* para calculos luego */
94 BITMAP *tmp;
96 /* Limitar a 150 pixels de radio */
97 if (r > 150) r= 150;
99 if (nivel_detalle < 2 && r > 50) r = 50; /* el detalle limita el tama~o tambien */
101 /* explosion, calculo la proporcion entre pixeles y el tama~o del
102 sprite de la explosion y luego la agrego */
104 tmp = explo_cache_bmp[rand()%3];
105 rpx = (float)r / (float)tmp->w;
107 agrega_explosion( explo,
108 itofix(x), itofix(y),
109 0,0,
111 ftofix(rpx), v2,
112 rand()%255,
113 tmp );
117 #endif