The Mere Life of the Fox

Ok so you have been looking for a nice smoke effect for that incense burner, stogie or what have you. Well I took Jopsy’s well put together script and did just that. Now mind you I didn’t add a texture UUID, this is using the default texture with a pretty good effect. Start out as a small thin wisp and slowly enlarges and fades away. If you are planning on using this for an incense effect one recommendation would would be to alter (vector OMEGA to a range of 0.40 - 0.60), this will keep the wisps from keeping the same pattern and adds a slight variation as you sit there and watch it. Looks best at night. Enjoy. Feel free to modify in any way you like.

// Wallace’s Wispy incense - April 3, 2007
// Jopsy’s Particle System Template v5 - Jan 28 2005
// — inspired/derived from Ama Omega’s 3-6-2004
//
// DEFAULT settings are commented at the end of each line, eg:
// varibletype  SETTINGNAME = Sample-Setting; // default-setting
//
// For more on particles, visit the Particle Labratory in Teal!
// This script may be used freely used in items for sale.
mySetParticles()
{
    //===============================================================
    // PART-1 - APPEARANCE - Settings for how each particle LOOKS
    vector   START_SCALE = < 0.04, 0.08, 0.0 >; // < 1.0, 1.0, 0.0 >
    vector     END_SCALE = < 0.4, 0.8, 0.0 >; // < 1.0, 1.0, 0.0 >
    vector   START_COLOR = < 0.5, 0.5, 0.5 >; // < 1.0, 1.0, 1.0 >
    vector     END_COLOR = < 0.5, 0.5, 0.5 >; // < 1.0, 1.0, 1.0 >
    float    START_ALPHA = 0.3; // 1.00
    float      END_ALPHA = 0.0; // 1.00
    integer INTERP_COLOR = TRUE; // FALSE
    integer INTERP_SCALE = TRUE; // FALSE
    integer     EMISSIVE = TRUE; // FALSE
    string       TEXTURE = “”; // ""
    // START/END: refers to the birth and death time of each particle.
    // SCALE: particle height/width, from 0.04 to 4.0. (no depth)
    // ALPHA: sets transparency, from invis = 0.0 to opaque = 1.0
    //       START_ALPHA is ignored if it is less than END_ALPHA
    // COLOR: vectors <red,Green,Blue>, each 0.00 to 1.00
    // INTERP_COLOR: enables/disables END_COLOR and END_ALPHA
    // INTERP_SCALE: enables/disables END_SCALE
    // EMISSIVE: enables/diables particle ‘glow’
    // TEXTURE: name of a texture in the emitter-prim’s inventory
    //          or the asset id key of any texture
    //======================
    // Part-2 - FLOW - These settings affect how Many, how Quickly,
    //                  and for how Long particles are present
    float     AGE = 20.00; // 10.00
    float    RATE = 0.1// 0.10
    integer COUNT = 1;    // 1
    float    LIFE = 0.0// 0.0
    // AGE: How many seconds each particle lives, 0.1 to 60
    // RATE: Seconds between particle bursts, 0.0 to 60
    // COUNT: Number of particles per burst, 1 to 4096
    // LIFE Number of seconds to wait before shutting off 0.1 to 60
    //       0.0 never stops
    //==========================
    // Part-3 - 3    PLACEMENT — Where are new particles created, and what
    //                     direction  are they facing?
    integer   PATTERN = PSYS_SRC_PATTERN_ANGLE; // PSYS_SRC_PATTERN_DROP
    float      RADIUS = 0.01; // 0.00
    float ANGLE_BEGIN = 0.00; // 0.00
    float   ANGLE_END = 0.05; // 0.00
    vector      OMEGA = < 0.00, 0.00, 0.60 >; // < 0.00, 0.00, 0.00 >
    //float  INNERANGLE = 0.00; // 0.00
    //float  OUTERANGLE = 0.00; // 0.00
    // PATTERN: must be set to one of the following:
    //      PSYS_SRC_PATTERN_EXPLODE sends particles in all directions
    //      PSYS_SRC_PATTERN_DROP  ignores minSpeed and maxSpeed.
    //      PSYS_SRC_PATTERN_ANGLE_CONE use ANGLE settings to make rings/cones
    //      PSYS_SRC_PATTERN_ANGLE use innerangle/outerangle to make flat
    //      wedges
    // RADIUS: distance between emitter and each new particle,  0.0 to 64?
    // ANGLE_BEGIN: for both ANGLE patterns, 0 to PI(3.14159)
    // ANGLE_END: for both for ANGLE patterns,  0 to PI.
    // OMEGA: How much to rotate the emitter around the <x,Y,Z> axises
    //         after each burst.  Set OMEGA to all 0’s to reset/disable it.
    // INNER/OUTER ANGLE:  Depreciated. Old versions of ANGLE_BEGIN/_END.
    //    Can still be used to make lop-sided angle displays though.
    //==========================
    //  Part-4 - MOVEMENT - How do the particles move once they’re created?
    integer      FOLLOW_SRC = FALSE; // FALSE
    integer FOLLOW_VELOCITY = TRUE; // FALSE
    integer            WIND = FALSE; // FALSE
    integer          BOUNCE = FALSE; // FALSE
    float         SPEED_MIN = 0.01; // 1.00
    float         SPEED_MAX = 0.05; // 1.00
    vector            ACCEL = < 0.00, 0.00, 0.02 >; // < 0.00, 0.00, 0.00 >
    integer      TARGET_POS = FALSE; // FALSE
    key              TARGET = llGetKey(); // llGetKey();
    // FOLLOW_SRC: moves particles when emitter moves. It will disable RADIUS!
    // FOLLOW_VELOCITY:  Particles rotate towards their heading
    // WIND: Sim’s Wind will push particles
    // BOUNCE: Make particles bounce above the Z altitude of emitter
    // SPEED_MIN: 0.01 to ?, slowest speed of new particles, 1.0(*)
    // SPEED_MAX: 0.01 to ?, fastest speed of new particle, 1.0(*)
    //      SPEED_ is ignored for the DROP pattern.
    // ACCEL: a continuous force pushed on particles,
    //             use SMALL settings for long lived particles
    // TARGET_POS: If FALSE(*), TARGET value is ignored.
    // TARGET: Select a target for particles to arrive at when they die
    //      key TARGET = llGetKey(); // particles return to the emitter
    //      key TARGET = llGetOwner(); // particles home in on owner
    //      You can have another object llSay(999,llGetKey);
    //      and grab the key with this object by using the listen()
    //      event handler.
    //=====================
    list particle_parameters = [
            PSYS_PART_FLAGS, (
                (        EMISSIVE * PSYS_PART_EMISSIVE_MASK ) |
                (          BOUNCE * PSYS_PART_BOUNCE_MASK ) |
                (    INTERP_COLOR * PSYS_PART_INTERP_COLOR_MASK ) |
                (    INTERP_SCALE * PSYS_PART_INTERP_SCALE_MASK ) |
                (            WIND * PSYS_PART_WIND_MASK ) |
                (      FOLLOW_SRC * PSYS_PART_FOLLOW_SRC_MASK ) |
                ( FOLLOW_VELOCITY * PSYS_PART_FOLLOW_VELOCITY_MASK ) |
                (      TARGET_POS * PSYS_PART_TARGET_POS_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_SRC_PATTERN,          PATTERN,
            PSYS_SRC_BURST_PART_COUNT, COUNT,
            PSYS_SRC_BURST_RATE,       RATE,
            PSYS_PART_MAX_AGE,         AGE,
            PSYS_SRC_ACCEL,            ACCEL,
            PSYS_SRC_BURST_RADIUS,     RADIUS,
            PSYS_SRC_BURST_SPEED_MIN,  SPEED_MIN,
            PSYS_SRC_BURST_SPEED_MAX,  SPEED_MAX,
            PSYS_SRC_TARGET_KEY,       TARGET,
            PSYS_SRC_ANGLE_BEGIN,      ANGLE_BEGIN,
            PSYS_SRC_ANGLE_END,        ANGLE_END,
            //PSYS_SRC_INNERANGLE,       INNERANGLE,
            //PSYS_SRC_OUTERANGLE,       OUTERANGLE,
            PSYS_SRC_OMEGA,            OMEGA,
            PSYS_SRC_MAX_AGE,          LIFE,
            PSYS_SRC_TEXTURE,          TEXTURE
        ];
    llParticleSystem( particle_parameters ); // Turns on the particle hose!
}
default
{
    state_entry() {
        mySetParticles();
        // llSetTimerEvent(60); // uncomment to set auto-off for 60 seconds
    }
    timer() {
        llSetTimerEvent( 0 )// Turn off the alarm clock
        llSleep(6);
        llParticleSystem( [ ] )// Turn off the particles
        // updateParticles(); // Or use this to update/change the particle
        // system
    }
    touch_start(integer i) {
        mySetParticles(); // touch to reset/turn on the particles
        // llSetTimerEvent(60); // reset the alarm clock
    }
}
April 5th, 2007 at 6:33 am
6 Responses to “LSL Particle Script - Wispy Smoke”
  1. 1
    Koop Says:

    i cant script, but i really want to make particle scripts. this will help me.

  2. 2
    McGroarty Says:

    Thanks much! First hit on Google for “lsl smoke script,” and exactly what the doctor ordered!

  3. 3
    noob Says:

    Boy I really fail at scripting. I’m trying to attach this to my Cig’s tip and get the following when I save it

    (22, 27) : ERROR : Syntax error

    Which is this line

    string TEXTURE = “”; // “”

    Those quotes aren’t standard so finally after racking my brain over this I fixed them.

    The save worked without errors, finally, but after that I don’t get anything. I tried adding a texture but I still don’t see anything… What am I missing?

  4. 4
    sionnach Says:

    string TEXTURE = “place the texture UUID here or the name of a texture that is in the inventory”; // “”

    Give me a shout in-world “Wallace McAllister”

  5. 5
    admin Says:

    Just a quick note, for some reason scripts don’t transfer well between html to in world. Many times it’s the ” character and have often found I need to manually retype this.

    The good thing is LSL will tell you where the error is, so when you get an error just retype each of the ” once the sim is up I will provide this script in world with full perms so that you can get a copy there if you continue having issues.

  6. 6
    admin Says:

    Also this script wasn’t meant to just copy and paste, but to show you how to do it, as well as links to the LSL references.