Commits

Anonymous committed cf64659

Compiling for Maya 2012 Win x64 successfully.

Comments (0)

Files changed (102)

+# use glob syntax
+syntax: glob
+
+*.obj
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*.vssscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+*.lib
+*.sbr
+*.scc
+[Bb]in
+obj/
+_ReSharper*/
+[Tt]humbs.db
+[Tt]est[Rr]esult*
+[Bb]uild[Ll]og.*
+*.[Pp]ublish.xml
+*.resharper
+*.tlog
+*.CppClean
+*.manifest
+*.lastbuildstate
+*.sdk
+*.ipch
+*.sdf
+*.opensdf
+*.exp
+vc/vc10/x64/Debug/**
+vc/vc10/x64/Release/**
+vc/vc10/brainbugz2012/x64/Debug/**
+vc/vc10/brainbugz2012/x64/Release/**

ReadMeForMaya2012.txt

Empty file added.

docs/bb_about.htm

+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+<p align="center"><img src="images/logo_bug.gif" width="182" height="205"></p>
+<p align="center"><b><font face="Arial, Helvetica, sans-serif"><font size="7"><i>brainbugz 
+  v1.1</i></font><i><font size="7"><br>
+  </font></i><font size="7"><font size="4">Behavioural Animation Engine for Maya 
+  Particles</font></font></font></b></p>
+<p align="center"><font face="Arial, Helvetica, sans-serif">&copy; 10.2002, Carsten 
+  Kolve | <a href="mailto:carsten@kolve.com">carsten@kolve.com</a> | <a href="mailto:carsten@kolve.com"></a><a href="http://www.kolve.com">www.kolve.com<br>
+  </a></font>Maya 4.0, Win NT 4.0 / 2000 / XP</p>
+<div align="center">
+  <table width="92%" border="1" cellspacing="0" cellpadding="0" height="232">
+    <tr> 
+      <td bgcolor="#FFFFCC" height="230"> 
+        <div align="left">
+          <p><font face="Arial, Helvetica, sans-serif" size="2"><b>brainbugz</b> 
+            is job ware. You are free to use this software at no charge in whatever 
+            project you like, commercial or non-commercial. You are only asked 
+            to give me proper credit. I know that this is not always possible, 
+            in this case I would like to hear how you used it. It would be nice, 
+            if you could provide sample pictures or animations. <br>
+            I am developing this not only because I am interested in that kind 
+            of stuff, but for self-promotion, too. I would use your information 
+            for this purpose on my website, or, if you don't want it to be public, 
+            on non-public resumes. In case you are looking for a software developer, 
+            check out my resume on my homepage and if you think my skills fit 
+            your needs, don't hesitate to contact me!<br>
+            </font></p>
+          <p><font face="Arial, Helvetica, sans-serif" size="1">THE MATERIAL EMBODIED 
+            ON THIS SOFTWARE IS PROVIDED TO YOU &quot;AS-IS&quot; AND WITHOUT 
+            WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT 
+            LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
+            PURPOSE. IN NO EVENT SHALL CARSTEN KOLVE BE LIABLE TO YOU OR ANYONE 
+            ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL 
+            DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT 
+            LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE 
+            CLAIMS OF THIRD PARTIES, WHETHER OR NOT CARSTEN KOLVE HAS BEEN ADVISED 
+            OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY 
+            OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION,USE 
+            OR PERFORMANCE OF THIS SOFTWARE. </font></p>
+        </div>
+      </td>
+    </tr>
+  </table>
+</div>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_bugstructure.htm

+<html>
+<head>
+<title>bRAINbUGZ Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="bug"></a>&nbsp; 
+      bug structure</font></td>
+  </tr>
+</table>
+  
+&nbsp; 
+<table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_ste"></a>&nbsp;action 
+        layers </b></font></td>
+    </tr>
+  </table>
+<p>Maya particles are dumb. In fact, they are just mass points on which fields 
+  (such as gravity or vortex) can apply forces. Particles position in space is 
+  changed by these forces. As this is kind of dull, let's put some brain in the 
+  particles (I'll call them bugs from now on) and use the principles of behavioural 
+  animation to animate them - well, letting them animate themselves maybe the 
+  better term.</p>
+<p>Behaviour of a bug can be divided into different layers [1].</p>
+<blockquote>
+  <table width="589" border="0">
+    <tr align="center"> 
+      <td bgcolor="#FF99CC" width="154"><b>Action Selection</b></td>
+      <td width="71"> <b><font size="4" face="Arial, Helvetica, sans-serif">&gt;</font></b></td>
+      <td bgcolor="#FFCCCC" width="133"><b>Steering</b></td>
+      <td width="48"><b><font size="4" face="Arial, Helvetica, sans-serif">&gt;</font></b></td>
+      <td bgcolor="#FFFFCC" width="161"><b>Locomotion</b></td>
+    </tr>
+  </table>
+</blockquote>
+<p><b>Action Selection</b>: &quot;High level goals&quot; - they are defined by 
+  you, the animator. What is the bug's motivation to move? Maybe you want them 
+  to reach the other side of a table. You have to set up a set of steering desires, 
+  bugs should follow, to accomplish this goal. Maybe you have got to combine or 
+  blend different steering desires, or change them over time. The node <a href="#de_com">bbCombineForces</a> 
+  helps you to do this.</p>
+<p><b>Steering</b>: Steering desires are the used to decompose the action selection 
+  goal into subgoals. Getting to the other side of the table is the main motivation, 
+  but bugs also don't want to collide with each other, stick together with the 
+  other bugs in the swarm, don't crash into obstacles etc.. <a href="#de_ste">bbSteeringDesire</a> 
+  node let's you define such desires. It produces desired forces, which bugs may 
+  follow - depending on how the forces are combined (<a href="#de_com">bbCombineForces</a>).</p>
+<p><b>Locomotion</b>: This is, where it gets physical. After a desired force is 
+  computed (using the above nodes), bugs try to self apply the forces and move 
+  accordingly. In the current version of bRAINbUGZ, this is done using the Maya 
+  particle physical simulation engine. As this does not completly fit needs for 
+  behavioural animation, its output is modified using a runtime expression (<a href="#de_cla">bbClampSpeed</a>). 
+</p>
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_ste"></a>&nbsp;bug 
+        properties </b></font></td>
+    </tr>
+  </table>
+<p>The following table shows you all the properties a bug has. As I wanted to 
+  use the Maya particles engine (particle cashing, emitters, fields - it was to 
+  tempting, to use all this features for behavioural animation, too), properties 
+  are not defined in one data structure, but in different nodes. The third column 
+  shows you where to change them.</p>
+  <table width="95%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr bgcolor="#FFFFCC"> 
+      <td width="17%"><b>Property</b></td>
+      <td width="13%"><b>Data Type</b></td>
+      <td width="53%"><b>Description</b></td>
+      <td width="17%"><b>Node</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%">Mass</td>
+      <td width="13%">double</td>
+      <td width="53%">- bugs with different masses, but the same strength (indicated 
+        through the maximum force) react differently on change of orientation 
+        or speed<br>
+        - heavy bodies usually react slower than light ones</td>
+      <td width="17%">particle</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%">Position</td>
+      <td width="13%">MVector</td>
+      <td width="53%">- current position in world space</td>
+      <td width="17%">particle</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%">Velocity</td>
+      <td width="13%">MVector</td>
+      <td width="53%">- current velocity<br>
+        - vector defines the direction the bug is heading (bugs are always aligned 
+        with their velocities)<br>
+        - vector length defines current bug speed</td>
+      <td width="17%">particle</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%">Maximum Force</td>
+      <td width="13%">double</td>
+      <td width="53%">- maximum force the bug can apply to itself <br>
+        -the bigger this value, the more strength the bug has, the faster it can 
+        change orientation or speed.</td>
+      <td width="17%">bbSteeringDesire</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%" valign="top">Minimum Speed</td>
+      <td width="13%" valign="top">double</td>
+      <td width="53%"> - minimum speed the bug can take <br>
+        - setting a minimum speed can be useful, if you want to force the bugs 
+        not to stop</td>
+      <td width="17%">particle (use bbClampSpeed)</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%" valign="top">Maximum Speed</td>
+      <td width="13%" valign="top">double</td>
+      <td width="53%"> - maximum speed the bug can take</td>
+      <td width="17%">particle (use bbClampSpeed)</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%" valign="top">[Diameter]</td>
+      <td width="13%" valign="top">&nbsp;</td>
+      <td width="53%">[todo]</td>
+      <td width="17%">&nbsp;</td>
+    </tr>
+  </table>
+</body>
+</html>

docs/bb_clamp.htm

+<html>
+<head>
+<title>brainbugz Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="deta"></a>&nbsp;appendix</font></td>
+  </tr>
+</table>
+
+  
+<br>
+&nbsp; 
+<table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="de_cla"></a>&nbsp;script 
+        bbClampSpeed</b></font></td>
+    </tr>
+  </table>
+<p><b>Synopsis</b><br>
+  <font face="Courier New, Courier, mono" size="2">int bbClampSpeed(string $particleNode) 
+  </font></p>
+<p><b>ReturnValue</b><br>
+  1 if operation successfuly, 0 else</p>
+<p><b>Description</b><br>
+  This command makes modifications to a particle node, so that particle velocity 
+  can be min / max clamped. <br>
+  <br>
+  Modifications in detail: Attributes Minimum Speed and Maximum Speed are added:</p>
+
+  <table width="503" border="0">
+    <tr> 
+      <td bgcolor="#FFFFCC"> 
+        <p><font face="Courier New, Courier, mono" size="2">addAttr -sn mis -ln 
+          bbMinimumSpeed -dv 0.0 -min 0.0 -max 100;<br>
+          addAttr -sn ms -ln bbMaximumSpeed -dv 5.0 -min 0.001 -max 100;</font></p>
+      </td>
+    </tr>
+  </table>
+<p>Runtime expression is added to <b>velocity</b> in <b>Per Particle (Array) Attributes</b> 
+  - it clamps the length of the velocity vector while maintaining its orientation.<br>
+</p>
+<table width="368" border="0">
+    <tr> 
+      <td bgcolor="#FFFFCC"> 
+        <p><font face="Courier New, Courier, mono" size="2">$minS = particle.bbMinimumSpeed;<br>
+          $maxS = particle.bbMaximumSpeed;<br>
+          $vel &nbsp;= particle.velocity;<br>
+          </font><font face="Courier New, Courier, mono" size="2"><br>
+          $velLength = mag($vel);</font></p>
+        <p><font face="Courier New, Courier, mono" size="2">if ($velLength &gt; 
+          $maxS)<br>
+          {<br>
+          &nbsp;&nbsp;&nbsp;$vel *= $maxS / $velLength ;<br>
+          }<br>
+          else<br>
+          {<br>
+          &nbsp;&nbsp;&nbsp;if (($velLength &lt; $minS)&amp;&amp;($velLength &gt;0))<br>
+          &nbsp;&nbsp;&nbsp;{<br>
+          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$vel *= $minS /$velLength ;<br>
+          &nbsp;&nbsp;&nbsp;}<br>
+          }</font></p>
+        <p><font face="Courier New, Courier, mono" size="2">particle.velocity 
+          = $vel;</font></p>
+      </td>
+    </tr>
+  </table>
+
+<p>Finally <b>Expression after Dynamics</b> is set to true, so the expression 
+  will have the desired effect.</p>
+<p><b>Arguments</b><br>
+  <font face="Courier New, Courier, mono" size="2">string $particleNode</font> 
+  - particle node wich is to be modified</p>
+<p><b>Examples</b></p>
+<p>Create particle node <font face="Courier New, Courier, mono" size="2">particleShape1</font>, 
+  then enter :</p>
+<p><font face="Courier New, Courier, mono" size="2">bbClampSpeed particleShape1;<br>
+  </font></p>
+<p><b>Notes</b><br>
+  -/-</p>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_combine.htm

+<html>
+<head>
+<title>bRAINbUGZ Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<blockquote> 
+  <p></p>
+</blockquote>
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="deta"></a>&nbsp;combining 
+      desires</font></td>
+  </tr>
+</table>
+<p>- create a bbCombineDesire node using the brainbugz menu items<br>
+  - a bbCombineDesire node allows you to combine different steering desires (or 
+  any other field force) to produce higher level desires<br>
+  - choose witch steering desires to use, by clicking the &quot;DisConnect Desire 
+  Field Combiner&quot; button or using the &quot;<a href="bb_connect.htm">Connection 
+  Editor</a>&quot;</p>
+
+  <table width="98%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="know"></a>&nbsp;bbCombineDesires</font></td>
+    </tr>
+  </table>
+<p><img src="images/cdAE.gif" width="354" height="219" border="1"></p>
+
+  <table width="98%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top"> 
+      <td colspan="4" bordercolor="#666666" bgcolor="#FFFFCC"><b>Combine Desires 
+        Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="10%" height="487"><b>Combine Mode</b></td>
+      <td width="6%" height="487">enum</td>
+      <td colspan="2" height="487"> 
+        <p>&quot;Linear&quot;<br>
+          - all steering desires are linearly combined, all steering behaviours 
+          have the same influence<br>
+          - only desires not null are taken into account</p>
+        <p>&quot;Weights&quot;<br>
+          - the steering desires are combined using weight factors you have to 
+          provide <br>
+          - if all steering desires have the same weight factor, this combination 
+          mode equals linear combination<br>
+          - if not enough weight factors are provided, factor '1' is assumed<br>
+          - only forces not null are taken into account</p>
+        <p>&quot;Priority&quot;<br>
+          - providing a priority-value for a steering behaviour means defining 
+          its position in a priority list<br>
+          - lower values indicate higher priority as these steering desires are 
+          the first to be evaluated <br>
+          - only if a higher priorized steering desire produces no result (that 
+          means, a steering desire produced a null vector), the next lower desire 
+          is evaluated<br>
+          - if you want to be sure that a steering desire has full effect when 
+          its needed, this combine mode produces good results<br>
+          - if desires have the same priority only the first (in respect to the 
+          connection index) is evaluated</p>
+        <p>&quot;Selection&quot;<br>
+          - manually define the desire to be used using 'Selected Force'<br>
+          - use this to switch between different steering desires or sets of steering 
+          desires (in case you have a hirachy of bbCombineForces nodes)</p>
+      </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="10%"><b>Desire Index</b></td>
+      <td width="6%">short</td>
+      <td colspan="2">- active if Combine Mode = Selection and steering desires 
+        are connected<br>
+        - defines which steering desire to use, enter the index of the connected 
+        desire</td>
+    </tr>
+  </table>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_connect.htm

+<html>
+<head>
+<title>bRAINbUGZ Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<blockquote>
+  <p></p>
+  <p></p>
+  <p></p>
+  <p></p>
+</blockquote>
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="deta"></a>&nbsp;appendix</font></td>
+  </tr>
+</table>
+
+  
+<br>
+&nbsp; 
+<table width="97%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="de_con"></a>&nbsp;script 
+        bbConnect</b></font></td>
+    </tr>
+  </table>
+<p><b>Synopsis</b><br>
+  <font face="Courier New, Courier, mono" size="2">int bbConnect(string $sourceNode, 
+  string $destinationNode,int $index) </font></p>
+<p><b>ReturnValue</b><br>
+  1 if operation successfuly, 0 else</p>
+<p><b>Description</b><br>
+  This command greatly simplifies the setup process for bRAINbUGZ. The table shows 
+  all possible combinations of source and destination nodes and actions taken 
+  by the script.</p>
+<table width="97%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr bgcolor="#FFFFCC"> 
+      <td width="16%"><b>Source Node</b></td>
+      <td width="17%"><b>Destination Node</b></td>
+      <td width="67%"><b>Action</b></td>
+    </tr>
+    <tr> 
+      <td rowspan="2" valign="top" width="16%">particle</td>
+      <td width="17%" valign="top">bbSteeringDesire</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        particle.fieldData bbSD.inputData[0];</font></td>
+    </tr>
+    <tr> 
+      <td width="17%" valign="top">field</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        particle.fieldData field.inputData[0];</font></td>
+    </tr>
+    <tr> 
+      <td rowspan="2" valign="top" width="16%">bbSteeringDesire</td>
+      <td width="17%" valign="top">particle</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        bbSD.outputForce[0] particle.inputForce[index];</font></td>
+    </tr>
+    <tr> 
+      <td width="17%" valign="top">bbCombineForces</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        bbSD.outputForce[0] bbCF.inputForces[index];<br>
+        connectAttr bbSD.priority bbCF.inputPriorities[index];<br>
+        connectAttr bbSD.weight bbCF.inputWeights[index];</font></td>
+    </tr>
+    <tr> 
+      <td rowspan="2" valign="top" width="16%">field</td>
+      <td width="17%" valign="top">particle</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        field.outputForce[0] particle.inputForce[index];</font></td>
+    </tr>
+    <tr> 
+      <td width="17%" valign="top">bbCombineForces</td>
+      <td width="67%"> 
+        <p><font face="Courier New, Courier, mono" size="2">select field;<br>
+          </font><font face="Courier New, Courier, mono" size="2">addAttr -sn 
+          wei -ln weight -dv 1 -min 1 -max 100;<br>
+          addAttr -sn pri -ln priority -dv 1 -min 1 -max 100;<br>
+          connectAttr field.outputForce[0] bbCF.inputForces[index];<br>
+          connectAttr field.priority bbCF.inputPriorities[index];<br>
+          connectAttr field.weight bbCF.inputWeights[index]; </font></p>
+      </td>
+    </tr>
+    <tr> 
+      <td rowspan="2" valign="top" width="16%">bbCombineForces</td>
+      <td width="17%" valign="top">particle</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        bbCF.outputForce particle.inputForce[index];</font></td>
+    </tr>
+    <tr> 
+      <td width="17%" valign="top">bbCombineForces</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        bbCF.outputForce bbCF2.inputForces[index];<br>
+        connectAttr bbCF.priority bbCF2.inputPriorities[index];<br>
+        connectAttr bbCF.weight bbCF2.inputWeights[index]; </font></td>
+    </tr>
+    <tr> 
+      <td valign="top" width="16%">locator</td>
+      <td width="17%" valign="top">bbSteeringDesire</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        locator.worldPosition bbSD.inputPoint[index];</font></td>
+    </tr>
+    <tr> 
+      <td valign="top" width="16%">nurbsCurve</td>
+      <td width="17%" valign="top">bbSteeringDesire</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        curve.worldSpace bbSD.inputCurve[index];</font></td>
+    </tr>
+    <tr> 
+      <td valign="top" width="16%">nurbsSurface</td>
+      <td width="17%" valign="top">bbSteeringDesire</td>
+      <td width="67%"><font face="Courier New, Courier, mono" size="2">connectAttr 
+        surface.worldSpace bbSD.inputSurface[index];</font></td>
+    </tr>
+  </table>
+
+<p><b>Arguments</b><br>
+  <font face="Courier New, Courier, mono" size="2">string $sourceNode</font> - 
+  node from which should be connected<br>
+  <font size="2" face="Courier New, Courier, mono">string $destinationNode</font> 
+  - node to which should be connected<br>
+  <font face="Courier New, Courier, mono" size="2">int $index </font>- index of 
+  destination nodes array attribute, if -1 connecting to next available</p>
+<p><b>Examples</b></p>
+<p>Create particle node <font face="Courier New, Courier, mono" size="2">particleShape1</font>, 
+  then enter this:</p>
+<p><font face="Courier New, Courier, mono" size="2">createNode bbSteeringDesire 
+  -n bbSD_1;<br>
+  createNode bbSteeringDesire -n bbSD_2;<br>
+  createNode bbCombineForces -n bbCF;<br>
+  </font></p>
+<p>// Connect particles with steering desires</p>
+<p><font face="Courier New, Courier, mono" size="2">bbConnect particleShape1 bbSD_1 
+  0;</font><br>
+  <font face="Courier New, Courier, mono" size="2">bbConnect particleShape1 bbSD_2 
+  0;</font></p>
+<p>// Connect steering desires with force combiner</p>
+<p><font face="Courier New, Courier, mono" size="2">bbConnect bbSD_1 bbCF 0;<br>
+  bbConnect bbSD_2 bbCF 1;</font></p>
+<p>// Connect force combiner with particles</p>
+<p><font face="Courier New, Courier, mono" size="2">bbConnect bbCF particleShape1;<br>
+  </font></p>
+<p><b>Notes</b><br>
+  It is recommended to always use an specific index, so you are sure how nodes 
+  are connected.</p>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_generalBugAttr.htm

+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="inst"></a>&nbsp;general 
+      bug attributes</font></td>
+  </tr>
+</table>
+<p>Create a steering desire using the brainbugz menu entry:</p>
+<p><img src="images/tut_bbMenu.gif" width="214" height="118" border="1"></p>
+<p>Now you can edit general bug attributes for this desire</p>
+<p><img src="images/generalBugAttr.gif" width="365" height="229" border="1"></p>
+  <table width="92%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Physical Attributes</b><b></b><b></b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%"><b>Bug Radius</b></td>
+      <td width="7%">double</td>
+      <td width="76%" valign="top">- the radius defines a bounding sphere around 
+        the particle, this will be used in computations where the bugs size does 
+        matter (collision avoidance)</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%"><b>Maximum Force</b></td>
+      <td width="7%">double</td>
+      <td width="76%" valign="top">- in behavioural animation forces are self 
+        applied and hence limited, maximum force defines how much force a bug 
+        can apply for the specific steering desire</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%"><b>Inverse Desired Steering Force</b></td>
+      <td width="7%">bool</td>
+      <td width="76%" valign="top">- if active, desired steering force is scaled 
+        with '-1', that means, e.g. seek will become flee</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="17%"><b>Desired Speed</b></td>
+      <td width="7%">double</td>
+      <td width="76%" valign="top">- speed at which bug wants to travel through 
+        space </td>
+    </tr>
+  </table>
+<p>&nbsp;</p>
+  <table width="92%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="4"><b>Field Of View Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Use Sensor Range</b></td>
+      <td width="6%">bool</td>
+      <td width="38%" valign="top">- check whether to use Sensor Range or not</td>
+      <td rowspan="4" width="41%" valign="middle"> &nbsp;<img src="images/bugstruc.gif" width="231" height="163"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Sensor Range</b></td>
+      <td width="6%">double</td>
+      <td width="38%" valign="top">- active if Use Sensor Range is checked<br>
+        - defines a distance at which bugs can sense other bugs or targets, think 
+        of a sphere with radius Sensor Range around the position of the bug</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Use Sensor Angle</b></td>
+      <td width="6%">bool</td>
+      <td width="38%" valign="top">- check whether to use Sensor Angle or not</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Sensor Angle</b></td>
+      <td width="6%">angle</td>
+      <td width="38%" valign="top">- active if Use Sensor Angle is checked<br>
+        - defines an angle around the heading vector of the bug in which it can 
+        sense bugs or targets, think of a cone which top is located at the position 
+        of the bug</td>
+    </tr>
+  </table>
+</body>
+</html>

docs/bb_installation.htm

+<html>
+<head>
+<title>bRAINbUGZ Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="inst"></a>&nbsp;installation</font></td>
+  </tr>
+</table>
+<p>- open the brainbugz.zip archive using your favourite zip-tool <br>
+  - extract the files from the folders to the specified destinations:</p>
+<table width="79%" border="1" cellpadding="0" cellspacing="0" bordercolor="#666666">
+  <tr> 
+    <td width="13%" bgcolor="#FFFFCC"><b>folder</b></td>
+    <td width="49%" bgcolor="#FFFFCC"><b>contents</b></td>
+    <td width="38%" bgcolor="#FFFFCC"><b>destination</b></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%"><b>plugin</b></td>
+    <td width="49%">brainbugz.mll</td>
+    <td width="38%">~/maya/x.x/bin/plug-ins</td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%"><b>mel</b></td>
+    <td width="49%">bbCreateUI.mel<br>
+      bbDeleteUI.mel<br>
+      AEbbSteeringDesireTemplate.mel<br>
+      AEbbCombineForces.mel<br>
+      AEbbConnectionEditor.mel</td>
+    <td width="38%"><p>~/maya/x.x/scripts</p>
+    <p>(make sure it's in your MAYA_SCRIPT_PATH) </p></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%"><b>images</b></td>
+    <td width="49%"> 
+      <p>bbCEA1.xpm<br>
+        bbCEA2.xpm<br>
+        bbCEA3.xpm<br>
+        out_bbCombineDesires.xpm<br>
+        out_bbSteeringDesire.xpm</p>
+    </td>
+    <td width="38%">~/maya/x.x/icons</td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%"><b>fti-icons</b></td>
+    <td width="49%">bbCombineDesires.fti<br>
+      bbSteeringDesire.fti<br>
+    </td>
+    <td width="38%">~/AW/Mayax.x/icons</td>
+  </tr>
+</table>
+<p>- start Maya<br>
+  - load plugin into Maya, using the <b>Plug-in Manager</b> (<b>Windows &gt; Settings/Preferences 
+  &gt; Plug-in Manager...</b>)<br>
+  - a new menu &quot;brainbugz&quot; will appear in the menu-bar, use this to 
+  envoke all commands related to brainbugz</p>
+<p><b>IMPORTANT: </b><br>
+  brainbugz uses the following node id's 0x3a001, 0x3a002 - these lie in the range 
+  designated by A|W for private use. If you are expriencing problems using the 
+  nodes, make sure these id's are not already used by other plugins!</p>
+</body>
+</html>

docs/bb_issues.htm

+<html>
+<head>
+<title>brainbugz Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="know"></a>&nbsp;additional 
+      informations</font></td>
+  </tr>
+</table>
+
+  
+<br>
+&nbsp; 
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="know"></a>&nbsp;</font><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF">known 
+        issues and limitations</font></td>
+    </tr>
+  </table>
+<p>- not complete nurbsSurfaces area is used for target destribution<br>
+  - multiple knot targets with same position<br>
+</p>
+<p>If you find a bug, please report to <a href="mailto:carsten@kolve.com">carsten@kolve.com</a></p>
+
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="futu"></a>&nbsp;future 
+        enhancements </font></td>
+    </tr>
+  </table>
+<p>all these depend on time, feedback and motivation :)<br>
+  <br>
+  - new steering desires: formation, containment<br>
+  - new combine mode: priorized dithering<br>
+  - node to constrain bug motion to different physical parameters (surface hugging, 
+  flight etc.)<br>
+  - performance: eliminate unnessecary computations (you'd be shocked if you knew 
+  how much there are!), spatial data structure to speed up query of nearby bugs, 
+  node to store reusable computational data to speed up calculations<br>
+  - event / location based steering desire changes (already possible to a certain 
+  degree, extend that degree)<br>
+  - inner states for bugs (fear, hunger, anger etc.)<br>
+  - integration of non-linear trax animation with beavioural animation engine 
+  <br>
+  - kill all bugs, kill 'em all!<br>
+  - faster, better, harder, stronger</p>
+<p>Suggestions, ideas? &gt; <a href="mailto:carsten@kolve.com">carsten@kolve.com</a></p>
+
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="ackn"></a>&nbsp;acknowlegements</font></td>
+    </tr>
+  </table>
+<p>Big Thanks to all the beta-testers: Bruno Pollet, Stefaan Contreras (A|W Europe), 
+  Max Parofsky (Hidden Dragon Films, L.A.), Thomas Hermann (Second Unit, Munich), 
+  Karen Smith (Freelance)</p>
+
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="refe"></a>&nbsp;references</font></td>
+    </tr>
+  </table>
+  
+<br>
+&nbsp; 
+<table width="96%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr> 
+      <td>Reynolds, C. W. (1987) Flocks, Herds, and Schools: A Distributed Behavioral 
+        Model, in Computer Graphics, 21(4) (SIGGRAPH &#146;87 Conference Proceedings) 
+        pages 25-34. </td>
+    </tr>
+    <tr> 
+      <td>Reynolds, C. W. (1988) Not Bumping Into Things, in the notes for the 
+        SIGGRAPH 88 course Developments in Physically-Based Modeling, pages G1-G13, 
+        published by ACM SIGGRAPH. </td>
+    </tr>
+    <tr> 
+      <td>Reynolds C.W., &quot;Steering Behaviours for Autonomous Characters&quot;, 
+        Proceedings of the Games Developer Conference, p763-782, 1999.</td>
+    </tr>
+    <tr> 
+      <td>Robin Green &quot;Steering Behaviours&quot;, Proceedings of the Games 
+        Developer Conference 1999</td>
+    </tr>
+    <tr> 
+      <td>David M. Bourg, &quot;Physics for Game Developers&quot;, O'REILLY, 2002, 
+        ISBN 0-596-00006-5</td>
+    </tr>
+    <tr> 
+      <td>Alan Watt, &quot;3D Computer Graphics&quot;, Pearson Education Limited, 
+        1999 (German Edition), ISBN 3-8273-7014-0</td>
+    </tr>
+    <tr> 
+      <td>Rick Parent, &quot;Computer Animation - Algorithms and Techniques&quot;, 
+        Morgan Kaufmann Publishers, 2002, ISBN 1-55860-579-7</td>
+    </tr>
+  </table>
+<p>&nbsp;</p>
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="hist"></a>&nbsp;history</font></td>
+    </tr>
+  </table>
+  
+<br>
+&nbsp; 
+<table width="96%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666" height="348">
+  <tr bgcolor="#FFFFCC" valign="top"> 
+    <td width="11%"><b>Version</b></td>
+    <td width="12%"><b>Date</b></td>
+    <td width="77%"><b>Info</b></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="11%">Beta 1</td>
+    <td width="12%">19.02.02</td>
+    <td width="77%">intial non public beta release</td>
+  </tr>
+  <tr valign="top"> 
+    <td width="11%" height="112">Beta 2</td>
+    <td width="12%" height="112">04.03.02</td>
+    <td width="77%" height="112"> 
+      <p>- non public<br>
+        bugfixes:<br>
+        - corrected maya iff type (currently non official inhouse iff type)<br>
+        added:<br>
+        - steering desires: seek / moth seek / arrival of multiple points, curves, 
+        surfaces; curve-, surface following; bug head direction</p>
+    </td>
+  </tr>
+  <tr valign="top"> 
+    <td width="11%" height="172">Beta 3</td>
+    <td width="12%" height="172">12.06.02</td>
+    <td width="77%" height="172"> 
+      <p>-non public<br>
+        updates:<br>
+        - new more user friendly AETemplates<br>
+        - combined all different node in one plugin<br>
+        - easier steering desire combinations<br>
+        added:<br>
+        - steering desires: obstacle avoidance, mesh following, bug wander<br>
+        - super fancy node icons (for hypergraph also)<br>
+        - advanced connection editor for much easier connection setup</p>
+    </td>
+  </tr>
+  <tr valign="top"> 
+    <td width="11%" height="32">1.0</td>
+    <td width="12%" height="32">11.10.02</td>
+    <td width="77%" height="32">official release</td>
+  </tr>
+  <tr valign="top">
+    <td width="11%" height="93">1.1</td>
+    <td width="12%" height="93">30.10.02</td>
+    <td width="77%" height="93"> 
+      <p>changes:<br>
+        - removed limits on force and distance attributes<br>
+        - other minor fixes<br>
+        added:<br>
+        - recompiled version for Maya 4.5</p>
+      </td>
+  </tr>
+</table>
+</body>
+</html>

docs/bb_sd_bug.htm

+<html>
+<head>
+<title>brainbugz documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="inst"></a>&nbsp;steering 
+      desires - bug desires</font></td>
+  </tr>
+</table>
+  
+<br>
+&nbsp; 
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdBhea"></a>&nbsp;head 
+        direction </font></td>
+    </tr>
+  </table>
+<p>- this desire causes the bug to head in the direction specified by 'Heading 
+  Direction' at 'Desired Speed'<br>
+  - if 'Heading Direction' equals nullVector, bug will move in current direction 
+  it is heading (defined by velocity) at 'Desired Speed'<br>
+  - produces zero result if 'Desired Speed' = 0</p>
+<p><img src="images/sd_BugHead.gif" width="150" height="100" border="1"></p>
+<p><img src="images/sdBugHeadAE.gif" width="348" height="70" border="1"></p>
+  <table width="92%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Head Direction Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="12%"><b>Heading Direction</b></td>
+      <td width="8%">vector</td>
+      <td width="80%" valign="top">- heading vector of the bug&nbsp;<br>
+        - just the direction will be used and not the length of the vector (so 
+        &lt;&lt;1.0;0.0;0.0&gt;&gt; equals &lt;&lt;3.0;0.0;0.0&gt;&gt;) </td>
+    </tr>
+  </table>
+<p><br>
+</p>
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdBwan"></a>&nbsp;wander</font></td>
+    </tr>
+  </table>
+<p>- a useful desire for adding a little randomness to a bug's motion (or a lot)<br>
+  - consider a sphere projected in front of the bug, initially the bug will move 
+  to the point on the sphere which is most far away, with each simulation step 
+  a small random vector will be added to this, reprojected back to the sphere, 
+  this resulting point on the sphere will be seeked now<br>
+  - the bigger the wander sphere radius, the more the bug will turn<br>
+  - a bigger wander range will make the bug &quot;turn happier&quot;<br>
+  - if you offset the sphere to the left or the right, you will force the bugs 
+  to do spins in that direction<br>
+</p>
+<p><img src="images/sd_wander.gif" width="258" height="143" border="1"></p>
+<p><img src="images/sdBugWanderAE.gif" width="358" height="334" border="1"></p>
+  <table width="90%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Wander Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Sphere Radius</b></td>
+      <td width="7%">double</td>
+      <td width="74%" valign="top"> - defines the radius of the wander sphere, 
+        this controls the range of possible turning angles (a small circle gives 
+        you relatively straight wandering, a big circle gives you more turning)</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Sphere Offset</b></td>
+      <td width="7%">vector</td>
+      <td width="74%" valign="top">- defines the wander spheres position relative 
+        to the bugs position and heading direction (as described by its velocity)<br>
+        - the relative position of the sphere allows you to control whether or 
+        not you generate backward facing vectors for amoeba like spins or bias 
+        steering to one side for spiralling effects and the size of the random 
+        vector controls the randomness of your wandering path</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Choose Speed</b></td>
+      <td width="7%">enum</td>
+      <td width="74%" valign="top">&quot;Desired Speed&quot;<br>
+        - the bug will try to move at the &quot;Desired Speed&quot; defined by 
+        &quot;General Bug Attributes&quot;<br>
+        <br>
+        &quot;Speed Range&quot;<br>
+        - the bug's speed will depend on the current position of the random point 
+        on the wander sphere: when it is the most far away from the bug it will 
+        go at &quot;Maximum Speed&quot;, when it is the most near at &quot;Minimum 
+        Speed&quot;, for positions between, speed will be determined linear</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Minimum Speed</b></td>
+      <td width="7%">double</td>
+      <td width="74%" valign="top">- active if &quot;Choose Speed&quot; is &quot;Speed 
+        Range&quot;<br>
+        - the bugs speed when the random pos on the wander sphere is nearest <br>
+        ( length(Sphere Offset) - Sphere Radius )</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Maximum Speed</b></td>
+      <td width="7%">double</td>
+      <td width="74%" valign="top">- active if &quot;Choose Speed&quot; is &quot;Speed 
+        Range&quot;<br>
+        - the bugs speed when the random pos on the wander sphere is most far<br>
+        ( length(Sphere Offset) + Sphere Radius ) </td>
+    </tr>
+  </table>
+<p><br>
+</p>
+  <table width="90%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Random Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Use Random</b></td>
+      <td width="7%">bool</td>
+      
+    <td width="74%" valign="top">[not implemeted yet]</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Inner Range</b></td>
+      <td width="7%">vector</td>
+      <td width="74%" valign="top">- the inner range used to determine the random 
+        vector<br>
+        - the size of the random vector controls the randomness of your wandering 
+        path <br>
+        - values for the random vector will be:<br>
+        &nbsp;&nbsp;(-outerRange &lt;= randomVector &lt;= -innerRange) and<br>
+        &nbsp;&nbsp;(+innerRange &lt;= randomVector &lt;= +outerRange) </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Outer Range</b></td>
+      <td width="7%">vector</td>
+      <td width="74%" valign="top">- the outer range used to determine the random 
+        vector </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Seed</b></td>
+      <td width="7%">double</td>
+      <td width="74%" valign="top">- seed value for pseudo random number generation 
+        for wander random vector determination</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="19%"><b>Init Seed Frame</b></td>
+      <td width="7%">double</td>
+      <td width="74%" valign="top"> 
+        <p>- frame at which pseudo random number generator will be initialized<br>
+          (bbSteeringDesire node attribute &quot;currentTime&quot; must be connected 
+          to &quot;time1.outTime&quot; for this to work - this will be done automatically 
+          if you use the Attribute Editor to edit steering desire attributes)</p>
+      </td>
+    </tr>
+  </table>
+</body>
+</html>

docs/bb_sd_neighbor.htm

+<html>
+<head>
+<title>brainbugz documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdN"></a>&nbsp;steering 
+      desires - neighbor desires</font></td>
+  </tr>
+</table>
+<p>- although it is not required, it is recommeneded to use the &quot;field of 
+  view&quot; attributes to limit the bugs view of the world, this will give you 
+  better results</p>
+
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdNali"></a>&nbsp;alignment</font></td>
+    </tr>
+  </table>
+<p>- alignment steering desire forces the bug to align itself with the bugs in 
+  its viewing range<br>
+  - it will head in the same direction and try to adjust to the speed of the bugs 
+  nearby<br>
+  - produces zero result if no other bugs in field of view<br>
+</p>
+<p><img src="images/sdNeighborAlign.gif" width="212" height="179" border="1"></p>
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdNcoh"></a>&nbsp;cohesion</font></td>
+    </tr>
+  </table>
+
+<p>- Bugs with this desire will try to approach and form a group with other nearby 
+  bugs by heading for the average position of these bugs <br>
+  - produces zero result if no other bugs in field of view </p>
+<p><img src="images/sdNeighborCohesion.gif" width="149" height="167" border="1"></p>
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdNsep"></a>&nbsp;separation</font></td>
+    </tr>
+  </table>
+
+<p>- this steering desire can be used to prevent bugs vom crowding together, it 
+  forces the character to steer away from the other bugs nearby<br>
+  - this produces good results when the bugs are aligned or the weight is relativly 
+  low regarding the maximum self applied force <br>
+  - produces zero result if no other bugs in field of view </p>
+<p><img src="images/sdNeighborSeparation.gif" width="220" height="179" border="1"><br>
+</p>
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdNkee"></a>&nbsp;keep 
+        distance </font></td>
+    </tr>
+  </table>
+
+<p>- &quot;keep distance&quot; will force the bug to keep the defined distance 
+  to the nearest of the nearby bugs<br>
+  - bug will try to change its direction as small as possible</p>
+<p><img src="images/sd_keepDistance.gif" width="220" height="192" border="1"></p>
+<table width="93%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Keep Distance Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="11%"><b>Distance</b></td>
+      <td width="8%">double</td>
+      <td width="81%">- distance to keep from the nearest bug</td>
+    </tr>
+  </table>
+
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_sd_target.htm

+<html>
+<head>
+<title>brainbugz documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="inst"></a>&nbsp;steering 
+      desires - target desires</font></td>
+  </tr>
+</table>
+<p>- target desires need targets to work, this can be any type of geometry (except 
+  subdivision surfaces) <br>
+  - connect geometry to the steering desire node using the Connection Editor you 
+  can call with the buttons in the Attribute Editor<br>
+  - note if you choose to use field of view, this will be only used for bug &lt;-&gt; 
+  assigned target point (does not need to be the whole geometry!) relations</p>
+<p><img src="images/sdTargetAE.gif" width="364" height="438" border="1"></p>
+
+  <table width="92%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Target Desire Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="14%"><b>Target Type</b></td>
+      <td width="7%">enum</td>
+      <td width="79%" valign="top"> &quot;point&quot;, &quot;curve&quot;, &quot;surface&quot;, 
+        &quot;mesh&quot;<br>
+        - items only active if matching geometry is connected</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="14%"><b>Sub Targets</b></td>
+      <td width="7%">enum</td>
+      <td width="79%" valign="top"> 
+        <p>&quot;uniform&quot;<br>
+          - targets are placed equidistant on curve or surface<br>
+          - if you experience that targets are not uniformly placed on the specific 
+          geometry, then try to 'Rebuild Curve / Surface' and be sure to check 
+          radiobutton 'uniform'<br>
+          - if 'Input Selection' is 'All Connected' targets will be distributed 
+          on connected curves / surfaces with respect to the different curve lengths 
+          / surface areas</p>
+        <p>&quot;knots / vertices&quot;<br>
+          - all knots / vertices of curve / surface / mesh will be used as targets</p>
+      </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="14%" height="105"><b>Input Selection</b></td>
+      <td width="7%" height="105">enum</td>
+      <td width="79%" valign="top" height="105">&quot;index&quot;<br>
+        - only one geometry (defined by &quot;input index&quot;) will be used 
+        for computation<br>
+        <br>
+        &quot;all connected&quot;<br>
+        - use all geometry connected to steering desire for computation</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="14%" height="35"><b>Input Index</b></td>
+      <td width="7%" height="35">short</td>
+      <td width="79%" valign="top" height="35">- specifies which input geometry 
+        is to be used, provide the index at which the desired geometry is attached 
+        to the respective array attribute </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="14%" height="33"><b>Tolerance</b></td>
+      <td width="7%" height="33">double</td>
+      <td width="79%" valign="top" height="33">- the amount of error (epsilon 
+        value) in the calculation, this is used when calculating points / distances 
+        to nurbs curves and surfaces</td>
+    </tr>
+  </table>
+  
+<br>
+&nbsp; 
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTsee"></a>&nbsp;seek</font></td>
+    </tr>
+  </table>
+<p>- seek desire causes the bug to align its orientation towards the specified 
+  target<br>
+  - if a bug continues to seek, it will pass through the target, then turn back 
+  to seek it again <br>
+  - produces zero result if 'Desired Speed'=0 or target not in field of view</p>
+<p><img src="images/sd_pSeek.gif" width="145" height="68" border="1"><br>
+  <br>
+  <img src="images/sd_cSeek.gif" width="245" height="179" border="1"></p>
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTmot"></a>&nbsp;moth 
+        seek</font></td>
+    </tr>
+  </table>
+
+<p>- moth seek desire is the same as seek, except that the bug is moving in orbital 
+  paths around the target, much like a moth buzzing around a light bulb <br>
+  - produces zero result if 'Desired Speed'=0 or target not in field of view</p>
+<p><img src="images/sd_pMothSeek.gif" width="199" height="122" border="1"></p>
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTarr"></a>&nbsp;arrival</font></td>
+    </tr>
+  </table>
+
+<p>- arrival is identical to seek behaviour when the bug is far away from the 
+  target, but if the target is in a predefined distance (Stopping Radius), the 
+  bug will try to slow down and eventually stop at the target <br>
+  - produces zero result if 'Desired Speed'=0 or target not in field of view</p>
+<p><img src="images/sd_pArrival.gif" width="221" height="106" border="1"></p>
+
+  <table width="93%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="3"><b>Arrival Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="16%"><b>Stopping Range</b></td>
+      <td width="7%">double</td>
+      <td width="77%">- active if steering desire is arrival<br>
+        - predefined distance at which the bug will try to slow down and stop 
+        at the target </td>
+    </tr>
+  </table>
+<br>
+&nbsp; 
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTpur"></a>&nbsp;pursuit</font></td>
+    </tr>
+  </table>
+
+<p>- pursuit is identical to seek behaviour except the bug tries to predict where 
+  its target is moving and tries to intercept the targtes path<br>
+  - this will only produce visible result, if the target is moving<br>
+  &nbsp; <br>
+  <img src="images/sd_pursuit.gif" width="235" height="135" border="1"> <br>
+</p>
+
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTsha"></a>&nbsp;shadow</font></td>
+    </tr>
+  </table>
+<p>- shadow is identical to seek behaviour when the bug is far away from the target, 
+  but if the target is in a predefined distance (Shadow Range), the bug will try 
+  mimic the movement of the target<br>
+  - produces zero result if 'Desired Speed'=0 or target not in field of view</p>
+<p><img src="images/sd_shadow.gif" width="215" height="203" border="1"></p>
+<table width="93%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+  <tr valign="top" bgcolor="#FFFFCC"> 
+    <td colspan="3"><b>Shadow Attributes</b></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="16%" height="38"><b>Shadow Range</b></td>
+    <td width="7%" height="38">double</td>
+    <td width="77%" height="38">- active if steering desire is shadow<br>
+      - predefined distance at which the bug will try to mimic the movement of 
+      the target</td>
+  </tr>
+</table>
+<p>&nbsp;</p>
+
+  <table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTfol"></a>&nbsp;follow</font></td>
+    </tr>
+  </table>
+<p>- bug estimates its future position on its current heading, then seeks the 
+  closest point on the curve / surface / mesh to this future position<br>
+  - 'Probe Length' serves as scaling factor for the current velocity to calculate 
+  the future position<br>
+  - bugs do (currently) follow the curve in no predefined direction<b><br>
+  </b>- field of view is currently not available with this steering desire<br>
+  - produces zero result if bug inside space defined by 'Target Radius'</p>
+<p><img src="images/sd_CurveFollowing.gif" width="233" height="181" border="1"></p>
+
+  
+<table width="93%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+  <tr valign="top" bgcolor="#FFFFCC"> 
+    <td colspan="3"><b>Follow Attributes</b></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="14%"><b>Target Radius</b></td>
+    <td width="8%">double</td>
+    <td width="78%">- active if steering desire is following<br>
+      - defines area around curve / surface in which a bug thinks it is following 
+      the path and does not change its direction</td>
+  </tr>
+  <tr valign="top"> 
+    <td width="14%"><b>Probe Length</b></td>
+    <td width="8%">double</td>
+    <td width="78%">- scaling factor for the current velocity to calculate the 
+      future position</td>
+  </tr>
+  <tr valign="top"> 
+    <td width="14%"><b>Tolerance</b></td>
+    <td width="8%">double</td>
+    <td width="78%">- defines the maximum error used in the calculation, the bigger 
+      the value, the faster the computation</td>
+  </tr>
+</table>
+<br>
+&nbsp; 
+<table width="96%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="sdTobs"></a>&nbsp;obstacle 
+        avoidance </font></td>
+    </tr>
+  </table>
+
+<p>- obstacle avoidance prevents the bugs from bumping into obstacles (which can 
+  be any mesh or nurbs surface)<br>
+  - every bug has got a probe of a specified length attached at its front, if 
+  this probe touches one of the specified obstacles, then the bug will try to 
+  steer away from this predicted collision point <br>
+  - though you can use nurbsSurfaces as obstacles, it is recommended to use meshes 
+  as the collision point calculation can be performed much faster with this type 
+  of geometry</p>
+<p><img src="images/sd_obstacleAvoidance.gif" width="250" height="139" border="1"></p>
+<table width="93%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+  <tr valign="top" bgcolor="#FFFFCC"> 
+    <td colspan="3"><b>Follow Attributes</b></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="15%"><b>Probe Length</b></td>
+    <td width="8%">double</td>
+    <td width="77%">- probe length to check for obstacles</td>
+  </tr>
+  <tr valign="top">
+    <td width="15%"><b>Tolerance</b></td>
+    <td width="8%">double</td>
+    <td width="77%">- defines the maximum error used in the calculation, the bigger 
+      the value, the faster the computation</td>
+  </tr>
+</table>
+
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_setup.htm

+<html>
+<head>
+<title>bRAINbUGZ Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366" height="24"><a name="work"></a>&nbsp;<font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF">node 
+      and connection setup</font></td>
+  </tr>
+</table>
+<p>To edit the relations between the different desire nodes and set up a working 
+  behavioural system, you should use the Connection Editor. To start this editor, 
+  choose the item &quot;Connection Editor...&quot; in the brainbugz menu:</p>
+<p><img src="images/selectConnEdit.gif" width="172" height="125" border="1"></p>
+<p>The bb Connection Editor will show up:</p>
+<p><img src="images/tut_ConnEdit.gif" width="585" height="432"></p>
+<table width="98%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+  <tr valign="top"> 
+    <td colspan="2" bordercolor="#666666" bgcolor="#FFFFCC"><b>bb Connection Editor 
+      Menu Items</b></td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%" height="223"><b>Select Node Filter</b></td>
+    <td width="87%" height="223"> 
+      <p>&quot;Steering Desires&quot;<br>
+        -if active, all bbSteeringDesire nodes in the current scene will be shown 
+        in the &quot;Select Node&quot; outliner</p>
+      <p>&quot;Desire Combiner&quot;<br>
+        -if active, all bbCombineDesires nodes in the current scene will be shown 
+        in the &quot;Select Node&quot; outliner </p>
+      <p>&quot;Particles&quot;<br>
+        -if active, all particle nodes in the current scene will be shown in the 
+        &quot;Select Node&quot; outliner </p>
+      <p>&quot;Fields&quot;<br>
+        -if active, all standard Maya field nodes in the current scene will be 
+        shown in the &quot;Select Node&quot; outliner, these incude &quot;Air&quot;, 
+        &quot;Drag&quot;, &quot;Gravity&quot;, &quot;Newton&quot;, &quot;Radial&quot;, 
+        &quot;Tubulence&quot;, &quot;Uniform&quot;, &quot;Vortex&quot; and &quot;Volume 
+        Axis&quot; </p>
+    </td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%"><b>Connection Mode</b></td>
+    <td width="87%"> 
+      <p>&quot;Incoming&quot;<br>
+        - if selected, you will only see incoming connections of the currently 
+        selected node<br>
+        - you are only able to change incoming connections, too</p>
+      <p>&quot;Outgoing&quot;<br>
+        - if selected, you will only see outgoing connections of the currently 
+        selected node<br>
+        - you are only able to change outgoing connections, too </p>
+      <p>&quot;Both&quot;<br>
+        - if selected, you will see both incoming and outgoing connections of 
+        the currently selected node<br>
+        - you are only able to change both incoming and outgoing connections, 
+        too <br>
+        - while this display mode gives you full direct control on connection 
+        setup, you may find it a bit overcrowded or confusing at first - therefore 
+        choose the setting you like best</p>
+    </td>
+  </tr>
+  <tr valign="top"> 
+    <td width="13%"><b>Connection Graph</b></td>
+    <td width="87%">
+      <p>&quot;Focus Selected&quot;<br>
+        - the hypergraph in the &quot;Connection Graph&quot; part of the Connection 
+        Editor will focus on the selected node and show its up- and downstream 
+        connections</p>
+      <p>&quot;Stick to Particle&quot;<br>
+        - the hypergraph in the &quot;Connection Graph&quot; part of the Connection 
+        Editor will focus on the specified particle node, this gives you a better 
+        view on the whole connection setup</p>
+      </td>
+  </tr>
+</table>
+<p>&nbsp;</p>
+<p>[this is not necessary any more as everything was automated, use this for references 
+  on the insights]</p>
+<p>A detailed description of the steps required to build the 'brain' of the bugs, 
+  the setup of the bbNodes and connections:</p>
+
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_ste"></a>&nbsp;steering 
+        desire creation</b></font></td>
+    </tr>
+  </table>
+<p>Steering Desires are the basis of behavioural animation, they tell the individual 
+  bug how to behave. To create a steering desire, create a bbSteeringDesire node 
+  using the <b>Command Line</b> or <b>Script Editor</b>:</p>
+
+  <blockquote> 
+    <table width="297" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">createNode bbSteeringDesire 
+            -n bbSD;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>bbSteeringDesire is a particle field node, so you can use it just like any 
+  other field (Gravity, Vortex etc.) in Maya. You can connect it to your particle 
+  object using MEL:</p>
+<blockquote>
+  
+    <table width="272" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">connectDynamic -f 
+            bbSD particle1;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>Open the Hypergraph, the graph should look somewhat like this:</p>
+
+  <p><img src="images/hg_1.gif" width="532" height="135"></p>
+
+<p>You can now edit steering desire attributes by selecting the bbSD node and 
+  opening the <b>Attribute Editor. </b>For a detailed description of the steering 
+  desire attributes, see <a href="bb_steering.htm">detailed node descriptions</a>.</p>
+<p>You can keep adding bbSteeringDesires by using the above method. Output forces 
+  of the steering desires will be combined linear in the particle object. This 
+  may be suitable in some situation, but to achieve better results other combination 
+  methods must be used.</p>
+
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_com"></a>&nbsp;combination 
+        of steering desires</b></font></td>
+    </tr>
+  </table>
+
+<p>To combine the output forces of bbSteeringDesire nodes, use the bbCombineForces 
+  node. To create one, use MEL.</p>
+
+  <blockquote> 
+    <table width="288" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">createNode bbCombineForces 
+            -n bbCF;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>Now you have created a bbCombineForces node (bbCF) , it must be connected to 
+  bbSteeringDesire nodes (bbSD). Use the 'bbConnect' command to connect steering 
+  desires outputForce, weight and priority with the force combiner:</p>
+<blockquote>
+ 
+    <table width="190" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">bbConnect bbSD bbCF 
+            0;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>Note: Make sure to use the same array index for all of the connections of one 
+  specific bbSteeringDesire to an bbCombineForces node. This is required so the 
+  bbCombineForces knows, which priority and weight belongs to what force.</p>
+<p>Connect the bbCombineForces outputForce to the particles input force.</p>
+
+  <blockquote> 
+    <table width="268" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">bbConnect bbCF particleShape1 
+            0;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>If you already connected the steering desires to the particle node using the 
+  'connectDynamic' command as described above, delete the connection from the 
+  bbSteeringDesire node to the particle node using the <b>Hypergraph.<br>
+  </b>If the bbSteeringDesire node never was connected to the particle object, 
+  connect it now:</p>
+<blockquote>
+  
+    <table width="269" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">bbConnect particleShape1 
+            bbSD 0;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p><b>Hypergraph</b> should look like this if you connected all the attributes 
+  correctly:</p>
+
+  <p><img src="images/hg_2.gif" width="545" height="182"></p>
+
+<p>Repeat these steps to add more steering desires for the particle object- of 
+  course, just the connections from the particle node to the steering desire and 
+  from the steering desire to the force combiner are needed.<br>
+  When you are finished, <b>Hypergraph</b> may look like this:</p>
+
+  <p><img src="images/hg_3.gif" width="610" height="208"></p>
+
+<p>Commands to create the above node setup (it is assumed, you already created 
+  the particle object):</p>
+<blockquote>
+  
+    <table width="391" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2" color="#006600">// 
+            create steering desire nodes</font><font face="Courier New, Courier, mono" size="2"><br>
+            createNode bbSteeringDesire -n bbSD_1;<br>
+            createNode bbSteeringDesire -n bbSD_2;<br>
+            createNode bbSteeringDesire -n bbSD_3;<br>
+            <br>
+            <font color="#006600">// create force combiner node</font><br>
+            createNode bbCombineForces -n bbCF;<br>
+            <br>
+            <font color="#006600">// connect particle node with steering desires</font><br>
+            bbConnect particleShape1 bbSD_1 0;<br>
+            bbConnect particleShape1 bbSD_2 0;<br>
+            bbConnect particleShape1 bbSD_3 0;<br>
+            <br>
+            <font color="#006600">// connect steering desires with force combiner<br>
+            // note the use of different index values when <br>
+            // connecting to array attributes</font><br>
+            </font><font face="Courier New, Courier, mono" size="2">bbConnect 
+            bbSD_1 bbCF 0;<br>
+            bbConnect bbSD_2 bbCF 1;<br>
+            bbConnect bbSD_3 bbCF 2;<br>
+            <br>
+            <font color="#006600">// connect force combiner with particle node</font><br>
+            bbConnect bbCF particleShape1 0;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>You can now edit combine forces attributes by selecting the bbCF node and opening 
+  the <b>Attribute Editor. </b>For a detailed description of the combine forces 
+  attributes, see <a href="bb_combine.htm">detailed node descriptions</a>.</p>
+<p>Note: Of course you can use bbCombineForces without bbSteeringDesire to gain 
+  more control on how force fields effect particles.</p>
+
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_usi"></a>&nbsp;connecting 
+        geometry to steering desires</b></font></td>
+    </tr>
+  </table>
+<p>Some steering desires need geometry input. Currently you can connect locators, 
+  nurbsCurves and nurbsSurfaces to steering desires. the bbConnect command helps 
+  you to complete this task, too.</p>
+
+  <blockquote> 
+    <table width="252" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2" color="#006600">// 
+            examples</font><font face="Courier New, Courier, mono" size="2"><br>
+            bbConnect locator1 bbSD 0;<br>
+            bbConnect locator2 bbSD 1;<br>
+            bbConnect locator3 bbSD 2;<br>
+            </font></p>
+          <p><font face="Courier New, Courier, mono" size="2">bbConnect curve1 
+            bbSD 0;<br>
+            bbConnect curve2 bbSD 1;<br>
+            </font></p>
+          <p><font face="Courier New, Courier, mono" size="2">bbConnect nurbsSphere1 
+            bbSD 0;<br>
+            bbConnect nurbsPlane1 bbSD 1;<br>
+            </font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>Note: Be sure to connect locator / nurbsCurve / nurbsSurface nodes with bbSteeringDesires 
+  only and not their transform nodes!</p>
+
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_usi"></a>&nbsp;using 
+        fields as steering desires</b></font></td>
+    </tr>
+  </table>
+<p>Every force field in Maya can be used as a steering desire - so the former 
+  phsical force applied to particles becomes a desire, which bugs may follow. 
+  You just have to add the weight and priority attributes to the fields, which 
+  they are missing. </p>
+<blockquote>
+  
+    <table width="228" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">bbConnect fieldName 
+            bbCF 0;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_adv"></a>&nbsp;advanced 
+        connection setup</b></font></td>
+    </tr>
+  </table>
+<p>To achieve more complex behaviours, you can use bbCombineForces nodes as inputs 
+  for other bbCombineForces nodes. This may be used to switch between different 
+  sets of steering desires or in general, if the given combination modes do not 
+  fit your needs but the combination you desire may be achieved by hierachising 
+  the steering desires (e.g. Priorized Weighting, Weighted Priorization, etc.).</p>
+<p>Such an setup may look like this - but you are free to build far more complex 
+  ones :-)</p>
+
+  <p><img src="images/hg_4.gif" width="668" height="392"></p>
+  <table width="95%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF"><b><a name="wo_lim"></a>&nbsp;limiting 
+        bug velocity</b></font></td>
+    </tr>
+  </table>
+<p>As stated before, in behavioural animation forces are self applied and hence 
+  limited. But speed of Maya particles can grow unlimited - so some changes have 
+  to be made to achieve the effect of limited speed:</p>
+<blockquote>
+   
+    <table width="234" border="0">
+      <tr> 
+        <td bgcolor="#FFFFCC"> 
+          <p><font face="Courier New, Courier, mono" size="2">bbClampSpeed particleShape1;</font></p>
+        </td>
+      </tr>
+    </table>
+  </blockquote>
+<p>This will add attributes Minimum - and Maximum Speed which are used in a runtime 
+  expression, to clamp particle velocity.</p>
+<blockquote>
+  <blockquote> 
+    <blockquote> 
+      <p>&nbsp;</p>
+    </blockquote>
+  </blockquote>
+</blockquote>
+<p>As you see, MEL scripts <a href="bb_connect.htm">bbConnect </a>and <a href="bb_clamp.htm">bbClampSpeed</a> 
+  save you a lot of tedious expression editing and scripting. Use them to speed 
+  up creation of behavioural animation setups.</p>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+</body>
+</html>

docs/bb_steering.htm

+<html>
+<head>
+<title>bRAINbUGZ Documentation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" height="36">
+  <tr> 
+    <td bgcolor="#003366" valign="bottom" height="33"> 
+      <p><font face="Arial, Helvetica, sans-serif" size="5" color="#FFFFFF"> &nbsp;<img src="images/bug1.gif" width="53" height="34"><i><b> 
+        bRAINbUGZ</b></i> <font size="4">&szlig;-Release 2</font></font></p>
+      </td>
+  </tr>
+</table>
+<p><font face="Arial, Helvetica, sans-serif"><a href="brainbugz.htm">TOC</a> | 
+  <a href="bb_setup.htm">PREVIOUS</a> | <a href="bb_combine.htm">NEXT</a></font></p>
+<blockquote> 
+  <p></p>
+</blockquote>
+<table width="100%" border="0">
+  <tr> 
+    <td bgcolor="#003366"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="deta"></a>&nbsp;detailed 
+      node and script descriptions</font></td>
+  </tr>
+</table>
+<blockquote>
+  <p>[todo: attribute settings, hidden attributes]</p>
+  <table width="98%" border="0">
+    <tr> 
+      <td bgcolor="#005BB7"><font face="Arial, Helvetica, sans-serif" size="4" color="#FFFFFF"><a name="know"></a>&nbsp;node 
+        bbSteeringDesire</font></td>
+    </tr>
+  </table>
+  <br>
+  <table width="98%" border="1" cellspacing="0" cellpadding="0" bordercolor="#666666">
+    <tr valign="top"> 
+      <td colspan="5" bgcolor="#FFFFCC"><b>Common</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td rowspan="15" valign="top" width="15%"><b>Steering Desire</b></td>
+      <td rowspan="15" valign="top" width="6%">enum</td>
+      <td width="44%"><b>Bug Head Direction<br>
+        </b>- this desire causes the bug to head in the direction specified by 
+        'Heading Direction' at 'Desired Speed'<br>
+        - if 'Heading Direction' equals nullVector, bug will move in current direction 
+        it is heading (defined by velocity) at 'Desired Speed'<br>
+        -produces zero result if 'Desired Speed' = 0</td>
+      <td width="29%" valign="middle"><img src="images/sd_BugHead.gif" width="150" height="100"></td>
+      <td rowspan="15" width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"><b>Point Seek</b><br>
+        - seek desire causes the bug to align its orientation towards the specified 
+        target<br>
+        - if a bug continues to seek, it will pass through the target, then turn 
+        back to seek it again <br>
+        - produces zero result if 'Desired Speed'=0 or target not in field of 
+        view</td>
+      <td width="29%" align="left" valign="middle"><img src="images/sd_pSeek.gif" width="145" height="68"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"><b>Point Moth Seek</b><br>
+        - moth seek desire is the same as seek, except that the bug is moving 
+        in orbital paths around the target, much like a moth buzzing around a 
+        light bulb <br>
+        - produces zero result if 'Desired Speed'=0 or target not in field of 
+        view</td>
+      <td width="29%" valign="middle"><img src="images/sd_pMothSeek.gif" width="199" height="122"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"><b>Point Arrival</b><br>
+        - arrival is identical to seek behaviour when the bug is far away from 
+        the target, but if the target is in a predefined distance (Stopping Radius), 
+        the bug will try to slow down and eventually stop at the target <br>
+        - produces zero result if 'Desired Speed'=0 or target not in field of 
+        view</td>
+      <td width="29%" valign="middle"><img src="images/sd_pArrival.gif" width="221" height="106"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"> 
+        <p><b>Curve Seek<br>
+          </b>- same steering desire as Point Seek, except targets are distributed 
+          on one or multiple 'Input Curves' (or you can use curve knots as targets, 
+          too) <b><br>
+          </b>- produces zero result if 'Desired Speed'=0 or target not in field 
+          of view (note, it is possible the curve is in field of view, but bug 
+          won't seek, because its specific target on the curve is not in field 
+          of view!)</p>
+      </td>
+      <td width="29%"><img src="images/sd_cSeek.gif" width="245" height="179"></td>
+    </tr>
+    <tr valign="top"> 
+      <td colspan="2"><b>Curve Moth Seek<br>
+        </b>- same as 'Point Moth Seek', take a look at 'Curve Seek' and you'll 
+        get the idea how it works<b><br>
+        </b>- produces zero result if 'Desired Speed'=0 or target not in field 
+        of view </td>
+    </tr>
+    <tr valign="top"> 
+      <td colspan="2"><b>Curve Arrival<br>
+        </b>- same as 'Point Arrival', take a look at 'Curve Seek' and you'll 
+        get the idea how it works <b><br>
+        </b>- produces zero result if 'Desired Speed'=0 or target not in field 
+        of view </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"><b>Curve Following</b><br>
+        - bug estimates its future position on its current heading, then seeks 
+        the closest point on the curve to this future position<br>
+        - 'Sensor Range' serves as scaling factor for the current velocity to 
+        calculate the future position<br>
+        - bugs do (currently) follow the curve in no predefined direction<b><br>
+        </b>- field of view is currently not available with this steering desire<br>
+        - produces zero result if bug inside space defined by 'Target Radius'</td>
+      <td width="29%">&nbsp;<img src="images/sd_CurveFollowing.gif" width="233" height="181"></td>
+    </tr>
+    <tr valign="top"> 
+      <td colspan="2"> 
+        <p><b>Surface Seek<br>
+          </b>- same steering desire as Point Seek, except that targets are distributed 
+          on one or multiple 'Input Surfaces' (or you can use surface knots as 
+          targets, too) <br>
+          - produces zero result if 'Desired Speed'=0 or target not in field of 
+          view (note, it is possible the curve is in field of view, but bug won't 
+          seek, because its specific target on the curve is not in field of view!)</p>
+      </td>
+    </tr>
+    <tr valign="top"> 
+      <td colspan="2"><b>Surface Moth Seek<br>
+        </b>- produces zero result if 'Desired Speed'=0 or target not in field 
+        of view </td>
+    </tr>
+    <tr valign="top"> 
+      <td colspan="2"><b>Surface Arrival<br>
+        </b>- produces zero result if 'Desired Speed'=0 or target not in field 
+        of view </td>
+    </tr>
+    <tr valign="top"> 
+      <td colspan="2"> 
+        <p><b>Surface Following<br>
+          </b>- same steering desire as 'Curve Following' except the curve is 
+          a surface<b><br>
+          </b>- produces zero result if bug inside space defined by 'Target Radius' 
+        </p>
+        </td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"> 
+        <p><b>Neighbor Alignment</b><br>
+          - alignment steering desire forces the bug to align itself with the 
+          bugs in its viewing range<br>
+          - it will head in the same direction and try to adjust to the speed 
+          of the bugs nearby<br>
+          - produces zero result if no other bugs in field of view</p>
+      </td>
+      <td width="29%">&nbsp;<img src="images/sdNeighborAlign.gif" width="212" height="179"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"><b>Neighbor Cohesion</b><br>
+        - Bugs with this desire will try to approach and form a group with other 
+        nearby bugs by heading for the average position of these bugs <br>
+        - produces zero result if no other bugs in field of view </td>
+      <td width="29%">&nbsp;<img src="images/sdNeighborCohesion.gif" width="149" height="167"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="44%"><b>Neighbor Separation</b><br>
+        - this steering desire can be used to prevent bugs vom crowding together, 
+        it forces the character to steer away from the other bugs nearby<br>
+        - this produces good results when the bugs are aligned or the weight is 
+        relativly low regarding the maximum self applied force <br>
+        - produces zero result if no other bugs in field of view </td>
+      <td width="29%">&nbsp;<img src="images/sdNeighborSeparation.gif" width="220" height="179"></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%" valign="top"><b>Maximum Force</b></td>
+      <td width="6%" valign="top">double</td>
+      <td colspan="2"> 
+        <p>- in behavioural animation forces are self applied and hence limited, 
+          maximum force defines how much force a bug can apply for the specific 
+          steering desire</p>
+      </td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%" valign="top"><b>Inverse Desired Steering Force</b></td>
+      <td width="6%" valign="top">bool</td>
+      <td colspan="2">- if active, desired steering force is scaled with '-1', 
+        that means, e.g. seek will become flee</td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Desired Speed</b></td>
+      <td width="6%">double</td>
+      <td colspan="2">- active if steering desire is target based<br>
+        - speed at which bug wants to reach target</td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="5"><b>Field Of View Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Use Sensor Range</b></td>
+      <td width="6%">bool</td>
+      <td width="44%" valign="top">- check whether to use Sensor Range or not</td>
+      <td rowspan="4" width="29%" valign="middle"> &nbsp;<img src="images/bugstruc.gif" width="231" height="163"></td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Sensor Range</b></td>
+      <td width="6%">double</td>
+      <td width="44%" valign="top">- active if Use Sensor Range is checked<br>
+        - defines a distance at which bugs can sense other bugs or targets, think 
+        of a sphere with radius Sensor Range around the position of the bug</td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Use Sensor Angle</b></td>
+      <td width="6%">bool</td>
+      <td width="44%" valign="top">- check whether to use Sensor Angle or not</td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Sensor Angle</b></td>
+      <td width="6%">angle</td>
+      <td width="44%" valign="top">- active if Use Sensor Angle is checked<br>
+        - defines an angle around the heading vector of the bug in which it can 
+        sense bugs or targets, think of a cone which top is located at the position 
+        of the bug</td>
+      <td width="6%">&nbsp;</td>
+    </tr>
+    <tr valign="top" bgcolor="#FFFFCC"> 
+      <td colspan="5"><b>Bug Attributes</b></td>
+    </tr>
+    <tr valign="top"> 
+      <td width="15%"><b>Heading Direction</b></td>
+      <td width="6%">vector</td>
+      <td colspan="2">- the direction in which the bug will head, when using 'bug 
+        direction heading' steering desire<br>
+        - just the direction will be used and not the length of the vector (so 
+        &lt;&lt;1.0;0.0;0.0&gt;&gt; equals &lt;&lt;3.0;0.0;0.0&gt;&gt;)</td>
+      <td width="6%">&nbsp;</td>