Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

ExampleParticleScript?

AzKay Devanter
Registered User
Join date: 10 Aug 2006
Posts: 16
08-24-2006 23:54
Okay, Ive been playing around with this since last night. I just cant seem to make it spread... as in, make the particles go further out. I think its the "radius" But, whatever I change it to, it doesnt make a difference...
CODE

// Particle Script 0.5
// Created by Ama Omega
// 3-26-2004

// Mask Flags - set to TRUE to enable
integer glow = TRUE; // Make the particles glow
integer bounce = FALSE; // Make particles bounce on Z plane of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = TRUE; // 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 = "self";

// Particle paramaters
float age = 1; // 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 = 1; // Start alpha (transparency) value
float endAlpha = 0.1; // End alpha (transparency) value
vector startColor = <0,1,0>; // Start color of particles <R,G,B>
vector endColor = <1,0,0>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <1,1,1>; // Start size of particles
vector endSize = <1,0,1>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0>; // Force pushed on particles

// System paramaters
float rate = 1.5; // How fast (rate) to emit particles
float radius = 1; // Radius to emit particles for BURST pattern
integer count = 1; // 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,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_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
];

llParticleSystem(sys);
}

default
{
state_entry()
{
updateParticles();
}

touch_start(integer num)
{
llWhisper(0,"...Generating List...");
for (i=1;i<42;i+=2)
{
type = llGetListEntryType(sys,i);
if(type == TYPE_FLOAT)
{
tempString = float2String(llList2Float(sys,i));
sys = llDeleteSubList(sys,i,i);
sys = llListInsertList(sys,[tempString],i);
}
else if (type == TYPE_VECTOR)
{
tempVector = llList2Vector(sys,i);
tempString = "<" + float2String(tempVector.x) + ","
+ float2String(tempVector.y) + ","
+ float2String(tempVector.z) + ">";
sys = llDeleteSubList(sys,i,i);
sys = llListInsertList(sys,[tempString],i);
}
else if (type == TYPE_ROTATION)
{
tempRot = llList2Rot(sys,i);
tempString = "<" + float2String(tempRot.x) + ","
+ float2String(tempRot.y) + ","
+ float2String(tempRot.z) + ","
+ float2String(tempRot.s) + ">";
sys = llDeleteSubList(sys,i,i);
sys = llListInsertList(sys,[tempString],i);
}
else if (type == TYPE_STRING || type == TYPE_KEY)
{
tempString = "\"" + llList2String(sys,i) + "\"";
sys = llDeleteSubList(sys,i,i);
sys = llListInsertList(sys,[tempString],i);
}
}
sys = llListSort(sys,2,TRUE);
if (target == "") sys = llDeleteSubList(sys,38,39);
else if (target == llGetKey() )
sys = llListInsertList(llDeleteSubList(sys,39,39),["llGetKey()"],39);
else if (target == llGetOwner() )
sys = llListInsertList(llDeleteSubList(sys,39,39),["llGetOwner()"],39);
if (texture == "") sys = llDeleteSubList(sys,24,25);
if (!interpSize) sys = llDeleteSubList(sys,12,13);
if (!interpColor) sys = llDeleteSubList(sys,6,7);

llWhisper(0,"[" + llList2CSV(llList2List(sys,0,21)) + ",");
llWhisper(0,llList2CSV(llList2List(sys,22,-1)) + "]");
}
}
Kayla Stonecutter
Scripting Oncalupen
Join date: 9 Sep 2005
Posts: 224
08-25-2006 00:44
From: AzKay Devanter
CODE
float age = 1;                  // Life of each particle
I think you want to adjust this variable, so each particle lives longer, and would thus go farther. The age is in seconds, with a max of 30.
_____________________
Eloise Pasteur
Curious Individual
Join date: 14 Jul 2004
Posts: 1,952
08-25-2006 01:01
It's a shameless plug (but it's for a help tutorial that's being tested) but http://eloisepasteur.wordpress.com/learning-about-particles/ might have something to help. If you look, please feel free to comment on it.

The burst_radius should work, things like velocity and the pattern can also affect how it looks. Until you actually call the particle system again it won't update although that shouldn't be a problem with this particular script.

Particles are fun and deeply irritating at the same time - the effects look great when you get them right, but (at least for me) that's a slow and painful process.
_____________________
Eloise's MiniMall
Visit Eloise's Minimall
New, smaller footprint, same great materials.

Check out the new blog
AzKay Devanter
Registered User
Join date: 10 Aug 2006
Posts: 16
08-25-2006 01:01
From: Kayla Stonecutter
I think you want to adjust this variable, so each particle lives longer, and would thus go farther. The age is in seconds, with a max of 30.

Okay, seems, That worked, but its only sending out 1 big particle at one time, How could I make it like "fog" or "smoke"? Just experiment?
AzKay Devanter
Registered User
Join date: 10 Aug 2006
Posts: 16
08-25-2006 01:06
From: Eloise Pasteur
It's a shameless plug (but it's for a help tutorial that's being tested) but http://eloisepasteur.wordpress.com/learning-about-particles/ might have something to help. If you look, please feel free to comment on it.

The burst_radius should work, things like velocity and the pattern can also affect how it looks. Until you actually call the particle system again it won't update although that shouldn't be a problem with this particular script.

Particles are fun and deeply irritating at the same time - the effects look great when you get them right, but (at least for me) that's a slow and painful process.

Ah, Okay, Thanks, I tutorial ^^
Kayla Stonecutter
Scripting Oncalupen
Join date: 9 Sep 2005
Posts: 224
08-25-2006 01:08
No offence, but please read the comments after the variables, such as this one:
integer count = 1; // How many particles to emit per BURST
_____________________
AzKay Devanter
Registered User
Join date: 10 Aug 2006
Posts: 16
08-25-2006 01:33
From: Kayla Stonecutter
No offence, but please read the comments after the variables, such as this one:
integer count = 1; // How many particles to emit per BURST
Okay, ive got it to spread out right, but, it still just shoots out about 10(?) sphere-shaped particles. I want it to look like fog though. so thats not right...
Kayla Stonecutter
Scripting Oncalupen
Join date: 9 Sep 2005
Posts: 224
08-25-2006 01:47
To get it to look like fog, you'll either need to use a TON of small particles, which would be inconsistant depending on alot of factors, or make/get a fog-like texture and use this var with maybe a few dozen particles:

string texture = ""; // Texture used for particles, default used if blank

Right-click the texture in your inventory and click "Copy asset UUID" (you'll need full permissions), then paste that between the quotes to replace the default round particle with the texture. You'll probably also need to play around with the other variables to get it to look like you want, or find one of the particle generator objects that let you adjust the particle settings with buttons to see what changes.

I just skimmed over the link Eloise posted, but it looks like a good way to actually learn the particle system rather than just using trial and error to get it :)

BTW Eloise, is there anyway you could get the text area on that page wider, or is that part of the website? It only takes up about 1/4 of my screen (I have a huge desktop resolution). :P
_____________________
AzKay Devanter
Registered User
Join date: 10 Aug 2006
Posts: 16
08-25-2006 02:25
Thanks ^^, Ill try that. Once again, Great help guys ;).


(( My res is 1280x800 =P )) (( I cant stand people or using the 800x600))