//start_unprocessed_text /*mySetParticles() { /|/ Part-1 - APPEARANCE - Settings for how each particle LOOKS vector START_SCALE = < 0.1, 0.1, 0.1 >; /|/ < 1.0, 1.0, 0.0 > vector END_SCALE = < 0.1, 0.1, 0.1 >; /|/ < 1.0, 1.0, 0.0 > vector START_COLOR = < 1.0, 1.0, 0.0 >; /|/ < 1.0, 1.0, 1.0 > vector END_COLOR = < 1.0, 1.0, 0.0 >; /|/ < 1.0, 1.0, 1.0 > float START_ALPHA = 1.0; /|/ 1.00 float END_ALPHA = 1.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, 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 = 2.00; /|/ 10.00 float RATE = 0.5; /|/ 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_EXPLODE; /|/ PSYS_SRC_PATTERN_DROP float RADIUS = 1.00; /|/ 0.00 float ANGLE_BEGIN = 0.10; /|/ 0.00 float ANGLE_END = 0.10; /|/ 0.00 vector OMEGA = < 0.00, 0.00, 1.00 >; /|/ < 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 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 = TRUE; /|/ FALSE integer FOLLOW_VELOCITY = TRUE; /|/ FALSE integer WIND = TRUE; /|/ FALSE integer BOUNCE = FALSE; /|/ FALSE float SPEED_MIN = 1.00; /|/ 1.00 float SPEED_MAX = 2.20; /|/ 1.00 vector ACCEL = < 0.00, 0.00, 0.00 >; /|/ < 0.00, 0.00, 0.00 > integer TARGET_POS = TRUE; /|/ 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! if ( (AGE/RATE)*COUNT > 4096) { llOwnerSay( "Your emitter creates too many particles!" + "Please decrease AGE and COUNT and/or increase RATE." + "Give a hoot, don't pollute!"); } else { llOwnerSay( "This emitter produces " + (string)((integer)((AGE/RATE)*COUNT)) + " concurrent particles." ); } } default { state_entry() { mySetParticles(); /|/ llSetTimerEvent(60); /|/ uncomment to set auto-off for 60 seconds } timer() { llSetTimerEvent( 0 ); /|/ Turn off the alarm clock llParticleSystem( [ ] ); /|/ Turn off the particles /|/ updateParticles(); /|/ Or use this to update/change the particle /|/ system } touch(integer i) { mySetParticles(); /|/ touch to reset/turn on the particles /|/ llSetTimerEvent(60); /|/ reset the alarm clock } }*/ //end_unprocessed_text //nfo_preprocessor_version 0 //program_version Emerald Viewer //mono mySetParticles() { vector START_SCALE = < 0.1, 0.1, 0.1 >; vector END_SCALE = < 0.1, 0.1, 0.1 >; vector START_COLOR = < 1.0, 1.0, 0.0 >; vector END_COLOR = < 1.0, 1.0, 0.0 >; float START_ALPHA = 1.0; float END_ALPHA = 1.0; integer INTERP_COLOR = TRUE; integer INTERP_SCALE = TRUE; integer EMISSIVE = TRUE; string TEXTURE = ""; float AGE = 2.00; float RATE = 0.5; integer COUNT = 1; float LIFE = 0.0; integer PATTERN = PSYS_SRC_PATTERN_EXPLODE; float RADIUS = 1.00; float ANGLE_BEGIN = 0.10; float ANGLE_END = 0.10; vector OMEGA = < 0.00, 0.00, 1.00 >; integer FOLLOW_SRC = TRUE; integer FOLLOW_VELOCITY = TRUE; integer WIND = TRUE; integer BOUNCE = FALSE; float SPEED_MIN = 1.00; float SPEED_MAX = 2.20; vector ACCEL = < 0.00, 0.00, 0.00 >; integer TARGET_POS = TRUE; key TARGET = llGetKey(); 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_OMEGA, OMEGA, PSYS_SRC_MAX_AGE, LIFE, PSYS_SRC_TEXTURE, TEXTURE ]; llParticleSystem( particle_parameters ); if ( (AGE/RATE)*COUNT > 4096) { llOwnerSay( "Your emitter creates too many particles!" + "Please decrease AGE and COUNT and/or increase RATE." + "Give a hoot, don't pollute!"); } else { llOwnerSay( "This emitter produces " + (string)((integer)((AGE/RATE)*COUNT)) + " concurrent particles." ); } } default { state_entry() { mySetParticles(); } timer() { llSetTimerEvent( 0 ); llParticleSystem( [ ] ); } touch(integer i) { mySetParticles(); } }