PSYS Template

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

PSYS Template

KBcaution.png Important: You might want to use llLinkParticleSystem instead of llParticleSystem dependant upon the desired effects.

--BETLOG Hax SLT: July 9th 2009

All of the flags for making particles in a script with important inter-relationship comments only.
(declaring a bunch of variables instead of just learning to read the actual flag names is stupid)

integer hasParticleEffect = TRUE;

list particle_effects()
{
    return
        [PSYS_PART_FLAGS, ( 0
            | PSYS_PART_INTERP_COLOR_MASK
            | PSYS_PART_INTERP_SCALE_MASK
            | PSYS_PART_EMISSIVE_MASK
//          | PSYS_PART_WIND_MASK
//          | PSYS_PART_BOUNCE_MASK
//          | PSYS_PART_FOLLOW_SRC_MASK   //disables BURST_RADIUS
//          | PSYS_PART_FOLLOW_VELOCITY_MASK
//          | PSYS_PART_TARGET_POS_MASK   //target TARGET_KEY
//          | PSYS_PART_TARGET_LINEAR_MASK    //requires TARGET_KEY disables ACCEL, BURST_RADIUS
            ),
        PSYS_PART_START_COLOR,      <1.0, 0.5, 0.0>,
        PSYS_PART_START_ALPHA,      1.0,
        PSYS_PART_END_COLOR,        <0.3, 0.0, 0.0>,
        PSYS_PART_END_ALPHA,        0.0,
        PSYS_PART_START_SCALE,      <0.5, 0.5, 0>,
        PSYS_PART_END_SCALE,        <0.5, 0.5, 0>,
        PSYS_PART_MAX_AGE,          1.0,
        PSYS_SRC_ACCEL,             ZERO_VECTOR,
        PSYS_SRC_PATTERN,           8,
//              DROP (1), EXPLODE (2), ANGLE (4), ANGLE_CONE (8), ANGLE_CONE_EMPTY (10)
//              1 - disables BURST_RADIUS, BURST_SPEED_MIN, BURST_SPEED_MAX
//              4/8/10 - requires ANGLE_BEGIN, ANGLE_END
        PSYS_SRC_TEXTURE,           "",
        PSYS_SRC_BURST_RATE,        0.05,
        PSYS_SRC_BURST_PART_COUNT,  4,
        PSYS_SRC_BURST_RADIUS,      1.0,
        PSYS_SRC_BURST_SPEED_MIN,   0.0,
        PSYS_SRC_BURST_SPEED_MAX,   0.1,
        PSYS_SRC_MAX_AGE,           0.0,
        PSYS_SRC_TARGET_KEY,        NULL_KEY,
        PSYS_SRC_OMEGA,             ZERO_VECTOR,
        PSYS_SRC_ANGLE_BEGIN,       0.5,
        PSYS_SRC_ANGLE_END,         0.5];
}

toggle_particles()
{
    hasParticleEffect = !hasParticleEffect;

    if (hasParticleEffect)
//  {
        llParticleSystem( particle_effects() );
//  }
    else
//  {
        llParticleSystem([]);
//  }
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    state_entry()
    {
        toggle_particles();
    }

    touch_start(integer num_detected)
    {
        toggle_particles();
    }
}