<strand>

This tag is optional in a ball.
However without it the ball cannot create strands with other balls, even if the ball's strands attribute is set.

type : 'spring' or 'rope' or 'rigid' : Required
This specifies what "real world" object the strand acts like.
Set to spring it will act like a spring and will resist being stretched or compressed.
Set to rope it will resist being stretched, but will simply collapse if compressed
Most of the original strands are set to spring, only Balloons, Pilot and Water are set to rope
NB: rigid type is valid, however so far it does not appear to function correctly, the strands are not rigid at all. If you want to experiment with 'rigid' strands you must also set the mass attribute.
image : {Image Resource} : Required
The image of the strand
inactiveimage : {Image Resource} : Required
The image used to show where the new strands will be added
minlen : Float : Default = 0
This is the minimum "natural" length of a strand.
If the new strand is shorter than this length when it is created the strand will expand to reach this minimum length.
The original balls use a value approx. 1/2 of maxlen1
NB: Must be LESS than both maxlen attributes... otherwise errors occur in the game.
maxlen2 : Float : Default = 0 (No strands can be created)
The maximum length of a new strand between the ball being "dragged" and another attached ball.
Strands can be created "slightly" longer but they will shrink down over a few seconds. (see also shrinklen)
maxlen1 : Float : Default = 0 (Ball-Ball strands cannot be created)
The maximum length of a new strand which connects two balls that are both already attached.
ie. where a new strand is made between two balls, but the ball you were holding "disappears".
The Original balls had values of approx. 0.7 * maxlen2. Values substantially different to this will cause "unfamiliar" building behaviour, but that's not necessarily a bad thing.
shrinklen : Float : Default = 140
Once the strand is connected will attempt to shrink to this length.
If this value is set to less than minlen the strands will shrink, but will not go shorter than minlen
Used "noticably" on Pokey balls
thickness : Float : Default = {1/2 Ball Size}
This can be used to limit or reduce the thickness of the displayed strand image.
Setting a large value will not increase the thickness of the strand beyond about 1/2 the size of the ball, as set by the shape attribute.
The actual thickness of the strand also depends on the size and type of the ball it is connecting to.
springconstmax and springconstmin : Float : Range 0 to about 20
Defines the spring constant of the strand. The original balls used values around (6-10).
Low values (1 to 5) produce weak and wobbly strands.
High Values (11-20) produce very strong solid strands.
Values above 20 cause the "Shaking Bug" to occur, even with only a few balls attached.
The operation of these values is quite complex and can produce "unexpected" behaviour. The original balls used the same value for both min and max, it is highly recommended that you do the same.
* See Note below for a full description how these attributes actually function.
walkable : true / false : Default = True
Determines if balls can climb along the strands and will "land" on them when dropped or thrown.
dampfac : Float : Default = 0
Dampening Factor that applies to the strand's length.
Set to low values (<0.1) strands will continue to wobble for a long time after they are attached or hit by a flying ball.
Set to high values (>0.7) this wooble is reduce very quickly.
Most original balls used values around 0.9 Balloons used 0.002
maxforce : Float : Default = 0 (Strands almost always break immediately)
This sets the maximum force a strand can provide before it breaks.
If the force on the strand rises above this value then the strand will begin to stretch very easily and quickly.
If the force remains above this value for 1 second, the strand will break.
Most original balls were set to 600 or 800, Balloons are 200, Ivy's 300
burnspeed : Float : Default = 0 (No Burn)
Sets the speed at which the strand burns along its length.
If set to a low value (<1) then the strand burns slowly. When the ball that started them burning explodes the strands disappear. If that happens before the fire reaches the other end of the strand the next ball will not light.
ignitedelay : Float : Default = 0
The delay (in seconds) between the ball catching fire, and the strand beginning to burn.
NB: Must be less than burntime of the ball.
burntimage : {Image Resource} : Default {Strand Image}
As the strand burns its image is replace by this image.
If omitted the normal strand image is used, and the strand does not change appearance as it burns.
fireparticles : {Point-Source Particle Effect} : Required
Specifies the particle effect to use as the strand burns.
NB: If omitted the strand will NOT burn
rope : true / false : Unused / Unknown
Set true on water (but not Pilot or Balloons)
Appears to have no effect. Possibly a precursor to type
geom : true / false : Unused / Unknown
Set False on Drained and DrainedISH

<detachstrand>

This tag specifies attributes about detaching and flinging. It is required for balls to be detachable.

image : {Image Resource} : Default {None}
The strand image to display as the user tries to detach the ball
For balls with fling set (Bit, Pilot), this specifies the image to use for the direction arrow.
maxlen : Float : Default = 0
The distance the player must pull the ball, before it actually detaches.
Low values (or 0 or ommited) makes the balls detach immediately, annoying when accidentally clicked.
High Values will cause the detach-strand to pull (a lot) on the structure before the ball detaches.
Original balls used 60. Has no effect on fling balls.

* How the springconst attributes actually work

These attributes allow balls to have a range of different spring constants, however whilst the variation is predictable to the designer, it can appear almost random to the player and makes building structures rather frustrating.

When a strand is created, the spring constant is set based on the initial / "natural" length of the strand.
If the initial length is LESS than the minlen attribute - The spring constant is set to springconstmax
If the initial length is GREATER than the maxlen2 attribute - The spring
constant is set to springconstmin
Between minlen and maxlen2 the spring constant varies linearly from springconstmax to springconstmin
This produces some odd, perhaps "interesting", behaviour if max and min are set to substantially different values, however it makes the result on any strand very hard for the player to predict, and thus makes building "difficult"
As mentioned above, 2DBoy set max and min to the same value, which makes the spring constant "constant", whatever length the strand is.