Jump to content

Particle effects script - for Christmas ornament, how do I slow the particles down?


Recommended Posts

Hi everyone,


My first post here.  I have many examples and went to the Particle Laboratory and enlisted the help of several people, but I still can't make a simple snow-fall particle script, even starting with a free one.


I am making an ornament for a Christmas tree and wanted to have a few fluttering 'snow' particles descending from it.  It is a small ornament, probably about half a meter around.  I got all the free scripts from the Particle Laboratory and the one that seemed the best fit was "Snow" PARTICLE TEMPLATE.


This script I have experimented with for 5 hours and still can't get it to work.  The snow falls, but the particles are too fast.  I want a very slow rate.  I changed the PSYS_SRC_ACCEL many times but even at 0 it is too fast, and making negative or positive only seems to make it faster.


I changed PSYS_SRC_BURST_SPEED_MIN and PSYS_SRC_BURST_SPEED_MAX various ways, but that seems to affect the radius of the particles - if I decrease the MAX, the particles come out all in a line, rather than being spread across a small area.


Essentially the script below works for what I want, but the particles are moving about twice as fast as I want.


Additionaly, the particles seem to emit from the south pole of the sphere (if you drop the script in a sphere) up to about the equator, and only on one side of the sphere.  I would prefer it come out evenly all around the equator, but that is a much lesser concern than the speed.


I'm guessing that it's the SL wind, but I believe that is turned off and it still goes fast.  I can turn up gravity (I believe by making a negative number with the PSYS_SRC_ACCEL parameter) but that results in the snow paritcles going straight down, and still just as fast.


If anyone could please help me I would be very thankful.




//// "Snow" PARTICLE TEMPLATE v1 - by Jopsy Pendragon - 4/8/2008
//// You are free to use this script as you please, so long as you include this line:
//** The original 'free' version of this script came from THE PARTICLE LABORATORY. **//

// SETUP: Drop one optional particle texture and this script into a prim.
// Particles should start automatically. (Reset) the script if you insert a
// particle texture later on. Add one or more CONTROLLER TEMPLATES to any
// prims in the linked object to control when particles turn ON and OFF.

// Customize the particle_parameter values below to create your unique
// particle effect and click SAVE. Values are explained along with their
// min/max and default values further down in this script.

string CONTROLLER_ID = "A"; // See comments at end regarding CONTROLLERS.
integer AUTO_START = TRUE; // Optionally FALSE only if using CONTROLLERS.

list particle_parameters=[]; // stores your custom particle effect, defined below.
list target_parameters=[]; // remembers targets found using TARGET TEMPLATE scripts.

