User:Toady Nakamura/Particle Mist for Fountains Script

From Second Life Wiki
Jump to: navigation, search

Particle System 1.0

  • This script will make steady mist, useful for fountains, fire logs, small waterfalls and so on.
  • Once the script has done its job and made the particles, you can take the script out of the prim to save on script load.
  • Be sure you keep a scripted copy in inventory in case you wish to use it later.
// Particle System 1.0
// This script will make steady mist, useful for fountains, fire logs, small waterfalls and so on.
// Once the script has done its job and made the particles, you can take the script out of the prim
// to save on script load.  Be sure you keep a scripted copy in inventory in case you wish to use it later. 
 
// --->> first is a user defined function to create the particle display.  
 
StartSteam()
{
//---->>>> This first part is where you make choices in how your particles will appear.
 
// MASK FLAGS: set  to "TRUE" to enable
integer glow = TRUE;                                // Makes the particles glow
integer bounce = TRUE;                             // Make particles bounce on Z plane of objects
integer interpColor = TRUE;                         // Color - from start value to end value
integer interpSize = TRUE;                          // Size - from start value to end value
integer wind = FALSE;                               // 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_EXPLODE;
 
// 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 parameters
 
float age = 3;                                  // Life of each particle
float maxSpeed = 0.05;                          // Max speed each particle is spit out at
float minSpeed = 0.0;                           // Min speed each particle is spit out at
string texture = "";                     // Texture used for particles, default used if blank
float startAlpha = .25;                         // Start alpha (transparency) value
float endAlpha = 0.0;                           // End alpha (transparency) value
vector startColor = <0.9,0.9,1>;                // Start color of particles <R,G,B>
vector endColor = <1,1,1>;      // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.25,.25,.25>;               // Start size of particles 
vector endSize = <3,3,3>;                       // End size of particles (if interpSize == TRUE)
vector push = <0,0,0.5>;                        // Force pushed on particles
 
// System paramaters
 
float rate = 0.3;                               // How fast (rate) to emit particles
float radius = 0.3;                             // Radius to emit particles for BURST pattern
integer count = 12;                             // How many particles to emit per BURST 
float outerAngle = 0.1;                         // Outer angle for all ANGLE patterns
float innerAngle = 0.65;                        // Inner angle for all ANGLE patterns
vector omega = <0,0,0>;                         // Rotation of ANGLE patterns around the source
float life = 0;                                 // Life in seconds for the system to make particles
 
//--->> This is the part where your choices are assembled into machine readable code.
//--->> You don't have to change anything from here down.
 
    integer flags; 
 
 
      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
                            ]);
}
 
default
{
    state_entry()
    {  // makes particles as soon as placed in prim
        // or after you hit "save>reset" if you change things 
         StartSteam();
    }
}

Visit my LSL wiki page for my library of simple scripts ! Toady Nakamura