Single float/int: | A single value that is either a float (https://en.wikipedia.org/wiki/Floating-point_arithmetic) (number with decimals) or integer (https://en.wikipedia.org/wiki/Integer) (whole number). They can have various meaning, depending on the attribute. Attributes are: flags (unsigned int32), colors (unsigned int24), blend (int), shaketype (int), numsegments (int), viewoffset (float), looptime (float), randlooptime (float), persistloop (unknown), interval (unknown), plifescale (unknown) |
Range float/int: | A float or integer with a second number of the same format for a random range (see above). They can have various meaning, depending on the attribute. Attributes are: count (int), delay (float), life (float), radius (float), radius2, gravity (float), gravity2, drag (float), drag2, pspawn (float), plife (float), ptravel (float), height (unknown) |
Dimensional: | The values are usually absolute and work in a three-dimensional environment. The format is: geometry vector (https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics)), with a range (X Y Z X Y Z, 2x 3 floats) The values sometimes seem to be added/subtracted, depending on types and/or flags. Attributes are: origin, origin2, velocity, velocity2, acceleration, acceleration2, rotationaxis, orientaxis, transformrotation (?, unknown) |
Chronological: | The values change as the effect progresses. You can make an effect grow and shrink for example. The format is: Quad component (https://discord.com/channels/449510825385000960/459862699870781451/1325194332080181320), with a range. If eight numbers, the last two define the high and low limit. If six numbers, the limit is +/-10000. (Discovered by nikita488) The format is difficult to understand, but it might help to understand it as end-mid-start. End and mid values are usually added/subtracted from the start value. If only the start value is entered and end/mid are 0, the attribute's value will stay constant. The start value is always absolute and the end/mid values are (usually) relative (but sometimes seem to be absolute, depending on types and/or flags). End-mid-start are represented as two vectors of three values (range, see above). Attributes are: rotation, rotationradius (limit not confirmed), size, size2, alpha, uvscale, uvscroll, endarc, startarc, length (Trail), offset (Trail), chaos (unknown), attenuation (limit not confirmed) |
LoopTime = 2.0 ;
> (check Outsider's Guide)
RandLoopTime = 0 ;
> Random additional loop time between 0 and entered number.
> Adds to looptime only. In other words, results in random loop time between number in looptime and randlooptime.
PersistLoop = 0 ;
> No difference. Don't know.
count = 1 1 ;
> adds effects/objects with the exact same values. Especially helpful for effects with attributes of random/range values.
delay = 0 0 ;
> time value, same as LoopTime (so if LoopTime=2 and delay=1 1, the effect shows at halftime)
life = 1 1 ;
> time value, same as LoopTime (so if LoopTime=2 and life=1 1, the effect fades at halftime)
> Considerably higher values than looptime result in the effect increasing in number (on top of each other), the longer it lasts.
viewoffset = 0 ;
> shifts the effect, depending on from what angle you view (camera rotation/zoom)
acceleration = 0 0 0 0 0 0 ;
acceleration2 = 0 0 0 0 0 0 ;
gravity = 20 20 ;
gravity2 = 20 20 ;
velocity = 0 0 0 0 0 0 ;
velocity2 = 0 0 0 0 0 0 ;
drag = 0 0 ;
drag2 = 0 0 ;
> These four values work on most effects only, sometimes with different results.
They move the origin values and they only have a second attribute (e.g. gravity2) if there's an origin2.
Drag always goes together with velocity. (Sets distance limit for velocity.)
Acceleration and velocity work similar, but acceleration starts with speed 0 and ends with the entered speed,
while velocity is a constant value and starts at max speed (entered value). Both are dimensional format.
They add to each other, so they can cancel each other out or create an arc.
Sometimes, acceleration seems to be constrained to a specific direction (unknown what it depends on). I even confused it with chronological format.
primitiveflags = 256 ;
> Can stay 0. Usually has a small influence only.
> MUA effects usually have a high number here, because flags 24-31 are fxlevels (by default off=1, except one level)
> E.g.: Certain flags result in the effect not being affected by the orientation of the character.
shaderflags = 0 ;
> Rarely used.
spawnflags = 0 ;
> Important for effect orientation and respawn on long looptime-effects (when moving).
> E.g.: Turn viewoffset on and off.
radius = 0 0 ;
radius2 = 0 0 ;
> Used in particle clouds. AFAIK the only type that uses these. I still don't know if radius2 is used in particle clouds at all.
rotationaxis = 0 0 0 0 0 0 ;
> Used in model and sprite/orientet sprite effects. Generally effects that can be oriented.
acceleration = 0 0 0 0 0 0 ;
gravity = 0 0 ;
velocity = 0 0 0 0 0 0 ;
drag = 0 0 ;
> They work in MOST effect types, but not all, while they're present in all types.
define the form:
numsegments = 0 ;
> sets the form of the top and bottom. 0 removes it and gives a circle. 4 makes 4 corners = square. 5 = pentagon, etc.
> If an arc is given, the segments/corners stay the same in numbers, but two corners are used for each end.
E.g.: A 90° arc with numsegment=3 makes a quarter of an octagon.
> I will continue this example with a circle/cylinder form.
sectioning circle (slicing the cake):
startarc = 0 0 5 0 0 5 ;
endarc = 0 0 6 0 0 6 ;
> Chronological format
> Example gives approx. 9° arc, facing slightly to the right where hero faces (0 would be front)
6.283 (2x Pi) equals 360°, full circle
> removing results in full circle, 0 0 0 0 0 0 values in both gives 0 size section (no effect)
uvscale = 0 0 5 0 0 5 ;
> Chronological format
> 3 creates 3 slices of the section defined by start- and endarc
(actually divides the canvas for the texture, rather than the cylinder itself)
change height of cylinder:
origin = 0 0 100 0 0 100 ;
> approx. 1m, top
origin2 = 0 0 10 0 0 10 ;
> approx. 0.1m, bottom (lower value is bottom > if origin2 is top [higher value] size2 is top too, note: inverting top and bottom inverts everything else too: front becomes back, left becomes right)
> 1m - 0.1m = 0.9m height, 0.1m above ground/bolton (approximately)
change radius of circle:
size = 0 0 100 0 0 100 ;
> approx. 2m radius, top (if origin2 Z is lower)
size2 = 0 0 100 0 0 100 ;
> approx. 2m radius, bottom (if origin2 Z is lower)
> Chronological format (growth/shrink)
E.g. create pulsing form:
size = -5 5 50 -5 5 50 ;
size2 = -5 5 50 -5 5 50 ;
rotate cylinder (static):
origin = 50 0 100 50 0 100 ;
origin2 = 0 0 100 0 0 100 ;
> Dimensional format (check Outsider's Guide)
> Change the X and Y values of the top or bottom (origin or origin2) to rotate the cylinder.
> Origin2 is relative to origin. It is possible that it can be changed to absolute with flags.
> Only changing the X and Y values of both the top AND bottom (origin and origin2), changes the actual origin/position.
turn, tilt, etc. cylinder:
rotation = 0 0 50 0 0 50 ;
> Chronological format
> Speed value: approx. 30 > full circle rotation (in a 1.0 loop-time-frame)
> Very high values skip some frames.
rotationradius = 0 0 0 0 0 0 ;
> Chronological format
> Slides away from origin, in the direction of the current rotation direction.
rotate texture (canvas):
uvscroll = 0 0 1 0 0 1 ;
> Chronological format
> Speed value: 6.283 makes about 1 rotation (in a 2.0 loop-time-frame) (negative values invert the rotation direction)
> The first value (Z) seems to have no effect. Otherwise is the same as rotation. Moves texture only but the effect is the same.
move cylinder:
acceleration = 0 0 0 0 0 0 ;
> top or bottom circle, according to origin.
acceleration2 = 0 0 0 0 0 0 ;
> Chronological format
> Seemingly moves into x direction (only) - see "Common Attributes"
gravity = 20 20 ;
gravity2 = 20 20 ;
> positive values make cylinder lighter, moving it up in Z direction (doesn't matter how cylinder is rotated).
velocity = 0 0 0 0 0 0 ;
> moves origin
velocity2 = 0 0 0 0 0 0 ;
> moves origin2
> Dimensional format (speed)
> Note: Turning with velocity doesn't work with a segmented cylinder.
This doesn't move, but stretch the cylinder.
drag = 0 0 ;
drag2 = 0 0 ;
> Tell the velocity entries how far to travel. Value 0 seems to make it infinite.
XMLB Effect {
LoopTime = 2.0 ;
RandLoopTime = 0 ;
PersistLoop = 0 ;
Cylinder {
acceleration = 0 0 0 0 0 0 ;
acceleration2 = 0 0 0 0 0 0 ;
alpha = -4 4 0 -4 4 0 ;
blend = additive ;
count = 1 1 ;
delay = 0 0 ;
drag = 0 0 ;
drag2 = 0 0 ;
endarc = 0 0 1 0 0 1 ;
endcolor1 = 13238343 ;
endcolor2 = 13238343 ;
gravity = 0 0 ;
gravity2 = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 3 3 ;
midcolor1 = 16744576 ;
midcolor2 = 16744576 ;
name = circle1 ;
numsegments = 1 ;
origin = 0 0 90 0 0 90 ;
origin2 = 0 0 15 0 0 15 ;
primitiveflags = 0 ;
radius = 0 0 ;
radius2 = 0 0 ;
rotation = 0 0 0 0 0 0 ;
rotationaxis = 0 0 0 0 0 0 ;
rotationradius = 0 0 0 0 0 0 ;
shaderflags = 0 ;
size = 0 0 50 0 0 50 ;
size2 = 0 0 50 0 0 50 ;
spawnflags = 256 ;
startarc = 0 0 -1 0 0 -1 ;
startcolor1 = 16744576 ;
startcolor2 = 16744576 ;
texture = textures/?.png ;
uvscale = 0 0 1 0 0 1 ;
uvscroll = 0 0 0 0 0 0 ;
velocity = 0 0 0 0 0 0 ;
velocity2 = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
light value:
attenuation = -200 100 100 -200 100 100 ;
> Chronological format.
> positive values strengthen the light, negative values dim it.
> attenuation (and usually plat) have to be set for the effect to be visible.
size:
size = 0 0 140 0 0 140 ;
> Has little to no effect. Use light values to change the effects influence.
> Chronological format.
position:
origin = 0 0 100 0 0 100 ;
acceleration = 0 0 0 0 0 0 ;
gravity = 20 20 ;
velocity = 0 0 0 0 0 0 ;
drag = 0 0 ;
> These values have little to no effect. For a light to move, it has to be attached to a moving object.
more:
texture = textures/nextgen/distort_mask1.png ;
> textures are barely visible and make little difference in a light effect.
primitiveflags = 4211081216 ;
primitiveflags2 = 33620224 ;
> These flags remove all reflections on the walls and the floor.
More examples for primitiveflags might follow.XMLB Effect {
looptime = 1 ;
randlooptime = 0 ;
Light {
acceleration = 0 0 0 0 0 0 ;
alpha = -4 4 0 -4 4 0 ;
attenuation = -200 100 100 -200 100 100 ;
blend = alpha ;
count = 2 2 ;
delay = 0 0 ;
drag = 0 0 ;
endcolor1 = 13238343 ;
endcolor2 = 13238343 ;
gravity = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 1 1 ;
midcolor1 = 16744576 ;
midcolor2 = 16744576 ;
name = hd_light ;
origin = 0 0 30 0 0 30 ;
plat = 40 ;
primitiveflags = 0 ;
primitiveflags2 = 0 ;
radius = 0 0 ;
radius2 = 0 0 ;
shaderflags = 0 ;
size = 0 -1 2 0 -1 2 ;
spawnflags = 1073741824 ;
startcolor1 = 16744576 ;
startcolor2 = 16744576 ;
texture = textures/nextgen/distort_mask1.png ;
velocity = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
change width, create canvas (as opposed to line):
size = 0 0 140 0 0 140 ;
> approx. 2m wide
> Chronological format.
change line length / canvas height:
origin = 0 0 100 0 0 100 ;
origin2 = 0 0 0 0 0 0 ;
> approx. 2m high (long), lower value is bottom.
Note: Inverting top and bottom inverts everything else too: front becomes back, left becomes right.
rotate canvas (static):
origin = 0 0 100 0 0 100 ;
origin2 = 0 0 10 0 0 10 ;
> Dimensional format (check Outsider's Guide).
> Change the x and y values of the top or bottom (origin or origin2) to rotate the canvas.
> Changing the x and y values of both the top AND bottom (origin and origin2), changes the actual origin/position.
move texture (canvas):
uvscroll = 0 0 1 0 0 1 ;
> Chronological format.
> Moves the texture from bottom to top (as defined by origin, with positive values) first value seems to have no effect.
shift/move:
acceleration = 0 0 0 0 0 0 ;
acceleration2 = 0 0 0 0 0 0 ;
> Moves top and bottom, according to origin entry.
> Dimensional format (speed)
velocity = 0 0 0 0 0 0 ;
velocity2 = 0 0 0 0 0 0 ;
> Does the same as acceleration, but seemingly slower (constant speed instead of accel.).
> Dimensional format (speed)
> Note: This doesn't move/shift/rotate, but stretch the canvas.
drag = 0 0 ;
drag2 = 0 0 ;
> Tell the velocity entries how far to travel. Value 0 seems to make it infinite.
gravity = 20 20 ;
gravity2 = 20 20 ;
> Positive values make canvas lighter, moving it up in Z direction (doesn't matter how positioned).
divide canvas:
uvscale = 0 0 5 0 0 5 ;
> Chronological format.
> Divides the canvas into 5 sections, all full width and from bottom to top (as defined by origin).
XMLB Effect {
LoopTime = 2.0 ;
RandLoopTime = 0 ;
PersistLoop = 0 ;
Line {
acceleration = 0 0 0 0 0 0 ;
acceleration2 = 0 0 0 0 0 0 ;
alpha = 0 3 0 0 3 0 ;
blend = additive ;
count = 1 1 ;
delay = 0 0 ;
drag = 0 0 ;
drag2 = 0 0 ;
endcolor1 = 13238343 ;
endcolor2 = 13238343 ;
gravity = 0 0 ;
gravity2 = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 2.5 2.5 ;
midcolor1 = 16744576 ;
midcolor2 = 16744576 ;
name = circle1 ;
origin = 0 0 70 0 0 70 ;
origin2 = 0 0 170 0 0 170 ;
primitiveflags = 256 ;
radius = 0 0 ;
radius2 = 0 0 ;
size = 0 0 140 0 0 140 ;
spawnflags = 0 ;
startcolor1 = 16744576 ;
startcolor2 = 16744576 ;
texture = textures/?.png ;
uvscale = 0 0 1 0 0 1 ;
uvscroll = 0 0 0 0 0 0 ;
velocity = 0 0 0 0 0 0 ;
velocity2 = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
form of the model:
modelname = models/bolton/book.igb ;
> The only way to give a form to this effect is by the model. There's no way to morph it, only to resize.
> Notes: Many igb-files work for this, but not all.
The ones that work best are located in models/effects folders.
Any path will work though.
changing size and position:
size = 0 0 100 0 0 100 ;
> Chronological format
> Value 1 is the original size.
orientaxis = 1 0 0 1 0 0 ;
> MUA only.
> Dimensional format
> Positions the effect in relation to the current position of the character or bolton.
> X is front (negative is back), y is right (neg. left), z is up (neg. down).
> No specific distance needed (any value works).
orient = up ;
> XML2 only. Same function as orientaxis, but no in-between orientation.
> valid: up, forward. (presumably also down, right, left)
move, rotate:
rotation = 5 0 0 5 0 0 ;
> Chronological format. I think the values set the speed, rather than the distance.
> Only works if rotationaxis is given (something else than 0 0 0 0 0 0).
rotationaxis = 0 1 0 0 1 0 ;
> Dimensional format
> Sets an axis for rotation. No specific distance needed (any value works).
The axis exists in a 3-dimensional environment...
> Note: The X Y Z directions might depend on how the character is positioned, especially when it's used on a bolton.
rotationradius = 0 0 0 0 0 0 ;
> Chronological format
> Sets an offset to the axis, making the model's origin rotate around the axis, too.
acceleration = 0 0 0 0 0 0 ;
> Dimensional format (speed)
> Moves origin into (X) direction. - see "Common Attributes"
gravity = 20 20 ;
> Positive values make model lighter, moving it up in Z direction.
velocity = 0 0 0 0 0 0 ;
> Dimensional format.
> Moves origin like acceleration (in any direction).
drag = 0 0 ;
> Tells the velocity entry how far to travel. Value 0 seems to make it infinite.
XMLB Effect {
looptime = 1 ;
randlooptime = 0 ;
Model {
acceleration = 0 0 0 0 0 0 ;
alpha = -2 2 0 -2 2 0 ;
count = 1 1 ;
delay = 0 0 ;
drag = 0 0 ;
endcolor1 = 13238343 ;
endcolor2 = 13238343 ;
gravity = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 1 1 ;
midcolor1 = 16744576 ;
midcolor2 = 16744576 ;
modelname = models/bolton/book.igb ;
name = 1_victim_bubble ;
orientaxis = 1 0 0 1 0 0 ;
origin = 30 0 0 30 0 0 ;
primitiveflags = 4261675008 ;
primitiveflags2 = 33563072 ;
radius = 0 0 ;
radius2 = 0 0 ;
rotation = 0 0 0 0 0 0 ;
rotationaxis = 0 0 0 0 0 0 ;
rotationradius = 0 0 0 0 0 0 ;
size = 0 0 10 0 0 10 ;
spawnflags = 0 ;
startcolor1 = 16744576 ;
startcolor2 = 16744576 ;
velocity = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
change cloud size:
radius = 100 100 ;
> Sets the cloud size given through a radius around the origin (sphere, 3-dimensional).
> Particles will generate only on the outermost distance (sphere's shell). There is no difference when changing radius2.
change particle size:
size = 0 0 100 0 0 100 ;
> Chronological format (growth/shrink).
particle modifications:
numsegments = 0 ;
> This doesn't change the cloud form (it will always be a sphere), but with less segments, there are less particles spawning.
> Less than (10) results in less particles, from 1000 the values result in significantly more particles.
> Note: To add more particles, you can also increase the count value (there you can set a range too).
acceleration = 0 0 0 0 0 0 ;
> Dimensional format (speed)
> Moves particles into (x) direction. - see "Common Attributes"
gravity = 100 100 ;
> No influence.
velocity = 0 0 0 0 0 0 ;
> Dimensional format.
> Moves the particles.
drag = 0 0 ;
> Tells the velocity entry how far to travel. Value 0 seems to make it infinite.
pspawn = 0 0 ;
> Controls how frequently particles spawn.
> Seems to depend on the 'life' (cloud's life) value.
plife = 1 ;
> The particles' spawn duration. Same as life, but life is for the cloud and plife is for the particles.
> A bigger value than life (cloud's life) means a more intense particle effect.
ptravel = 100 100 ;
> Lets the particles travel vertically.
> Like gravity for cloud, but on each particle.
> Example: Fire from '1 1' to '2 2' makes the flames travel up faster and all the way up, like a more intense fire (thanks to SuperMaster10 for the example)
> Value 0 0 stops vertical travel and negative values make it travel down (assumingly).
rotation = 0 0 50 0 0 50 ;
> Chronological format.
> This rotates the particles and not the cloud or the particles around the cloud.
cloud modifications:
acceleration2 = 0 0 0 0 0 0 ;
> Dimensional format (speed)
> Moves cloud/sphere into (X) direction. - see "Common Attributes"
gravity2 = 100 100 ;
> Makes the particles float upwards.
velocity2 = 0 0 0 0 0 0 ;
> Dimensional format (speed)
> Moves cloud/sphere.
drag2 = 0 0 ;
> Tells the velocity entry how far to travel. Value 0 seems to make it infinite.
origin = 0 0 100 0 0 100 ;
> Dimensional format (check Outsider's Guide).
> Set the centre of the cloud.
XMLB Effect {
looptime = 1 ;
randlooptime = 0 ;
ParticleCloud {
acceleration = 0 0 0 0 0 0 ;
acceleration2 = 0 0 0 0 0 0 ;
alpha = -4 4 0 -4 4 0 ;
blend = alphaadditive ;
count = 1 1 ;
delay = 0 0 ;
drag = 0 0 ;
drag2 = 0 0 ;
endcolor1 = 13238343 ;
endcolor2 = 13238343 ;
gravity2 = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 5 1 ;
midcolor1 = 16744576 ;
midcolor2 = 16744576 ;
name = circle1 ;
numsegments = 1000 ;
origin = 0 0 0 0 0 0 ;
plife = 1 ;
primitiveflags = 0 ;
primitiveflags2 = 0 ;
pspawn = 0 0 ;
ptravel = 100 100 ;
radius = 50 50 ;
rotation = 0 0 0 0 0 0 ;
size = -20 30 5 -20 30 5 ;
spawnflags = 1090519169 ;
startcolor1 = 16744576 ;
startcolor2 = 16744576 ;
texture = textures/?.png ;
transformrotation = 0 0 0 0 0 0 ;
velocity = 0 0 0 0 0 0 ;
velocity2 = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
position effect (OrientedSprite only):
orientaxis = 1 0 0 1 0 0 ;
> MUA only.
> Dimensional format
> Positions the effect in relation to the current position of the character or bolton.
> X is front (negative is back), y is right (neg. left), z is up (neg. down).
> No specific distance needed (any value works).
orient = up ;
> XML2 only. Same function as orientaxis, but no in-between orientation.
> valid: up, forward. (presumably also down, right, left)
scale effect (texture), keeps aspect ratio:
size = 0 0 100 0 0 100 ;
> Approx. 2m wide and high.
> Chronological format
rotate effect:
rotation = 5 0 0 5 0 0 ;
> Chronological format. I think the values set the speed, rather than the distance.
> Only works if rotationaxis is given (something else than 0 0 0 0 0 0).
rotationaxis = 0 1 0 0 1 0 ;
> Sets an axis for rotation in dimensional format.
> No specific distance needed (any value works), the axis exists in a 3-dimensional environment...
> Note: The X Y Z directions might depend on how the character is positioned,
especially when it's used on a bolton.
rotationradius = 0 0 0 0 0 0 ;
> Chronological format
> Sets an offset to the axis, making the texture's origin rotate around the axis, too.
shift/move:
acceleration = 0 0 0 0 0 0 ;
> Moves object's origin.
> Dimensional format (speed)
> I believe, the axis moves with it. Together with rotationradis, some pretty interesting effects can be created.
velocity = 0 0 0 0 0 0 ;
> Does the same as acceleration (with constant speed).
> Dimensional format (speed)
drag = 0 0 ;
> Tells the velocity entry how far to travel. Value 0 seems to make it infinite.
gravity = 20 20 ;
> Positive values make it lighter, moving it up in Z direction.
XMLB Effect {
LoopTime = 5.0 ;
RandLoopTime = 0 ;
OrientedSprite {
acceleration = 0 0 0 0 0 0 ;
alpha = -4 4 0 -4 4 0 ;
blend = additive ;
count = 1 1 ;
delay = 0 0 ;
drag = 0 0 ;
endcolor1 = 13238343 ;
endcolor2 = 13238343 ;
gravity = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 6 6 ;
midcolor1 = 16744576 ;
midcolor2 = 16744576 ;
name = circle1 ;
orientaxis = 1 0 0 1 0 0 ;
origin = 15 0 50 15 0 50 ;
primitiveflags = 256 ;
radius = 0 0 ;
radius2 = 0 0 ;
rotation = -0.5 4 0 -0.5 4 0 ;
rotationaxis = 1 0 0 1 0 0 ;
rotationradius = 0 0 0 0 0 0 ;
size = -5 5 80 -5 5 80 ;
spawnflags = 0 ;
startcolor1 = 16744576 ;
startcolor2 = 16744576 ;
texture = textures/?.png ;
velocity = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
change size of effect:
size = 0 0 100 0 0 100 ;
> Chronological format
length = 0 0 5 0 0 5 ;
> Chronological format
> Each of the three numbers creates a slightly different effect.
> Depends much on the movement involved. If the trail is on an object with little movement, long trails won't show.
> Small trails on big objects with little movent create a moving texture with a hardly visible trail.
> Size and length have to be set for the effect to show.
create movement inside the effect:
spawnflags = 3238002688 ;
spawnflags = 1944000000 ;
> The trail effect usually doesn't work without a high spawnflag number
more movement:
acceleration = 0 0 0 0 0 0 ;
> Moves origin.
> Dimensional format (speed)
velocity = 0 0 0 0 0 0 ;
> Does the same as acceleration, but seemingly slower (constant speed instead of accel.).
> Dimensional format (speed)
> If you want to reverse the movement in a trail effect, making velocity (or acceleration) values negative might be the way. Thanks Ninja Kyden
drag = 0 0 ;
> Tells the velocity entry how far to travel. Value 0 seems to make it infinite.
gravity = 20 20 ;
> positive values make it lighter, moving it up in Z direction.
rotation = 0 0 50 0 0 50 ;
> Chronological format
> Rotates effect/texture. Can't set an axis, rotation depends on orientation, given by the object the effect is attached to.
rotationradius = 0 0 0 0 0 0 ;
> Chronological format
> Moves away from origin, in the direction of the current rotation direction.
multiple textures:
uvscale = 0 0 5 0 0 5 ;
> Chronological format
> Divides the texture in the effect into multiple smaller ones.
more:
offset = 0 0 1000 0 0 1000 ;
> Chronological format
> Moves the origin. The longer the effect lasts, the more it moves.
XMLB Effect {
looptime = 1 ;
randlooptime = 0 ;
Trail {
acceleration = 0 0 0 0 0 0 ;
alpha = -2 1 1 -2 1 1 ;
blend = additive ;
count = 1 1 ;
delay = 0 0 ;
drag = 0 0 ;
endcolor1 = 49151 ;
endcolor2 = 49151 ;
gravity = 0 0 ;
height = 0 0 ;
interval = 0 ;
length = 0 0 5 0 0 5 ;
life = 0.85 0.85 ;
midcolor1 = 49151 ;
midcolor2 = 49151 ;
name = hand_trail ;
offset = 0 0 0 0 0 0 ;
origin = 0 0 0 0 0 0 ;
primitiveflags = 4261675264 ;
primitiveflags2 = 0 ;
radius = 0 0 ;
radius2 = 0 0 ;
rotation = 0 0 0 0 0 0 ;
rotationradius = 0 0 0 0 0 0 ;
shaderflags = 0 ;
size = 0 0 8 0 0 8 ;
spawnflags = 3238002688 ;
startcolor1 = 49151 ;
startcolor2 = 49151 ;
texture = textures/speed4.png ;
uvscale = 0 0 -1 0 0 -1 ;
velocity = 0 0 0 0 0 0 ;
viewoffset = 0 ;
}
}
Choose effect:
deathfxfile = effects/char/iceman/special_blockin ;
> Most values are taken from this effect, but some are added or changed by this effect.
Multiple effects:
count = 2 3 ;
> You can set how many effects should appear simultaneously. Can randomize.
> The second number always added to the first in my tests, i.e. "2 3" actually means 2 to 5.
randlooptime = 1 ;
delay = 0 1 ;
> Both can randomize each effect timing, making this rain-like.
Timing:
looptime = 1 ;
> life seems not to work in this. Probably takes the life of the target (deathfxfile) effect file. Change looptime instead.
> To turn off the effect early, set the life in the target effect file.
Spread:
radius = 0 0 ;
radius2 = 0 0 ;
> the two values set the boundaries that the effect will be spread around the origin.
If both are used, the smaller values set the inner circle (will not spread between origin and inner circle).
> Spawnflag 5 (0000 0100 0000 0000 0000 0000 0000 0000 = 32) needs to be enabled.
Movement:
drag = 0 0 ;
velocity = 0 0 0 0 0 0 ;
> Instead of moving, it rotates each effect. 1 velocity rotates by 90°. Adjust drag to increase angle.
> Dimensional format.
> Might have a different effect if velocity is set in the target effect file as well.
acceleration = 0 0 0 0 0 0 ;
gravity = 0 0 ;
> both seem not to work.
> Might have a different effect if the values are set in the target effect file as well.
XMLB Effect {
looptime = 1 ;
randlooptime = 0 ;
Empty {
acceleration = 0 0 0 0 0 0 ;
count = 8 10 ;
deathfxfile = effects/char/storm/p6_projectile ;
delay = 0 2 ;
drag = 0 0 ;
gravity = 0 0 ;
height = 0 0 ;
interval = 0 ;
life = 0 0 ;
name = name ;
orient = forward ;
origin = 0 0 130 0 0 130 ;
primitiveflags = 4096 ;
radius = 50 100 ;
radius2 = 50 100 ;
spawnflags = 65577 ;
velocity = 0 0 0 0 0 0 ;
}
}
PersistLoop = 0 ;
> My tests so far have found no difference when changing this number.
height = 0 0 ;
interval = 0 ;
> I haven't found any effect that makes use of these two attributes yet. Anyone knows what they're here for?
> Height seems to be used in some particle clouds with the same values as radius.