integer moving = FALSE;
integer flying = FALSE;

default
{
    attach(key on)
    {
        if (on != NULL_KEY)
        {
            llLoopSound("boom", 1.0);
            moving = TRUE;
            integer perm = llGetPermissions();
            
            if (perm != (PERMISSION_TAKE_CONTROLS))
            {
                llRequestPermissions(on, PERMISSION_TAKE_CONTROLS);
            }
            else
            {
                llTakeControls(CONTROL_FWD | CONTROL_ML_LBUTTON, TRUE, TRUE);
                llSetTimerEvent(0.5);
            }
        }
        else
        {
            moving = FALSE;
            llStopSound();
            llReleaseControls();
            llSetTimerEvent(0.0); 
        }
    }
    
    timer()
    {
        if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
        {
            if(flying == FALSE)
            {
                        

vector I_start_color = <1,1,1>;
vector I_end_color = <0.5,0,0.2>; 

float I_start_alpha = 0.0; 
float I_end_alpha = 1.0;   

vector I_start_scale = <0.3,0.3,0.0>;   
vector I_end_scale = <0,0,0>;    

float I_particle_age = 1.5;

float I_inner_angle = PI; 
float I_outer_angle = PI; 
vector I_spin_speed = <0.0,0.0,0.0>;   

vector I_particle_accel = <0.0,0.0,0.0>;

float I_burst_rate = 0.1;
integer I_burst_count = 50;
float I_burst_radius = 0.05;
float I_min_speed = 0.1;
float I_max_speed = 0.65;

float I_source_age = 0.0;  // 0.0 = forever

string I_particle_texture = "particle_glowWhite2"; //if not defined, the default particle

key I_target; //the target of your particles if they use a follow mask


        llParticleSystem([
            PSYS_PART_FLAGS, 
                PSYS_PART_INTERP_COLOR_MASK |
                PSYS_PART_INTERP_SCALE_MASK |
              
                PSYS_PART_FOLLOW_SRC_MASK |
                PSYS_PART_FOLLOW_VELOCITY_MASK |
              
                PSYS_PART_EMISSIVE_MASK, 
         
                     
            PSYS_PART_START_COLOR, I_start_color,
            PSYS_PART_END_COLOR, I_end_color,
                     
         
                     
            PSYS_PART_START_SCALE, I_start_scale,
            PSYS_PART_END_SCALE, I_end_scale,
                     
            PSYS_PART_MAX_AGE, I_particle_age,
                     
            
            PSYS_SRC_PATTERN,
                PSYS_SRC_PATTERN_ANGLE_CONE,
            
            PSYS_SRC_INNERANGLE, I_inner_angle,
            PSYS_SRC_OUTERANGLE, I_outer_angle,
            PSYS_SRC_OMEGA, I_spin_speed,
            
            PSYS_SRC_ACCEL,  I_particle_accel,
            
            PSYS_SRC_TEXTURE, I_particle_texture,
            
            PSYS_SRC_BURST_RATE, I_burst_rate,
            PSYS_SRC_BURST_PART_COUNT, I_burst_count,
            PSYS_SRC_BURST_RADIUS, I_burst_radius,
            PSYS_SRC_BURST_SPEED_MIN, I_min_speed,
            PSYS_SRC_BURST_SPEED_MAX, I_max_speed,
            
            PSYS_SRC_MAX_AGE, I_source_age
            ]);
        }
            
            flying = TRUE;
            llMessageLinked(LINK_SET, 0, "fly", "");
            //..................IDLE...............................

        }
        else
        {
            flying = FALSE;
            llMessageLinked(LINK_SET, 0, "nofly", "");
            llParticleSystem([]);
        }
    }
            
        

    run_time_permissions(integer perm)
    {
        if (perm)
        {
            llTakeControls(CONTROL_FWD | CONTROL_ML_LBUTTON, TRUE, TRUE);
            llSetTimerEvent(0.1);
        }
    }
    
    control(key owner, integer level, integer edge)
    {
       if(flying)
       { // Look for the jump key going down for the first time.
        if (!(level & CONTROL_FWD))
        {
            llMessageLinked(LINK_SET, FALSE, "stop", "");
                    
            
//..................IDLE...............................
        

vector I_start_color = <1,1,1>;
vector I_end_color = <0.5,0,0.2>; 

float I_start_alpha = 0.0; 
float I_end_alpha = 1.0;   

vector I_start_scale = <0.3,0.3,0.0>;   
vector I_end_scale = <0,0,0>;    

float I_particle_age = 1.5;

float I_inner_angle = PI; 
float I_outer_angle = PI; 
vector I_spin_speed = <0.0,0.0,0.0>;   

vector I_particle_accel = <0.0,0.0,0.0>;

float I_burst_rate = 0.1;
integer I_burst_count = 50;
float I_burst_radius = 0.05;
float I_min_speed = 0.1;
float I_max_speed = 0.65;

float I_source_age = 0.0;  // 0.0 = forever

string I_particle_texture = "particle_glowWhite2"; //if not defined, the default particle

key I_target; //the target of your particles if they use a follow mask


        llParticleSystem([
            PSYS_PART_FLAGS, 
                PSYS_PART_INTERP_COLOR_MASK |
                PSYS_PART_INTERP_SCALE_MASK |
              
                PSYS_PART_FOLLOW_SRC_MASK |
                PSYS_PART_FOLLOW_VELOCITY_MASK |
              
                PSYS_PART_EMISSIVE_MASK, 
         
                     
            PSYS_PART_START_COLOR, I_start_color,
            PSYS_PART_END_COLOR, I_end_color,
                     
         
                     
            PSYS_PART_START_SCALE, I_start_scale,
            PSYS_PART_END_SCALE, I_end_scale,
                     
            PSYS_PART_MAX_AGE, I_particle_age,
                     
            
            PSYS_SRC_PATTERN,
                PSYS_SRC_PATTERN_ANGLE_CONE,
            
            PSYS_SRC_INNERANGLE, I_inner_angle,
            PSYS_SRC_OUTERANGLE, I_outer_angle,
            PSYS_SRC_OMEGA, I_spin_speed,
            
            PSYS_SRC_ACCEL,  I_particle_accel,
            
            PSYS_SRC_TEXTURE, I_particle_texture,
            
            PSYS_SRC_BURST_RATE, I_burst_rate,
            PSYS_SRC_BURST_PART_COUNT, I_burst_count,
            PSYS_SRC_BURST_RADIUS, I_burst_radius,
            PSYS_SRC_BURST_SPEED_MIN, I_min_speed,
            PSYS_SRC_BURST_SPEED_MAX, I_max_speed,
            
            PSYS_SRC_MAX_AGE, I_source_age
            ]);
            
        }
        else
        {
            
          llMessageLinked(LINK_SET, TRUE, "burst", ""); 
vector start_color = <1,1,1>;
vector end_color = <0.65,0.3,0.0>; 

float start_alpha = 1.0; 
float end_alpha = 0.0; 

vector start_scale = <0.25,0.25,0.0>;
vector end_scale = <0.1,0.1,0.0>;   //scale (z is ignored)

float particle_age = 2.5; 

float inner_angle = PI; 
float outer_angle = PI;  
vector spin_speed = <0.0,0.0,0.0>;
vector particle_accel = <0.0,0.0,0.0>;

float burst_rate = 0.01;   
integer burst_count = 20;
float burst_radius = 0.1;   
float min_speed = 1;      
float max_speed = 1.5;

float source_age = 0.0; //  0.0 = forever

string particle_texture = "particle_glowOrange4";

key target; 


{

    {

        llParticleSystem([
            PSYS_PART_FLAGS, 
                PSYS_PART_INTERP_COLOR_MASK |
                PSYS_PART_INTERP_SCALE_MASK |
                //PSYS_PART_WIND_MASK |
                //PSYS_PART_BOUNCE_MASK |
                PSYS_PART_FOLLOW_SRC_MASK |
                PSYS_PART_FOLLOW_VELOCITY_MASK |
                //PSYS_PART_TARGET_POS_MASK |
                PSYS_PART_EMISSIVE_MASK, 
                //PSYS_PART_TARGET_LINEAR_MASK, 
                     
            PSYS_PART_START_COLOR, start_color,
            PSYS_PART_END_COLOR, end_color,
                     
            PSYS_PART_START_ALPHA, start_alpha,
            PSYS_PART_END_ALPHA, end_alpha,
                     
            PSYS_PART_START_SCALE, start_scale,
            PSYS_PART_END_SCALE, end_scale,
                     
            PSYS_PART_MAX_AGE, particle_age,
                     
            
            PSYS_SRC_PATTERN,
                //PSYS_SRC_PATTERN_DROP,
                //PSYS_SRC_PATTERN_EXPLODE,
                //PSYS_SRC_PATTERN_ANGLE,
                PSYS_SRC_PATTERN_ANGLE_CONE,
            
            PSYS_SRC_INNERANGLE, inner_angle,
            PSYS_SRC_OUTERANGLE, outer_angle,
            PSYS_SRC_OMEGA, spin_speed,
            
           // PSYS_SRC_ACCEL,  particle_accel,
            
            PSYS_SRC_TEXTURE, particle_texture,
            
            PSYS_SRC_BURST_RATE, burst_rate,
            PSYS_SRC_BURST_PART_COUNT, burst_count,
            PSYS_SRC_BURST_RADIUS, burst_radius,
            PSYS_SRC_BURST_SPEED_MIN, min_speed,
            PSYS_SRC_BURST_SPEED_MAX, max_speed,
            
            PSYS_SRC_MAX_AGE, source_age//,
            
            //PSYS_SRC_TARGET_KEY, target
            
            ]);
        
        }}
        
}
            
     
        
    

}   
}
}