Index: cpp/tests/genomanipulation-complex.goal
===================================================================
--- cpp/tests/genomanipulation-complex.goal	(revision 1009)
+++ cpp/tests/genomanipulation-complex.goal	(revision 1033)
@@ -29,5 +29,5 @@
    ##                                           ##
     #############################################
-            (part # 2)
+            (part # 1)
 Here is the full listing of properties as they are printed in f0
  (please compare with f0 genotype).
@@ -37,17 +37,17 @@
  [this data is provided by Part::properties() ]
  #        id                      type  name        group (22 properties)
- 0.        x = 2.0                  f   position.x  Geometry  
+ 0.        x = 1.0                  f   position.x  Geometry  
  1.        y = 0.0                  f   position.y  Geometry  
  2.        z = 0.0                  f   position.z  Geometry  
  3.       sh = 0                    d 0 3 0 shape       Geometry  
  4.        s = 1.0                  f 0.1 10.0 1.0 size        Geometry  
- 5.       sx = 1.0                  f 0.001 1000.0 1.0 scale.x     Geometry  
- 6.       sy = 1.0                  f 0.001 1000.0 1.0 scale.y     Geometry  
- 7.       sz = 1.0                  f 0.001 1000.0 1.0 scale.z     Geometry  
+ 5.       sx = 1.0                  f 0.05 5.0 1.0 scale.x     Geometry  
+ 6.       sy = 1.0                  f 0.05 5.0 1.0 scale.y     Geometry  
+ 7.       sz = 1.0                  f 0.05 5.0 1.0 scale.z     Geometry  
  8.        h = 0.0                  f 0 1 0 hollow      Other properties
  9.       dn = 1.0                  f 0.2 5.0 1.0 density     Other properties
-10.       fr = 0.976                f 0.0 4.0 0.4 friction    Other properties
-11.      ing = 0.475                f 0.0 1.0 0.25 ingestion   Other properties
-12.       as = 0.175                f 0.0 1.0 0.25 assimilation  Other properties
+10.       fr = 1.12                 f 0.0 4.0 0.4 friction    Other properties
+11.      ing = 0.53125              f 0.0 1.0 0.25 ingestion   Other properties
+12.       as = 0.15625              f 0.0 1.0 0.25 assimilation  Other properties
 13.       rx = 0.0                  f   rot.x       Geometry  
 14.       ry = 0.0                  f   rot.y       Geometry  
@@ -69,7 +69,7 @@
  0.        h = 0.0                  f 0 1 0 hollow      Extra properties
  1.       dn = 1.0                  f 0.2 5.0 1.0 density     Extra properties
- 2.       fr = 0.976                f 0.0 4.0 0.4 friction    Extra properties
- 3.      ing = 0.475                f 0.0 1.0 0.25 ingestion   Extra properties
- 4.       as = 0.175                f 0.0 1.0 0.25 assimilation  Extra properties
+ 2.       fr = 1.12                 f 0.0 4.0 0.4 friction    Extra properties
+ 3.      ing = 0.53125              f 0.0 1.0 0.25 ingestion   Extra properties
+ 4.       as = 0.15625              f 0.0 1.0 0.25 assimilation  Extra properties
  5.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Extra properties
  6.       vr = 0.5                  f 0.0 1.0 1.0 red component  Extra properties
@@ -83,14 +83,14 @@
 Now we will try to change some of properties:
 
-      Change property #0 to random value from range [0..1]
-      Current value of 'h' (hollow) is '0.0'
+      Change property #5 to random value from range [0.05..0.7]
+      Current value of 'vs' (visual thickness) is '0.2'
       Setting new value... [ using ParamInterface::set() ]
-      The value is now '0.548814'
-
-Let's see f0... (check out part #2 !)
-
-p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+      The value is now '0.514873'
+
+Let's see f0... (check out part #1 !)
+
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
 j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
 j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
@@ -104,10 +104,10 @@
    ##                                           ##
     #############################################
-            (joint # 0)
+            (joint # 1)
 Similarly as with Part, the full list of properties comes first:
 
  #        id                      type  name        group (27 properties)
- 0.       p1 = 0                    d -1 999999 -1 part1 ref#  Connections
- 1.       p2 = 1                    d -1 999999 -1 part2 ref#  Connections
+ 0.       p1 = 1                    d -1 999999 -1 part1 ref#  Connections
+ 1.       p2 = 2                    d -1 999999 -1 part2 ref#  Connections
  2.       rx = 0.0                  f   rotation.x  Geometry  
  3.       ry = 0.0                  f   rotation.y  Geometry  
@@ -129,5 +129,5 @@
 19.     stif = 1.0                  f 0.0 1.0 1.0 stiffness   Other properties
 20.  rotstif = 1.0                  f 0.0 1.0 1.0 rotation stiffness  Other properties
-21.     stam = 0.15625              f 0.0 1.0 0.25 stamina     Other properties
+21.     stam = 0.175                f 0.0 1.0 0.25 stamina     Other properties
 22.        i =                      s   info        Other properties
 23.   Vstyle = joint                s 0 0 joint vis_style   Visual    
@@ -141,12 +141,12 @@
 Delta fields (dx,dy,dz) describe relative location of the second part.
 This joint will change the second Part's positions to preserve delta distance.
-Let's move the first Part (#0) along y axis (+0.1) and change delta.z (dz) by 0.1.
-Position of the second Part referenced by this joint (part #1) is now changed:
-
-p:y=0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, 0.1, 0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, 0.1, 0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
-j:0, 1, dx=1.0, 0.0, 0.1, stam=0.15625, vr=0.5, 0.5, 0.5
-j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+Let's move the first Part (#1) along y axis (+0.1) and change delta.z (dz) by 0.1.
+Position of the second Part referenced by this joint (part #2) is now changed:
+
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, z=0.1, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.1, stam=0.175, vr=0.5, 0.5, 0.5
 n:j=0, d=@:p=0.6543
 n:j=1, d=G
@@ -158,9 +158,9 @@
 As you can see, Joint's delta fields have altered:
 
-p:y=0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
-j:0, 1, dx=1.0, 0.0, -0.1, stam=0.15625, vr=0.5, 0.5, 0.5
-j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, z=-0.1, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, -0.1, stam=0.175, vr=0.5, 0.5, 0.5
 n:j=0, d=@:p=0.6543
 n:j=1, d=G
@@ -171,9 +171,9 @@
 f0 is now:
 
-p:y=0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
-j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.5
-j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, z=-0.1, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, stam=0.175, vr=0.5, 0.5, 0.5
 n:j=0, d=@:p=0.6543
 n:j=1, d=G
@@ -188,8 +188,8 @@
 
 p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
-j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.5
-j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, z=-0.1, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, stam=0.175, vr=0.5, 0.5, 0.5
 n:j=0, d=@:p=0.6543
 n:j=1, d=G
@@ -208,15 +208,15 @@
 
 They can be changed just like Part's extra properties:
-      Change property #4 to random value from range [0..1]
-      Current value of 'vb' (blue component) is '0.5'
+      Change property #3 to random value from range [0..1]
+      Current value of 'vg' (green component) is '0.5'
       Setting new value... [ using ParamInterface::set() ]
-      The value is now '0.592845'
+      The value is now '0.857946'
 And after that we have this genotype:
 
 p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
-j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.592845
-j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, z=-0.1, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, stam=0.175, vr=0.5, 0.857946, 0.5
 n:j=0, d=@:p=0.6543
 n:j=1, d=G
@@ -228,5 +228,5 @@
    ##                                           ##
     #############################################
-            (neuro # 0)
+            (neuro # 1)
 Basic features of Neuro object are similar to those of Part and Joint.
 We can request a property list:
@@ -234,9 +234,9 @@
  #        id                      type  name        group (10 properties)
  0.        p = -1                   d -1 999999 -1 part ref#   Connections
- 1.        j = 0                    d -1 999999 -1 joint ref#  Connections
- 2.        d = @:p=0.6543           s   details     Other     
+ 1.        j = 1                    d -1 999999 -1 joint ref#  Connections
+ 2.        d = G                    s   details     Other     
  3.        i =                      s   info        Other     
  4.   Vstyle = neuro                s 0 0 neuro vis_style   Visual    
- 5. getInputCount = 1                    d   input count  Connections
+ 5. getInputCount = 0                    d   input count  Connections
  9. classObject = null                 oNeuroClass neuron class  Connections
 
@@ -248,5 +248,5 @@
 Each neuron can have any number of inputs = weighted connections
  with other neurons.
-According to Neuro::getInputCount(), this one has 1 inputs.
+According to Neuro::getInputCount(), this one has 0 inputs.
 Standard API is provided for accessing those inputs (getInput(int)),
 adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).
@@ -255,22 +255,13 @@
 The most unusual thing is 'details' field (d).
 It is something like separate object with its own set of properties.
-Currently the value of 'd' is '@:p=0.6543'.
-'@' is the class name (Neuro::getClassName() == '@') and means 'Rotation muscle'.
+Currently the value of 'd' is 'G'.
+'G' is the class name (Neuro::getClassName() == 'G') and means 'Gyroscope'.
 Neuro::getClass() gives you information about basic characteristic
 of the class, that can be analyzed automatically.
-For the current object we can learn that it supports 1 inputs (getPreferredInputs()) and doesn't provide useful output signal (getPreferredOutput()==0).
-Instances of '@' can be used in models having shape types: 'ball-and-stick'.
-Instances of '@' can be attached to Joints having any shapes.
-The class defines its own properties:
-
- [ data provided by Neuro::classProperties() ]
- #        id                      type  name        group (1 properties)
- 0.        p = 0.6543               f 0.01 1.0 1.0 power       Rotation muscle
-and they can be changed:
-      Change property #0 to random value from range [0.01..1]
-      Current value of 'p' (power) is '0.6543'
-      Setting new value... [ using ParamInterface::set() ]
-      The value is now '0.718037'
-After that, 'details' contains the new object: '@:p=0.718037'.
+For the current object we can learn that it supports no inputs (getPreferredInputs()) and provides meaningful output signal (getPreferredOutput()==1).
+Instances of 'G' can be used in models having shape types: 'ball-and-stick'.
+Instances of 'G' can be attached to Joints having any shapes.
+(This class does not have its own properties
+ - Neuro::classProperties().getPropCount()==0)
 The class of this object can be changed using Neuro::setClassName()
 The following classes are available:
@@ -302,19 +293,16 @@
 22.   Sin  Sinus generator        2
 
-Let's change the Neuro's class to 'Water'...
-[WARN] Param.loadSingleLine: Unknown property 'Water.p' (ignored)
-Info for input #0 = ""
-Info for input #0, field "abc" = ""
-The final object description will be then: 'Water'
+Let's change the Neuro's class to 'ChMux'...
+The final object description will be then: 'ChMux'
 And the full f0 genotype:
 
 p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
-p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
-j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.592845
-j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
-n:j=0, d=Water
-n:j=1, d=G
-c:0, 1, -1.23456, i="test=44,abc=yeah"
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vs=0.514873, vr=0.5, 0.5, 0.5
+p:2.0, z=-0.1, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, stam=0.175, vr=0.5, 0.857946, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=ChMux
+c:0, 1, -1.23456
 
 
@@ -324,5 +312,5 @@
   1. You can redirect output: genomanipulation >filename.txt
   2. Each run can yield different results and new behaviors, but you
-     need to uncomment srand(time(0)) in genomanipulation.cpp.
+     need to uncomment rndRandomizeSeed() in genomanipulation.cpp.
   3. This application will use custom genotype passed as
      a commandline parameter: genomanipulation "/*9*/FULU"
