1 // --------------------------------------------------------
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 // --------------------------------------------------------
20 agrega muchas particulas a la vez
22 si col < 0, usara colores en gama de fuego (naranjas)
24 void poner_muchas_particulas( int x
, int y
,
27 int col
, int r
, int t
,
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,
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
,
69 pone_explo_pixel(&ptr_explo_arriba
, x
, y
, r
, r
*2, ftofix(0.01));
71 if (bmpp
&& nivel_detalle
> 7 ) { /* particulas con bitmaps */
73 for (z1
= 0; z1
< 3; z1
++)
74 poner_muchas_particulas( x
, y
,
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 */
96 /* Limitar a 150 pixels de radio */
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
),