#include <acknex.h> // Cabecera LiteC
// Imágenes
BMAP* IMG_Particula = "particula.tga";
BMAP* IMG_Metralla = "metralla.tga";
// Variables
VECTOR vtemp;
VECTOR POSICION;
// Efecto metralla al inicio de la explosión
function ContFX_Metralla ( PARTICLE *p )
{
p.alpha += 6 *time_step;
if(p.alpha > 30) p.lifespan = 0;
}
//schwarzer Rauch
function FX_Metralla ( PARTICLE *p )
{
p.bmap = IMG_Metralla;
p.vel_x = random( 32 ) - 16; // Dirección aleatoria
p.vel_y = random( 32 ) - 16;
p.vel_z = random( 32 ) - 16;
p.size = 5 ;
p.alpha = 0 ;
p.flags |= MOVE | TRANSLUCENT;
p.event = ContFX_Metralla;
}
// grauer Rauch
function ContFX_Particulas ( PARTICLE *p )
{
p.alpha -= random(4) * time_step;
if( p.alpha < 0 ) p.lifespan = 0;
p.vel_x += random(0.6)-0.3;
p.vel_y += random(0.6)-0.3;
}
//grauer Rauch
function FX_Particulas ( PARTICLE *p )
{
p.bmap = IMG_Particula;
p.angle = random (360);
// Coloco las particulas en un plano paralelo a la pantalla
vec_for_angle ( vtemp, vector( p.angle, 0, 0 ) );
vec_rotate ( vtemp, vector(camera.pan, camera.tilt-90, 0 ) );
vec_normalize ( vtemp, 10+random(50) );
vec_add ( p.x, vtemp );
// Unas suben y otras se quedan donde están
if ( random(2) > 1)
{
vec_set ( vtemp, vector( 1, 0, 0 ) );
vec_rotate ( vtemp, vector(camera.pan, camera.tilt+90, 0 ) );
vec_normalize ( vtemp, 10+random(5) );
vec_set ( p.vel_x, vtemp );
}
p.vel_z *= random(1); // Velocidad vertical aleatoria
p.alpha = 50 ;
p.flags |= TRANSLUCENT | MOVE;
p.event = ContFX_Particulas;
}
//
function Flecha_Humo ()
{
set ( me, TRANSLUCENT | PASSABLE | LIGHT );
my.roll = random (360);
my.alpha = 100;
my.scale_x = 4;
my.scale_y = 7;
my.skill1 = random(3)+2;
vec_fill ( my.blue, 30 );
while ( my.alpha > 0 )
{
if ( my.alpha > 93 ) // Al principio aumenta rápidamente
{
vec_for_angle ( vtemp, vector( my.roll, 0, 0 ) );
vec_rotate ( vtemp, vector(camera.pan, camera.tilt+90, 0 ) );
vec_normalize ( vtemp, time_step * (my.alpha/my.skill1) * 0.4 );
vec_add ( my.x, vtemp );
my.scale_y += vec_length( vtemp )/46;
my.alpha -= time_step * 3;
}
else // y después se desvanece
{
vec_for_angle ( vtemp, vector( my.roll, 0, 0 ) );
vec_rotate ( vtemp, vector(camera.pan, camera.tilt+90, 0 ) );
vec_normalize ( vtemp, time_step * (my.alpha/(my.skill1*2)));
vec_add ( my.x, vtemp );
my.scale_y += vec_length( vtemp ) / 500;
my.alpha -= time_step * 9;
}
wait(1);
}
ent_remove ( me );
return;
}
// Onda expansiva
function Onda ()
{
set ( me, TRANSLUCENT | DECAL | PASSABLE );
my.alpha = 70;
vec_fill ( my.scale_x, 100 );
my.tilt = 90;
my.pan = random ( 360 );
vec_fill ( my.blue, 0 );
while( my.alpha > 0 )
{
vec_fill ( vtemp, time_step * 2 );
vec_add ( my.scale_x, vtemp );
my.alpha -= time_step * 7;
wait (1);
}
ent_remove ( me );
}
// Humo tras el fuego
function Humo ()
{
set ( me, TRANSLUCENT | LIGHT | ZNEAR | PASSABLE );
vec_set ( my.blue, vector ( 200,255,255 ) );
my.alpha = 40;
my.roll = random (360);
vec_fill ( my.scale_x, 0.4 );
while ( my.alpha > 0 )
{
my.alpha -= time_step * 2;
my.roll += time_step * sign(ang(my.roll))*1;
vec_fill ( vtemp, time_step *0.01);
vec_add ( my.scale_x, vtemp );
wait(1);
}
ent_remove ( me );
}
// Segunda ronda de fuego
function Cont_Fogonazo ()
{
set ( me, BRIGHT | TRANSLUCENT | ZNEAR | PASSABLE );
my.blue = 150;
my.green = 235;
my.red = 255;
my.alpha = 0;
my.roll = random (360);
vec_fill ( my.scale_x, 10 );
// Lo coloco en un plano paralelo a la pantalla
vec_for_angle ( vtemp, vector( my.roll, 0, 0 ) );
vec_rotate ( vtemp, vector(camera.pan, camera.tilt+90, 0 ) );
vec_normalize ( vtemp, 40 );
vec_add ( vtemp, POSICION );
vec_set ( my.x, vtemp );
while ( my.alpha < 100 ) // Al principio aumenta su tamaño y luminosidad
{
if (my.lightrange < 1000 ) my.lightrange += 2000 * time_step;
my.alpha += time_step * (random(20)+20);
my.roll += time_step * sign(ang(my.roll));
vec_normalize ( my.blue, 150 + random(105) );
wait(1);
}
ent_create ( "humo02.tga", my.x, Humo ); // en el cenit se crea el humo
while ( my.alpha > 0 ) // y disminuye su tamaño y luminosidad
{
if (my.lightrange > 0 ) my.lightrange -= 500 * time_step;
my.alpha -= time_step * 20;
my.roll += time_step * sign(ang(my.roll))*5;
wait(1);
}
while ( my.lightrange > 0 ) // Se apaga suavemente
{
my.lightrange -= 500 * time_step;
wait(1);
}
ent_remove(me);
}
// Primera ronda de fuego
function Fogonazo ()
{
var i;
set ( me, BRIGHT | TRANSLUCENT | LIGHT | ZNEAR | PASSABLE );
my.alpha = 50;
my.roll = random (360);
while ( my.alpha < 100 ) // Al principio aumenta su tamaño
{
my.alpha += time_step * (random(20)+20);
my.roll += time_step * sign(ang(my.roll));
vec_fill ( my.scale_x, my.alpha / 13 );
wait(1);
}
for ( i=0; i<4; i++) // En el zenit crea la segunda ronda de fuego
{
ent_create ( "flash01.tga", POSICION, Cont_Fogonazo );
you = ent_create ( "flash02.tga", POSICION, Cont_Fogonazo );
if (i == 0) set ( you, LIGHT ); // Solo ilumina la primera
}
for ( i = 0; i < 5; i ++) // Crea las coletas de la explosión
{
ent_create ( "humo01.tga", POSICION, Flecha_Humo );
}
effect( FX_Particulas, 200, POSICION, NULL ); // Particulas suspendidas
vec_add ( my.scale_x, vector(3,3,3) ); // Pequeño salto estético
ent_create ( "humo02.tga", my.x, Humo ); // Humo residual
while ( my.alpha > 0 ) // se desvanece
{
my.alpha -= time_step * 25;
my.roll += time_step * sign(ang(my.roll));
wait(1);
}
ent_remove(me);
}
function Crear_Explosion (int posX, int posY, int posZ)
{
vec_set(POSICION, vector(posX,posY,posZ));
vec_set(vtemp, vector(0, 0, 0));
ent_create ( "flash01.tga", POSICION, Fogonazo ); // Fuego
ent_create ( "flash02.tga", POSICION, Fogonazo );
ent_create ( "onda01.tga", POSICION, Onda ); // Onda expansiva
effect ( FX_Metralla, 1500, POSICION, NULL ); // Metralla
}
diesen Code habe ich aus dem Internet wie kann ich hier die Größe der kommpleten Explosion ändern? Sei sollte ca. 3x so groß sein.
LG MODinCLite