DFGA Blog

Sn0w on Second Life

So for our Sunken Temple Brief we decided to make Snow in Second Life. This was done by using a Particle script, this information below was key to our build because we needed snow in our sunken temple. We had to change some of the values to make it would ill out line what we change to create the snow effect…

this is the script.

// Mask Flags - set to TRUE to enable
integer glow = FALSE;            // Make the particles glow <------------------------------WE CHANGE THIS TO STOP SOME GLOWING
integer bounce = FALSE;          // Make particles bounce on Z plane of object <------------------------------- AS THE NAME SAYS WE DID NOT WANT IT TO BOUNCE, SNOW DOESNT BOUNCE.
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 <--------------------------------------- DID NOT WANT IT TO BE EFFECTED BY SECOND LIFE WIND
integer followSource = FALSE;    // Particles follow the source <----------------------------------SO IT WOULD NOT END ON THE SOURCE BLOCK
integer 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_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE; <----------------------------- RATHER THAN HAVING THE DEFAULT EXPLODE THIS SPREDS OUT THE PARTICLES MORE.

// 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 = "";<-------------------------------- THIS WOULD CAUSE THE PARTICLES TO DIE AT THE SOURCE

// Particle paramaters
float age = 30;                  // Life of each particle <--------------------------------- CHANGE THE FLOAT AGE TO 30 SECOND (THE PARTICLES WILL LAST 30 SECONDS)
float maxSpeed = 0.5;            // Max speed each particle is spit out at <----------------------------- THE MAX SPEED OF THE PARTICLES
float minSpeed = 0.2;            // Min speed each particle is spit out at <----------------------------- THE MINIMUM SPEED OF THE PARTICLES
string texture = "";                // Texture used for particles, default used if blank
float startAlpha = 1;          // Start alpha (transparency) value
float endAlpha = 0.1;          // End alpha (transparency) value
vector startColor = <1,1,1>;    // Start color of particles <R,G,B>  <-------------------------- WE CHANGED THE BIRTH COLOUR TO WHITE
vector endColor = <1,1,1>;      // End color of particles <R,G,B> (if interpColor == TRUE) <--------------------- WE ALSO CHANGED THE DEATH COLOUR TO WHITE
vector startSize = <1,1,1>;    // Start size of particles <---------------------- SIZE OF THE PARTICLE TO LARGE
vector endSize = <1,1,1>;      // End size of particles (if interpSize == TRUE) <---------------------- SIZE OF THE PARTICLE AT THE END
vector push = <0,0,-0.5>;          // Force pushed on particles <------------- WE FORCED THE PARTICLE DOWN WITH THE VALUE OF -.5

// System paramaters
float rate = 1;            // How fast (rate) to emit particles
float radius = 2;          // Radius to emit particles for BURST pattern
integer count = 5;        // How many particles to emit per BURST
float outerAngle = 0.01;    // Outer angle for all ANGLE patterns
float innerAngle = 1.55;    // 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

// Script variables
integer pre = 2;          //Adjust the precision of the generated list.

integer flags;
list sys;
integer type;
vector tempVector;
rotation tempRot;
string tempString;
integer i;

string float2String(float in)
{
    return llGetSubString((string)in,0,pre - 7);
}

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;
    sys = [  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_ANGLE_BEGIN,innerAngle,
                        PSYS_SRC_ANGLE_END,outerAngle,
                        PSYS_SRC_OMEGA, omega,
                        PSYS_SRC_MAX_AGE, life,
                        PSYS_SRC_TEXTURE, texture,
                        PSYS_PART_START_ALPHA, startAlpha,
                        PSYS_PART_END_ALPHA, endAlpha
                            ];

    llParticleSystem(sys);
}

default
{
    state_entry()
    {
        updateParticles();
    }

}

This is what happened..



The next step in this is to make snow piled up in the corners of the Temple to give the sell the effects of snow is falling

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s