Particle Writer

Expired

// Particle Script 0.3
// Created by Ama Omega
// 10-10-2003
// Interactive Dev Kit version by Cienna Rand
integer lHandle = -1;
integer run = 1;

// Mask Flags - set to TRUE to enable
integer glow = TRUE;
integer bounce = FALSE;
integer interpColor = TRUE;
integer interpSize = TRUE;
integer wind = FALSE;
integer followSource = FALSE;
integer followVel = TRUE;
integer pattern = 4;
key target = "";
float age = 5;
float maxSpeed = 0;
float minSpeed = 0;
string texture;
float startAlpha = 1;
float endAlpha = 0.1;
vector startColor = <1 ,0,1>;
vector endColor = <0,0,1>;
vector startSize = <0.1,0.1,0.1>;
vector endSize = <0.1,0.1,0.1>;
vector push = <0,0,1>;

float rate = 0.1;
float radius = 1;
integer count = 3;
float outerAngle = 0;
float innerAngle = 0;
vector omega = <0,0,20>;
float life = 0;

integer flags;

updateParticles()
{
    flags = 0;
    if (target == "owner") target = llGetOwner();
    if (target == "self") target = llGetKey();
    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;
    if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
    if (target != "") flags = flags | PSYS_PART_TARGET_POS_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_TARGET_KEY,target,
                        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
                            ]);
}

processFlag(string var)
{
    integer type;
    string c = llGetSubString(var, 0, 0);
    if (c == "+") type = TRUE;
    else if (c == "-") type = FALSE;
    else return;
    string v = llToLower(llGetSubString(var, 1, llStringLength(var)));
    if (v == "glow") glow = type;
    else if (v == "bounce") bounce = type;
    else if (v == "interpcolor") interpColor = type;
    else if (v == "interpsize") interpSize = type;
    else if (v == "wind") wind = type;
    else if (v == "followsource") followSource = type;
    else if (v == "followvel") followVel = type;
    updateParticles();
}

processPattern(string var)
{
    string v = llToUpper(var);
    if (v == "EXPLODE")
     pattern = PSYS_SRC_PATTERN_EXPLODE;
    else if (v == "DROP")
     pattern = PSYS_SRC_PATTERN_DROP;
    else if (v == "ANGLE_CONE_EMPTY")
     pattern = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY;
    else if (v == "ANGLE_CONE")
     pattern = PSYS_SRC_PATTERN_ANGLE_CONE;
    else if (v == "ANGLE")
     pattern = PSYS_SRC_PATTERN_ANGLE;
    else return;
    updateParticles();
}

showSetFlags()
{
    list f = [];
    if (glow) f += ["GLOW"];
    if (bounce) f += ["BOUNCE"];
    if (interpColor) f += ["INTERP_COLOR"];
    if (interpSize) f += ["INTERP_SIZE"];
    if (wind) f += ["WIND"];
    if (followSource) f += ["FOLLOW_SOURCE"];
    if (followVel) f += ["FOLLOW_VEL"];
    llWhisper(0, "Set: " + llList2CSV(f));
}

showPattern()
{
    if (pattern == PSYS_SRC_PATTERN_EXPLODE)
        llWhisper(0, "Pattern: EXPLODE");
    else if (pattern == PSYS_SRC_PATTERN_DROP)
        llWhisper(0, "Pattern: DROP");
    else if (pattern == PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY)
        llWhisper(0, "Pattern: ANGLE_CONE_EMPTY");
    else if (pattern == PSYS_SRC_PATTERN_ANGLE_CONE)
        llWhisper(0, "Pattern: ANGLE_CONE");
    else if (pattern == PSYS_SRC_PATTERN_ANGLE)
        llWhisper(0, "Pattern: ANGLE");
}

vector string2vector(string s)
{
    list foo = llCSV2List(s);
    vector v;
    v.x = llList2Float(foo,0);
    v.y = llList2Float(foo,1);
    v.z = llList2Float(foo,2);
    return v;
}

float fixColor(integer c)
{
    if (c > 255) return 255;
    if (c <= 0) return 0;
    return (float)c/255;
}

