Index: /cpp/frams/_demos/genotypeloader.cpp
===================================================================
--- /cpp/frams/_demos/genotypeloader.cpp	(revision 634)
+++ /cpp/frams/_demos/genotypeloader.cpp	(revision 635)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2016  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -6,60 +6,69 @@
 
 #define FIELDSTRUCT MiniGenotype
-ParamEntry minigenotype_paramtab[]=
- {
- {"Genotype",1,21,"org",},
+ParamEntry minigenotype_paramtab[] =
+{
+	{ "Genotype", 1, 29, "org", },
 
- {"name",0,0,"Name","s 0 40",FIELD(name),},
- {"genotype",0,0,"Genotype","s 1",FIELD(genotype),},
- {"info",0,0,"Info","s 1",FIELD(info),},
+	{ "name", 0, 0, "Name", "s 0 40", FIELD(name), },
+	{ "genotype", 0, 0, "Genotype", "s 1", FIELD(genotype), "Genes as a string of characters.", },
 
- {"energy0",0,0,"Starting energy","f 0 -1 0",FIELD(energy0),},
- {"numparts",0,0,"Body parts","d",FIELD(numparts),},
- {"numjoints",0,0,"Body joints","d",FIELD(numjoints),},
- {"numneurons",0,0,"Brain size","d",FIELD(numneurons),},
- {"numconnections",0,0,"Brain connections","d",FIELD(numconnections),},
+	{ "info_timestamp", 1, 0, "Creation time", "fd 0 -1 0", FIELD(info_timestamp), },
+	{ "info_author", 1, 0, "Author name", "s 0 100", FIELD(info_author), },
+	{ "info_author_ispublic", 1, 0, "Author name is public", "d 0 1 1", FIELD(info_author_ispublic), },
+	{ "info_email", 1, 0, "Author email", "s 0 100", FIELD(info_email), },
+	{ "info_email_ispublic", 1, 0, "Author email is public", "d 0 1 0", FIELD(info_email_ispublic), },
+	{ "info", 1, 0, "Description", "s 1 1000", FIELD(info), "Short description of key features of this creature.", },
+	{ "info_origin", 1, 0, "Origin", "d 0 4 0 ~Unspecified~Designed~Designed and evolved~Evolved under various conditions~Evolved using single, constant setup", FIELD(info_origin), "Declaration of how this genotype originated." },
+	{ "info_how_created", 1, 0, "How created", "s 1 1000", FIELD(info_how_created), "Description of the process of designing and/or evolving this genotype." },
+	{ "info_performance", 1, 0, "Performance notes", "s 1 1000", FIELD(info_performance), "Description of why this genotype is special/interesting and how it performs." }, 
 
- {"num",0,0,"Ordinal number","d",FIELD(ordnumber),},
- {"gnum",0,0,"Generation","d",FIELD(generation),},
+	{ "energy0", 0, 0, "Starting energy", "f 0 -1 0", FIELD(energy0), },
+	{ "numparts", 0, 0, "Body parts", "d", FIELD(numparts), },
+	{ "numjoints", 0, 0, "Body joints", "d", FIELD(numjoints), },
+	{ "numneurons", 0, 0, "Brain size", "d", FIELD(numneurons), },
+	{ "numconnections", 0, 0, "Brain connections", "d", FIELD(numconnections), },
 
- {"instances",0,0,"Instances","d",FIELD(instances),"Copies of this genotype",},
+	{ "num", 0, 0, "Ordinal number", "d", FIELD(ordnumber), },
+	{ "gnum", 0, 0, "Generation", "d", FIELD(generation), },
 
- {"lifespan",0,0,"Life span","f",FIELD(lifespan),"Average life span",},
- {"velocity",0,0,"Velocity","f",FIELD(velocity),"Average velocity",},
- {"distance",0,0,"Distance","f",FIELD(distance),},
- {"vertvel",0,0,"Vertical velocity","f",FIELD(vertvel),},
- {"vertpos",0,0,"Vertical position","f",FIELD(vertpos),},
+	{ "instances", 0, 0, "Instances", "d", FIELD(instances), "Copies of this genotype", },
 
- {"user1",0,0,"User field 1","x",FIELD(user1),},
- {"user2",0,0,"User field 2","x",FIELD(user2),},
- {"user3",0,0,"User field 3","x",FIELD(user3),},
+	{ "lifespan", 0, 0, "Life span", "f", FIELD(lifespan), "Average life span", },
+	{ "velocity", 0, 0, "Velocity", "f", FIELD(velocity), "Average velocity", },
+	{ "distance", 0, 0, "Distance", "f", FIELD(distance), },
+	{ "vertvel", 0, 0, "Vertical velocity", "f", FIELD(vertvel), },
+	{ "vertpos", 0, 0, "Vertical position", "f", FIELD(vertpos), },
 
- {"is_valid",0,0,"Validity","d -1 1 -1",FIELD(is_valid),
- "0 = invalid genotype\n"
- "1 = valid genotype\n"
-  "-1 = validity is not known."},
+	{ "user1", 0, 0, "User field 1", "x", FIELD(user1), },
+	{ "user2", 0, 0, "User field 2", "x", FIELD(user2), },
+	{ "user3", 0, 0, "User field 3", "x", FIELD(user3), },
 
- {"uid",0,0,"#","s",FIELD(uid),"Unique identifier"},
+	{ "is_valid", 0, 0, "Validity", "d -1 1 -1", FIELD(is_valid),
+	"0 = invalid genotype\n"
+	"1 = valid genotype\n"
+	"-1 = validity is not known." },
 
- {0,0,0,},
+	{ "uid", 0, 0, "#", "s", FIELD(uid), "Unique identifier" },
+
+	{ 0, 0, 0, },
 };
 #undef FIELDSTRUCT
 
-MiniGenotypeLoader::MiniGenotypeLoader():genotype_param(minigenotype_paramtab,&genotype_object) {init();}
-MiniGenotypeLoader::MiniGenotypeLoader(VirtFILE *f):MultiParamLoader(f),genotype_param(minigenotype_paramtab,&genotype_object) {init();}
-MiniGenotypeLoader::MiniGenotypeLoader(const char* filename):MultiParamLoader(filename),genotype_param(minigenotype_paramtab,&genotype_object) {init();}
+MiniGenotypeLoader::MiniGenotypeLoader() :genotype_param(minigenotype_paramtab, &genotype_object) { init(); }
+MiniGenotypeLoader::MiniGenotypeLoader(VirtFILE *f) : MultiParamLoader(f), genotype_param(minigenotype_paramtab, &genotype_object) { init(); }
+MiniGenotypeLoader::MiniGenotypeLoader(const char* filename) : MultiParamLoader(filename), genotype_param(minigenotype_paramtab, &genotype_object) { init(); }
 
 void MiniGenotypeLoader::init()
 {
-addObject(&genotype_param);
-breakOn(MultiParamLoader::OnError + MultiParamLoader::AfterObject);
+	addObject(&genotype_param);
+	breakOn(MultiParamLoader::OnError + MultiParamLoader::AfterObject);
 }
 
 MiniGenotype* MiniGenotypeLoader::loadNextGenotype()
 {
-genotype_object.clear();
-if ((go()==AfterObject)&&(getObject().matchesInterfaceName(&genotype_param)))
-	return &genotype_object;
-else
-	return 0;
+	genotype_object.clear();
+	if ((go() == AfterObject) && (getObject().matchesInterfaceName(&genotype_param)))
+		return &genotype_object;
+	else
+		return 0;
 }
Index: /cpp/frams/_demos/genotypeloader.h
===================================================================
--- /cpp/frams/_demos/genotypeloader.h	(revision 634)
+++ /cpp/frams/_demos/genotypeloader.h	(revision 635)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2016  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -10,61 +10,65 @@
 
 /** Defines the association between "org:" object (found in genotype files)
-    and the MiniGenotype fields. MiniGenotypeLoader uses this definition
-    but you can also use it to make MultiParamLoader load genotype
- */
+	and the MiniGenotype fields. MiniGenotypeLoader uses this definition
+	but you can also use it to make MultiParamLoader load genotype
+	*/
 extern ParamEntry minigenotype_paramtab[];
 
 /** Helper class, mostly useful with MultiParamLoader
-    or its specialized version: MiniGenotypeLoader.
-    MiniGenotype stores the subset of Genotype fields (the ones normally saved in .gen files)
- */
+	or its specialized version: MiniGenotypeLoader.
+	MiniGenotype stores the subset of Genotype fields (the ones normally saved in .gen files)
+	*/
 class MiniGenotype
 {
 public:
-SString name,genotype,info,uid;
-double energy0,lifespan,velocity,distance,vertvel,vertpos;
-paInt numparts,numjoints,numneurons,numconnections,ordnumber,generation,instances,is_valid;
-ExtValue user1,user2,user3;
-void clear() {Param p(minigenotype_paramtab,this); p.setDefault();}
+	SString name, genotype, info, uid;
+	double info_timestamp;
+	SString info_author, info_email;
+	paInt info_author_ispublic, info_email_ispublic, info_origin;
+	SString info_how_created, info_performance;
+	double energy0, lifespan, velocity, distance, vertvel, vertpos;
+	paInt numparts, numjoints, numneurons, numconnections, ordnumber, generation, instances, is_valid;
+	ExtValue user1, user2, user3;
+	void clear() { Param p(minigenotype_paramtab, this); p.setDefault(); }
 };
 
 /** In most simple cases this is the class you would use to load a series of genotypes from
-    the Framsticks genotype file.
+	the Framsticks genotype file.
 
-    Usage pattern: (see loader_test_geno.cpp for the working code)
+	Usage pattern: (see loader_test_geno.cpp for the working code)
 
-    1.Initialize
+	1.Initialize
 
-    2.while(genotype=loadNextGenotype()) doSomethingWith(genotype);
+	2.while(genotype=loadNextGenotype()) doSomethingWith(genotype);
 
-    3.Done!
+	3.Done!
 
-    MiniGenotypeLoader is simply the MultiParamLoader configured to load one kind of data: "org:" objects.
-    The instance of this class can also be reconfigured to recognize more objects by using MultiParamLoader
-    methods, or you can use it as a guide for creating your own specialized class.
- */
-class MiniGenotypeLoader: public MultiParamLoader
+	MiniGenotypeLoader is simply the MultiParamLoader configured to load one kind of data: "org:" objects.
+	The instance of this class can also be reconfigured to recognize more objects by using MultiParamLoader
+	methods, or you can use it as a guide for creating your own specialized class.
+	*/
+class MiniGenotypeLoader : public MultiParamLoader
 {
-MiniGenotype genotype_object;
-Param genotype_param;
-bool initialized;
-void init();
+	MiniGenotype genotype_object;
+	Param genotype_param;
+	bool initialized;
+	void init();
 public:
-MiniGenotypeLoader();
-MiniGenotypeLoader(VirtFILE *f);
-MiniGenotypeLoader(const char* filename);
+	MiniGenotypeLoader();
+	MiniGenotypeLoader(VirtFILE *f);
+	MiniGenotypeLoader(const char* filename);
 
-/** @returns genotype object if one was loaded or NULL otherwise.
+	/** @returns genotype object if one was loaded or NULL otherwise.
 
-    Returned MiniGenotype pointer always references the the same object (MiniGenotypeLoader::genotype_object)
-    which means you may need to copy the data from it before calling loadNextGenotype() again.
-    In the default configuration (simple MiniGenotypeLoader) NULL is always final and should be used
-    to finish processing.
+		Returned MiniGenotype pointer always references the the same object (MiniGenotypeLoader::genotype_object)
+		which means you may need to copy the data from it before calling loadNextGenotype() again.
+		In the default configuration (simple MiniGenotypeLoader) NULL is always final and should be used
+		to finish processing.
 
-    If the loader is configured to load other objects or stop on other conditions, NULL will also mean
-    every condition other than "GenotypeLoaded". In such cases you need MultiParamLoader::getStatus(),
-    MultiParamLoader::finished() and other methods to determine the real cause of NULL.
- */
-MiniGenotype* loadNextGenotype();
+		If the loader is configured to load other objects or stop on other conditions, NULL will also mean
+		every condition other than "GenotypeLoaded". In such cases you need MultiParamLoader::getStatus(),
+		MultiParamLoader::finished() and other methods to determine the real cause of NULL.
+		*/
+	MiniGenotype* loadNextGenotype();
 };
 