default {
state_entry() {
particle_parameters = [ // start of particle settings
// Texture Parameters:

// Production Parameters:
PSYS_SRC_BURST_RATE, (float) 0.25,
PSYS_PART_MAX_AGE, (float)5.0,
PSYS_SRC_MAX_AGE,(float) 0.0,

// Placement Parameters:

// Placement Parameters (for any non-DROP pattern):

// Placement Parameters (only for ANGLE & CONE patterns):
PSYS_SRC_ANGLE_END, (float) 0.0*PI,
// PSYS_SRC_OMEGA, <0,0,0>,

// After-Effect & Influence Parameters:
PSYS_SRC_ACCEL, <0.0,0.0,-0.5>,
// PSYS_SRC_TARGET_KEY, llGetLinkKey(llGetLinkNumber() + 1),


PSYS_PART_FLAGS, (integer)( 0 // Texture Options:
// After-effect & Influence Options:
//end of particle settings

if ( AUTO_START ) llParticleSystem( particle_parameters );


link_message( integer sibling, integer num, string mesg, key target_key ) {
if ( mesg != CONTROLLER_ID ) { // this message isn't for me. Bail out.
} else if ( num == 0 ) { // Message says to turn particles OFF:
llParticleSystem( [ ] );
} else if ( num == 1 ) { // Message says to turn particles ON:
llParticleSystem( particle_parameters + target_parameters );
} else if ( num == 2 ) { // Turn on, and remember and use the key sent us as a target:
target_parameters = [ PSYS_SRC_TARGET_KEY, target_key ];
llParticleSystem( particle_parameters + target_parameters );
} else { // bad instruction number
// do nothing.


//============================= About Parameters =============================
// There are 22-ish NAMED attributes that affect a particle display.
// To customize a display you give each a VALUE.
// For example: PSYS_PART_START_COLOR is a named attribute,
// and <1.0, 0.5, 0.0> is a color VALUE (orange, in this case).
// As long as your 'names' and 'values' are paired up properly, they can
// be in any order! Any you omit a pair, it reverts to a default value.

//============================= Texture Parameters =============================
// TEXTURE, can be an "Asset UUID" key copied from a texture
// that you have full permissions to, or the name of
// a texture in the prim's inventory.
// SCALE, (size) 0.0 to 4.0 meters wide, by 0.0 to 4.0 meters tall. (default 1x1)
// Textures are FLAT, so the 'z' part of the vector is ignored.
// Values smaller than 0.04x0.04 may not get rendered at all.
// Tiny particles vanish if the viewer is not near them.
// BEGIN_SCALE sets particle start size.
// END_SCALE (end size) is ignored, if the INTERP_SCALE_MASK option is disabled.
// COLOR, < RED, GREEN, BLUE > from <0.00,0.00,0.00> (black) to <1.00,1.00,1.00> (white/default)
// ALPHA, 1.0 = 100% visible(default), 0.0 = invisible. Less than 0.1 might not get seen.
// START_COLOR and START_ALPHA set the color and transparency of newly created particles.
// END_COLOR and END_ALPHA are ignored, if the INTERP_COLOR_MASK option is disabled.

//============================= Production Parameters =============================
// BURST_PART_COUNT: quantity of particles per burst, 1 to 4096 (default 1),
// BURST_RATE: seconds to delay between particle bursts. 0.0 to 30.0 (default 0.1)
// PART_MAX_AGE: particle lifespan in seconds, 0.00 to 30.0 (default=10.0)
// PART_MAX_AGE less than 0.5 might not be visible.
// The default total number of particles that can be seen is 4096, if one or more
// emitters try to create more than that, many will not be seen, and it may cause
// viewer lag. Use as few particles as you can for your effect:
// AGE/RATE * COUNT will tell you approximately how many particles your emitter creates.
// SRC_MAX_AGE: emitter auto shut-off timer. 1.0 to 60.0 seconds. 0.0 = never stop. (default)

//============================= Placement Parameters =============================
// DROP, ignores all other placement settings.
// EXPLODE, spray particles in all directions
// ANGLE, sprays a flat "fan" shape defined by ANGLE_BEGIN and END values
// CONE, sprays "ring" or "cone" shapes defined by ANGLE_BEGIN and END values
// RADIUS: 0.0 to 50.0? distance from emitter to create new particles
// (RADIUS is disabled with DROP pattern and the FOLLOW_SRC & TARGET_LINEAR options)
// SPEED: 0.00 to 50.0? Sets min/max starting velocities for non-drop patterns. (default: 1.0)
// ANGLE_BEGIN & END: 0.00*PI (up) to 1.00*PI (down), (Only for ANGLE & CONE patterns)
// (Values work much like the Sphere-prim's DIMPLE attributes.) (defaults: 0.0)
// OMEGA: <x,y,z> Sets how much to rotate angle/cone spray direction after
// every burst. 0.0 to PI? (default: <0,0,0>)

//======================== After-Effects & Influence Parameters ================
// ACCEL, x,y,z 0.0 to 50.0? sets a constant force, (affects all patterns)
// Causes particles to drift up/down or in a compass direction.
// Use ACCEL to create the illusion of (anti-)gravity or a directional wind.
// (ineffective with TARGET_LINEAR option)
// TARGET_KEY, "key", (requires the TARGET option be enabled).
// "key" can be a variety of many different things:
// llGetOwner()
// llGetKey() target self
// llGetLinkKey(1) target parent prim
// llGetLinkKey(llGetLinkNum() + 1) target next prim in link set
// WARNING: New copies of objects get new keys, you can't simply paste
// a prim's key into your script and expect it to always work. Visit
// the Particle Laboratory's section on TARGETS for a variety of ways
// to dynamically find your target's key. There are different 'best ways'
// depending on if your target is linked to your emitter or not.

//============================= About Options =============================
// Each option may be ON/ENABLED (no leading // )
// or OFF/DISABLED (by putting a // in front of it.)
// Options are combined together in a special way, (using the | symbol).
// This creates one single Parameter for PSYS_PART_FLAGS.

//============================= Texture Options =============================
// EMISSIVE: identical to "full bright" setting on prims
// FOLLOW_VELOCITY: particle texture 'tilts' towards the direction it's moving
// INTERP_COLOR: causes particle COLOR and ALPHA(transparency) to change over it's lifespan
// INTERP_SCALE: causes particle SCALE(size) to change over it's lifespan

//======================== After-Effects & Influences Options ================
// BOUNCE: particles bounce up from the z-altitude of emitter, and cannot fall below it.
// WIND: the sim's wind will push particles around
// FOLLOW_SRC: makes particles move (but not rotate) if their emitter moves, (disables RADIUS)
// TARGET_POS: causes particles to arrive at a some target at end of of their lifespan.
// TARGET_LINEAR: forces particles to form into an even line from emitter to target
// and forces a DROP-like pattern and disables effects of WIND and ACCEL


//======================== USING CONTROL TEMPLATES =======================
// Want to control when your particles turn ON and OFF? You can!
// Drop one (or more) of the CONTROL TEMPLATES from the particle laboratory
// into your object containing this script. That's it!

// Your controls should be effective immediately. (Some controllers can be
// adjusted and tuned, open them and read the USAGE notes to see.)
// One control template can control several particle templates in the
// same object. (keep in mind that each prim can only have ONE
// particle effect active at a time).
// The 'particle_effect_name' value must be the same in both the control
// and particle template to work. You can change that value and have
// a controller for one effect, and a different controller for a different
// effect in the same object.

//======================================== END ===============================

Link to comment
Share on other sites

you can try this & mess with max & min speed, rate, radius, and push

// Let it snow on Second Life// Particle Script 0.3// Created by Ama Omega// 10-10-2003 -boeh!// Retrieved from from Free SL Scripts on http://www.freeSLscripts.com or www.gendersquare.org/sl// Mask Flags - set to TRUE to enableinteger glow = TRUE;            // Make the particles glowinteger bounce = FALSE;          // Make particles bounce on Z plan of objectinteger interpColor = TRUE;     // Go from start to end colorinteger interpSize = TRUE;      // Go from start to end sizeinteger wind = FALSE;           // Particles effected by windinteger followSource = FALSE;    // Particles follow the sourceinteger followVel = FALSE;       // 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_ANGLEinteger 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 tokey target = "";// Particle paramatersfloat age = 100;                  // Life of each particlefloat maxSpeed = 0.2;            // Max speed each particle is spit out atfloat minSpeed = 0.01;            // Min speed each particle is spit out atstring texture;                 // Texture used for particles, default used if blankfloat startAlpha = 1;           // Start alpha (transparency) valuefloat endAlpha = 1;           // End alpha (transparency) valuevector startColor = <1,1,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 = <.1,.1,.1>;     // Start size of particlesvector endSize = <.1,.1,.1>;       // End size of particles (if interpSize == TRUE)vector push = <0,0,-0.02>;          // Force pushed on particles// System paramatersfloat rate = .1;            // How fast (rate) to emit particlesfloat radius = .03;          // Radius to emit particles for BURST patterninteger count = 5;        // How many particles to emit per BURSTfloat outerAngle = 1.54;    // Outer angle for all ANGLE patternsfloat innerAngle = 1.55;    // Inner angle for all ANGLE patternsvector omega = <0,0,10>;    // Rotation of ANGLE patterns around the sourcefloat life = 0;             // Life in seconds for the system to make particles// Script variablesinteger 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                            ]);}default{    state_entry()    {        updateParticles();    }}


Link to comment
Share on other sites

Well, I been sick for 3 days, just getting better now.  I was finally able to try it, and wow, that script really did the trick!  It started out with too much snow for what I wanted, but most people would prefer that amount.  I found the setting to turn down (count, from 5 to 1) and messed with a few other settings too.  Anyway it all turned out perfect!  :catvery-happy:


Thanks so much!


Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in

Sign In Now

  • Create New...