vector colorVector(string s)
{
    list foo = llCSV2List(s);
    vector v;
    v.x = fixColor(llList2Integer(foo,0));
    v.y = fixColor(llList2Integer(foo,1));
    v.z = fixColor(llList2Integer(foo,2));
    //llWhisper(0, "Debug: v: " + (string)v);
    return v;
}

dumpParams()
{
    llWhisper(0, "PART_MAX_AGE:" + (string)age);
    llWhisper(0, "PART_FLAGS:" + (string)flags);
    llWhisper(0, "PART_START_COLOR:" + (string)startColor);
    llWhisper(0, "PART_END_COLOR:" + (string)endColor);
    llWhisper(0, "PART_START_SCALE:" + (string)startSize);
    llWhisper(0, "PART_END_SCALE:" + (string)endSize);
    llWhisper(0, "SRC_PATTERN:" + (string)pattern);
    llWhisper(0, "SRC_BURST_RATE:" + (string)rate);
    llWhisper(0, "SRC_ACCEL:" + (string)push);
    llWhisper(0, "SRC_BURST_PART_COUNT:" + (string)count);
    llWhisper(0, "SRC_BURST_RADIUS:" + (string)radius);
    llWhisper(0, "SRC_BURST_SPEED_MIN:" + (string)minSpeed);
    llWhisper(0, "SRC_BURST_SPEED_MAX:" + (string)maxSpeed);
    llWhisper(0, "SRC_TARGET_KEY:" + (string)target);
    llWhisper(0, "SRC_INNERANGLE:" + (string)innerAngle);
    llWhisper(0, "SRC_OUTERANGLE:" + (string)outerAngle);
    llWhisper(0, "SRC_OMEGA:" + (string)omega);
    llWhisper(0, "SRC_MAX_AGE:" + (string)life);
    llWhisper(0, "SRC_TEXTURE:" + (string)texture);
    llWhisper(0, "PART_START_ALPHA:" + (string)startAlpha);
    llWhisper(0, "PART_END_ALPHA:" + (string)endAlpha);
}

default
{
    state_entry()
    {
        if (lHandle == -1) lHandle = llListen(0, "", llGetOwner(), "");
        else {
            llListenRemove(lHandle);
            lHandle = llListen(0, "", llGetOwner(), "");
        }
        updateParticles();
    }

    touch(integer num_deteced)
    {
        if (run == 1) {
            run *= -1;
            llParticleSystem([]);
        } else {
            run *= -1;
            updateParticles();
        }
    }
    
    listen(integer channel, string name, key id, string msg)
    {
        list argv = llParseString2List(msg, [" "], []);
        integer argc = llGetListLength(argv);
        string cmd = llToLower(llList2String(argv, 0));
        if (cmd == "set")
        {
            if (argc == 1) showSetFlags();
            else processFlag(llList2String(argv, 1));
        }
        else if (cmd == "pattern")
        {
            if (argc == 1) showPattern();
            else processPattern(llList2String(argv, 1));
        }
        else if (cmd == "target")
        {
            target = llList2String(argv, 1);
            if (target == "none") target = "";
                updateParticles();
        }
        else if (cmd == "age")
        {
            age = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "maxspeed")
        {
            maxSpeed = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "minspeed")
        {
            minSpeed = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "startalpha")
        {
            startAlpha = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "endalpha")
        {
            endAlpha = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "startcolor")
        {
            startColor = colorVector(llList2String(argv, 1));
            updateParticles();
        }
        else if (cmd == "endcolor")
        {
            endColor = colorVector(llList2String(argv, 1));
            updateParticles();
        }
        else if (cmd == "startsize")
        {
            startSize = string2vector(llList2String(argv, 1));
            updateParticles();
        }
        else if (cmd == "endsize")
        {
            endSize = string2vector(llList2String(argv, 1));
            updateParticles();
        }
        else if (cmd == "push")
        {
            push = string2vector(llList2String(argv, 1));
            updateParticles();
        }
        else if (cmd == "omega")
        {
            omega = string2vector(llList2String(argv, 1));
            updateParticles();
        }
        else if (cmd == "rate")
        {
            rate = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "radius")
        {
            radius = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "count")
        {
            count = llList2Integer(argv, 1);
            updateParticles();
        }
        else if (cmd == "outerangle")
        {
            outerAngle = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "innerangle")
        {
            innerAngle = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "life")
        {
            life = llList2Float(argv, 1);
            updateParticles();
        }
        else if (cmd == "on")
        {
            updateParticles();
        }
        else if (cmd == "off")
        {
            llParticleSystem([]);
        }
        else if (cmd == "dump")
        {
            dumpParams();
        }
    }
}

 

