integer glow = TRUE; // Make the particles glow
integer bounce = FALSE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = FALSE; // Particles follow the source
integer followVel = TRUE; // Particles turn to velocity direction


integer pattern = PSYS_SRC_PATTERN;

integer flags;



// Particle paramaters
float age = 7; // Life of each particle
float maxSpeed = 1; // Max speed each particle is spit out at
float minSpeed = 1; // Min speed each particle is spit out at
string texture; // Texture used for particles, default used if blank
float startAlpha = 1; // Start alpha (transparency) value
float endAlpha = 0.5; // End alpha (transparency) value
vector startColor = <240,240,240>; // Start color of particles <R,G,B>
vector endColor = <240,240,240>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.75,.75,.75>; // Start size of particles
vector endSize = <.2,.2,.2>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,-3>; // Force pushed on particles

float rate = 0; // How fast (rate) to emit particles
float radius = 15; // Radius to emit particles for BURST pattern
integer count = 100; // How many particles to emit per BURST
float outerAngle = PI; // Outer angle for all ANGLE patterns
float innerAngle = PI; // Inner angle for all ANGLE patterns
vector omega = <0,0,10>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particl

smoke()
{
flags = 0;

if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
if (wind) flags = flags | PSYS_PART_WIND_MASK;
if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;


llParticleSystem([ PSYS_PART_MAX_AGE,age,
PSYS_PART_FLAGS,flags,
PSYS_PART_START_COLOR, startColor,
PSYS_PART_END_COLOR, endColor,
PSYS_PART_START_SCALE,startSize,
PSYS_PART_END_SCALE,endSize,
PSYS_SRC_PATTERN, pattern,
PSYS_SRC_BURST_RATE,rate,
PSYS_SRC_ACCEL, push,
PSYS_SRC_BURST_PART_COUNT,count,
PSYS_SRC_BURST_RADIUS,radius,
PSYS_SRC_BURST_SPEED_MIN,minSpeed,
PSYS_SRC_BURST_SPEED_MAX,maxSpeed,

PSYS_SRC_INNERANGLE,innerAngle,
PSYS_SRC_OUTERANGLE,outerAngle,
PSYS_SRC_OMEGA, omega,
PSYS_SRC_MAX_AGE, life,
PSYS_SRC_TEXTURE, texture,
PSYS_PART_START_ALPHA, startAlpha,
PSYS_PART_END_ALPHA, endAlpha
]);
}


empty()
{
llParticleSystem([]);
}

vector force = <0,0,12000>;
integer counter=0;

default
{

state_entry()
{
llStopSound();
}
touch_start(integer c)
{
llSetStatus(STATUS_ROTATE_X,FALSE);
llSetStatus(STATUS_ROTATE_Y,FALSE);
llSetStatus(STATUS_ROTATE_Z,FALSE);
vector pos = llGetPos();
llSetRot(ZERO_ROTATION);
llSetPos(<pos.x,pos.y,llGround(<0,0,0>) + 7>);
llSetStatus(STATUS_PHYSICS,TRUE);
llTriggerSound("launch", 1.0);
llLoopSound("midair", 1.0);
llSetForce(force,FALSE);
smoke();
llSetTimerEvent(7);
}

timer()
{
state fall;
}




}

state fall
{
state_entry()
{
llSetForce(<0,0,0>,FALSE);
llSetStatus(STATUS_PHYSICS,FALSE);
llSetRot(llEuler2Rot(<0,180,0>*DEG_TO_RAD));
llSetStatus(STATUS_PHYSICS,TRUE);
}

land_collision_start(vector c)
{
llStopSound();
llTriggerSound("explosion",1.0);
llRezObject("rezzer", llGetPos() + <0,0,10>, ZERO_VECTOR, ZERO_ROTATION, 1);
llDie();

}

}