Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

small bling particle script anomalities in windlight?

Maris Kanto
Registered User
Join date: 4 Dec 2007
Posts: 47
03-05-2008 05:53
Hello guys,

with the latest windlight version ive noticed that my bling script started to work unpredictable. if for my object i turn it on - it starts to bling only when i go to another sim (my sim has scripts allowed) or re-login with my object still worn on me.

maybe the problem is that it is omitted from a tiny prim, and is not one of those big blings (which in windlight by the way do work fine).

so if anyone has experienced same problem or see something wrong in my script - please let me know. thanks.



// Mask Flags - set to TRUE to enable
integer glow = TRUE; // Make the particles glow
integer bounce = FALSE; // Make particles bounce on Z plan of object
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
integer followSource = TRUE; // Particles follow the source
integer followVel = TRUE; // 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_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 to
key target = "";

// Particle paramaters
float age = .2; // Life of each particle
float maxSpeed = .1; // Max speed each particle is spit out at
float minSpeed = .1; // Min speed each particle is spit out at
string texture; // Texture used for particles, default used if blank
float startAlpha = 0.3; // Start alpha (transparency) value
float endAlpha = 0.5; // End alpha (transparency) value
vector 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 = <.04,.25,.01>; // Start size of particles
vector endSize = <.03,.25,.01>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0>; // Force pushed on particles

// System paramaters
float rate = 8; // How fast (rate) to emit particles
float radius = .0; // Radius to emit particles for BURST pattern
integer count = 5; // How many particles to emit per BURST
float outerAngle = 1.54; // Outer angle for all ANGLE patterns
float innerAngle = 1.55; // Inner angle for all ANGLE patterns
vector omega = <0,0,10>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles

// Script variables
integer 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();
}

}
Farallon Greyskin
Cranky Seal
Join date: 22 Jan 2006
Posts: 491
03-05-2008 09:46
Basically, particles in windlight are... borked.

They seem to have done something, maybe on purpose for "efficiencies" sake AGAIN to the particle engine and they are working even worse than before.

I have some sripts with small particle output like a dripping lava or water and they only a particle once in a blue moon. We were playing with it the other day and a single default rezzed cube with a once per second particle burst. Even setting it at 1000 particles, WL would only sputter up 0 to 4 partcals per burst, while in the normal client a giant explosion of particles could be seen :(

Spooting out 4 particles at a fast burst rate (for like smoke or waterfalls) works ok but that isn't the ONLY way particles are used :(

The number of times particles (an /insanely/ important feature of SL) have been ruined at this point is uncountable. Sometimes it takes only days to fix, sometimes weeks or months.

I plan on bringing it up at the WL meeting on thursday is I can be there...

Edit: was just working on an example but.. now it's working!

So it isn't someting simple. Maybe the "running out of paritcles" bug is back. Where it only starts happening after you've been logged in a while...

"Hidden" prims with particle emitters seem to have troubles now. Prims that are not visible (inside other prims) seem to have far worse particle performance (though not zero! Just very rare or spurtery when they should not be) This is a common tactic to get particles emitted from where you want them to be, not the dead center of the visual prim that is doing the effect.

I would hope that any prims with a sound, light or particle effect not be culled at close range just because they are inside another prim :/ They may be visually inacessable but the effect of there presence is not!