Particle Garden

Expired

What does it do?
- It shows a particle picture of what ever texture that is in the object randomly.
- The flowers grow slowly
- It is visible from all angles like all particlesHow do you use it?
- Rez an Object
- Change the ROTATION X=90, Y=0, Z=0 (Under the OBJECT tab for the object)
- You put this script into an object (Click on New Script in the object's contents and copy the code below to this object and save)
- Put any other flowers, gnomes, tree textures you want inside it.
- Click to start / stop

float MAX_RADIUS = 2.5;
float RADIUS_INTERVAL = 0.5;

// Modified values
integer IS_ON = FALSE;
float RADIUS = 2;
string TEXTURE = "f42bcc2b-20c8-9df7-cf1c-69566e377fd8";

garden() {
    llParticleSystem([
        PSYS_PART_FLAGS, 0 | PSYS_PART_EMISSIVE_MASK | 
        PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK,
        PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_ANGLE_CONE,
        
        // Texture / Size / Alpha / Color
        PSYS_SRC_TEXTURE, TEXTURE,
        PSYS_PART_START_SCALE,<0.2000, 0.2000, 0.0000>,
        PSYS_PART_END_SCALE,<0.5000, 0.5000, 0.0000>,
        PSYS_PART_START_ALPHA,0.000000,
        PSYS_PART_END_ALPHA,1.000000,
        PSYS_PART_START_COLOR, <1 .0,1.0,1.0>,
        PSYS_PART_END_COLOR, <1 .0,1.0,1.0>,    
        
        // Flow
        PSYS_PART_MAX_AGE,1000.0000,
        PSYS_SRC_BURST_RATE,1.000000,
        PSYS_SRC_BURST_PART_COUNT,1,
        PSYS_SRC_MAX_AGE,0.000000,
        
        // Rez position
        PSYS_SRC_BURST_RADIUS,RADIUS,
        PSYS_SRC_INNERANGLE,1.550000,
        PSYS_SRC_OUTERANGLE,1.550000,
        PSYS_SRC_OMEGA,<0.00000, 0.00000, 4>,        
        PSYS_SRC_BURST_SPEED_MIN,0.000000,
        PSYS_SRC_BURST_SPEED_MAX,0.000000
    ]);
}

stop() {
    llParticleSystem([]);
}

default {
    state_entry() {
        if(IS_ON) {
            llSetTimerEvent(RADIUS_INTERVAL);
            garden();
        } else {
            stop();
        }
    }
    
    touch_start(integer num_detected) {
        if(IS_ON) {
            llSetTimerEvent(0.0);
            stop();
            llWhisper(0, "Garden has stopped");
        } else {
            llSetTimerEvent(RADIUS_INTERVAL);
            garden();
            llWhisper(0, "Garden has started");
        }
        IS_ON = !IS_ON;
    }
    
    timer() {
        integer max_inventory = llGetInventoryNumber(INVENTORY_TEXTURE);
        if(max_inventory > 0) {
            TEXTURE = llGetInventoryName(INVENTORY_TEXTURE, (integer)llFrand(max_inventory));
        }
        RADIUS = llFrand(MAX_RADIUS);
        garden();
    }
}

 

 

Eltee's PD Particle Engine 1.0

Expired

A nice little particle engine with an on/off switch and timer!

//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//// eltee Statosky's Particle Creation Engine 1.0
//// 01/09/2004
//// *PUBLIC DOMAIN*
//// Free to use
//// Free to copy
//// Free to poke at
//// Free to hide in stuff you sell
//// Just please leave this header intact
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////

integer effectFlags=0;
integer running=TRUE;


///////////////////////////////////////////////////////
// Color Secelection Variables
///////////////////////////////////////////////////////
// Interpolate between startColor and endColor
integer colorInterpolation  = TRUE;
// Starting color for each particle 
vector  startColor          = <1 .0, 0.5, 0.75>;
// Ending color for each particle
vector  endColor            = <0.75, 0.5, 1.0>;
// Starting Transparency for each particle (1.0 is solid)
float   startAlpha          = 1.0;
// Ending Transparency for each particle (0.0 is invisible)
float   endAlpha            = 0.0;
// Enables Absolute color (true) ambient lighting (false)
integer glowEffect          = TRUE;


///////////////////////////////////////////////////////
// Size & Shape Selection Variables
///////////////////////////////////////////////////////
// Interpolate between startSize and endSize
integer sizeInterpolation   = TRUE;
// Starting size of each particle
vector  startSize           = <0.5, 0.5, 0.0>;
// Ending size of each particle
vector  endSize             = <0.5, 0.5, 0.0>;
// Turns particles to face their movement direction
integer followVelocity      = TRUE;
// Texture the particles will use ("" for default)
string  texture             = "";


///////////////////////////////////////////////////////
// Timing & Creation Variables Variables
///////////////////////////////////////////////////////
// Lifetime of one particle (seconds)
float   particleLife        = 3.0;
// Lifetime of the system 0.0 for no time out (seconds)
float   SystemLife          = 0.0;
// Number of seconds between particle emissions
float   emissionRate        = 0.02;
// Number of particles to releast on each emission
integer partPerEmission     = 1;


///////////////////////////////////////////////////////
// Angular Variables
///////////////////////////////////////////////////////
// The radius used to spawn angular particle patterns
float   radius              = 3.0;
// Inside angle for angular particle patterns
float   innerAngle          = 1;
// Outside angle for angular particle patterns
float   outerAngle          = 0;
// Rotational potential of the inner/outer angle
vector  omega               = <0.0, 0.0, 0.2>;


///////////////////////////////////////////////////////
// Movement & Speed Variables
///////////////////////////////////////////////////////
// The minimum speed a particle will be moving on creation
float   minSpeed            = 0.0;
// The maximum speed a particle will be moving on creation
float   maxSpeed            = 0.1;
// Global acceleration applied to all particles
vector  acceleration        = <0.0, 0.0, -0.5>;
// If true, particles will be blown by the current wind
integer windEffect          = FALSE;
// if true, particles 'bounce' off of the object's Z height
integer bounceEffect        = FALSE;
// If true, particles spawn at the container object center
integer followSource        = FALSE;
// If true, particles will move to expire at the target
//integer followTarget        = TRUE;
// Desired target for the particles (any valid object/av key)
// target Needs to be set at runtime
key     target              = "";


///////////////////////////////////////////////////////
//As yet unimplemented particle system flags
///////////////////////////////////////////////////////
integer randomAcceleration  = FALSE;
integer randomVelocity      = FALSE;
integer particleTrails      = FALSE;

///////////////////////////////////////////////////////
// Pattern Selection
///////////////////////////////////////////////////////
//   Uncomment the pattern call you would like to use
//   Drop parcles at the container objects' center
//integer pattern = PSYS_SRC_PATTERN_DROP;
//   Burst pattern originating at objects' center
//integer pattern = PSYS_SRC_PATTERN_EXPLODE;
//   Uses 2D angle between innerAngle and outerAngle
integer pattern = PSYS_SRC_PATTERN_ANGLE;
//   Uses 3D cone spread between innerAngle and outerAngle
//integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;
// 
//integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY;



setParticles()
{
// Here is where to set the current target
// llGetKey() targets this script's container object
// llGetOwner() targets the owner of this script
// Feel free to insert any other valid key
    target="";
// The following block of if statements is used to construct the mask 
    if (colorInterpolation) effectFlags = effectFlags|PSYS_PART_INTERP_COLOR_MASK;
    if (sizeInterpolation)  effectFlags = effectFlags|PSYS_PART_INTERP_SCALE_MASK;
    if (windEffect)         effectFlags = effectFlags|PSYS_PART_WIND_MASK;
    if (bounceEffect)       effectFlags = effectFlags|PSYS_PART_BOUNCE_MASK;
    if (followSource)       effectFlags = effectFlags|PSYS_PART_FOLLOW_SRC_MASK;
    if (followVelocity)     effectFlags = effectFlags|PSYS_PART_FOLLOW_VELOCITY_MASK;
    if (target!="")       effectFlags = effectFlags|PSYS_PART_TARGET_POS_MASK;
    if (glowEffect)         effectFlags = effectFlags|PSYS_PART_EMISSIVE_MASK;
//Uncomment the following selections once they've been implemented
//    if (randomAcceleration) effectFlags = effectFlags|PSYS_PART_RANDOM_ACCEL_MASK;
//    if (randomVelocity)     effectFlags = effectFlags|PSYS_PART_RANDOM_VEL_MASK;
//    if (particleTrails)     effectFlags = effectFlags|PSYS_PART_TRAIL_MASK;
    llParticleSystem([
        PSYS_PART_FLAGS,            effectFlags,
        PSYS_SRC_PATTERN,           pattern,
        PSYS_PART_START_COLOR,      startColor,
        PSYS_PART_END_COLOR,        endColor,
        PSYS_PART_START_ALPHA,      startAlpha,
        PSYS_PART_END_ALPHA,        endAlpha,
        PSYS_PART_START_SCALE,      startSize,
        PSYS_PART_END_SCALE,        endSize,    
        PSYS_PART_MAX_AGE,          particleLife,
        PSYS_SRC_ACCEL,             acceleration,
        PSYS_SRC_TEXTURE,           texture,
        PSYS_SRC_BURST_RATE,        emissionRate,
        PSYS_SRC_INNERANGLE,        innerAngle,
        PSYS_SRC_OUTERANGLE,        outerAngle,
        PSYS_SRC_BURST_PART_COUNT,  partPerEmission,      
        PSYS_SRC_BURST_RADIUS,      radius,
        PSYS_SRC_BURST_SPEED_MIN,   minSpeed,
        PSYS_SRC_BURST_SPEED_MAX,   maxSpeed, 
        PSYS_SRC_MAX_AGE,           SystemLife,
        PSYS_SRC_TARGET_KEY,        target,
        PSYS_SRC_OMEGA,             omega   ]);
}

default
{
    state_entry()
    {
        running=TRUE;
        llSetText("Running", <0.0, 1.0, 0.0>, 0.5);
        setParticles();
    }
    
    touch_start(integer num_detected)
    {
        if (running==TRUE)
        {
            running=FALSE;
            llSetText("Stopped", <1 .0, 0.0, 0.0>, 0.5);
            llParticleSystem([]);
        }
        else
        {
            running=TRUE;
            llSetText("Running", <0.0, 1.0, 0.0>, 0.5);
            setParticles();
        }
    }
}

 

Firefly

Expired

// Mask Flags - set to TRUE to enable
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 = TRUE;           // Particles effected by wind
integer followSource = FALSE;    // Particles follow the source
integer followVel = TRUE;       // Particles turn to velocity direction

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;

// Select a target for particles to go towards
// "" for no target, "owner" will follow object owner 
//    and "self" will target this object
//    or put the key of an object for particles to go to
key target = "";

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

// System paramaters
float rate = 0.1;            // How fast (rate) to emit particles
float radius = .55;          // Radius to emit particles for BURST pattern
integer count = 5;        // How many particles to emit per BURST 
float outerAngle = 1.55;    // Outer angle for all ANGLE patterns
float innerAngle = 1.55;    // Inner angle for all ANGLE patterns
vector omega = <0,0,3>;    // Rotation of ANGLE patterns around the source
float life = 0;             // Life in seconds for the system to make particles

// Script variables
integer flags;

updateParticles()
{
    if (target == "owner") target = llGetOwner();
    if (target == "self") target = llGetKey();
    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;
    if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
    if (target != "") flags = flags | PSYS_PART_TARGET_POS_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_TARGET_KEY,target,
                        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
                            ]);
}

default
{
    state_entry()
    {
        updateParticles();
        //llParticleSystem([]);
    }
}