Index: cpp/frams/genetics/geneprops.cpp
===================================================================
--- cpp/frams/genetics/geneprops.cpp	(revision 1248)
+++ cpp/frams/genetics/geneprops.cpp	(revision 1260)
@@ -51,54 +51,8 @@
 }
 
-int GeneProps::executeModifier_Legacy(char modif)
-{
-	switch (modif)
-	{
-#ifdef v1f1COMPATIBLE
-	case 'L': length += (3.0 - length) * 0.3;
-		length = std::min(length, Model::getMaxJoint().d.x); break;
-#else
-	case 'L': length += (2.0 - length) * 0.3; //2.0 is currently Model::getMaxJoint().d.x so min() does not limit the range
-		length = std::min(length, Model::getMaxJoint().d.x); break;
-#endif
-	case 'l': length += (0.33 - length) * 0.3;
-		length = std::max(length, Model::getMinJoint().d.x); break;
-
-	case 'W': weight += (2.0 - weight) * 0.3; break;
-	case 'w': weight += (0.5 - weight) * 0.3; break;
-	case 'F': friction += (4 - friction) * 0.2; break;
-	case 'f': friction -= friction * 0.2; break;
-	case 'C': curvedness += (2.0 - curvedness) * 0.25; break;
-	case 'c': curvedness += (-2.0 - curvedness) * 0.25; break;
-	case 'Q': twist += (M_PI_2 - twist) * 0.3; break;
-	case 'q': twist += (-M_PI_2 - twist) * 0.3; break;
-	case 'E': energy += (10.0 - energy) * 0.1; break;
-	case 'e': energy -= energy * 0.1;  break;
-
-	case 'A': assimilation += (1 - assimilation) * 0.8; normalizeBiol4(); break;
-	case 'a': assimilation -= assimilation * 0.4; normalizeBiol4(); break;
-	case 'I': ingestion += (1 - ingestion) * 0.8; normalizeBiol4(); break;
-	case 'i': ingestion -= ingestion * 0.4; normalizeBiol4(); break;
-	case 'S': stamina += (1 - stamina) * 0.8; normalizeBiol4(); break;
-	case 's': stamina -= stamina * 0.4; normalizeBiol4(); break;
-	case 'M': muscle_power += (1 - muscle_power) * 0.8; normalizeBiol4(); break;
-	case 'm': muscle_power -= muscle_power * 0.4; normalizeBiol4(); break;
-
-	case 'D': cred += (1.0 - cred) * 0.25; break;
-	case 'd': cred += (0.0 - cred) * 0.25; break;
-	case 'G': cgreen += (1.0 - cgreen) * 0.25; break;
-	case 'g': cgreen += (0.0 - cgreen) * 0.25; break;
-	case 'B': cblue += (1.0 - cblue) * 0.25; break;
-	case 'b': cblue += (0.0 - cblue) * 0.25; break;
-
-	default: return -1;
-	}
-	return 0;
-}
-
 int GeneProps::executeModifier(char modif, GenePropsOps* ops)
 {
 	if (ops == NULL)
-		ops = getStandardOps();
+		ops = getDefaultOps();
 
 #define APPLY(name) ops->name->apply(name, modif)
@@ -152,5 +106,5 @@
 
 	if (ops == NULL)
-		ops = getStandardOps();
+		ops = getDefaultOps();
 	if (ops->use_normalizebiol4) normalizeBiol4();
 
@@ -171,15 +125,15 @@
 }
 
-double GenePropsOp_Old::increase(double value) const
+double GenePropsOp_Legacy::increase(double value) const
 {
 	return value + (maxvalue - value) * change;
 }
 
-double GenePropsOp_Old::decrease(double value) const
+double GenePropsOp_Legacy::decrease(double value) const
 {
 	return value + (minvalue - value) * revchange;
 }
 
-GenePropsOp_Old::GenePropsOp_Old(double minvalue, double maxvalue, double defvalue, double change, double revchange)
+GenePropsOp_Legacy::GenePropsOp_Legacy(double minvalue, double maxvalue, double defvalue, double change, double revchange)
 {
 	this->minvalue = minvalue;
@@ -246,35 +200,40 @@
 }
 
-GenePropsOps_Old::GenePropsOps_Old()
+GenePropsOps_Legacy::GenePropsOps_Legacy()
 {
 	use_normalizebiol4 = true;
 
-	length = new GenePropsOp_Old(0.33, 2.0, GeneProps::standard_values.length, 0.3);
-	weight = new GenePropsOp_Old(0.5, 2.0, GeneProps::standard_values.weight, 0.3);
-	friction = new GenePropsOp_Old(0, 4.0, GeneProps::standard_values.friction, 0.2);
-	curvedness = new GenePropsOp_Old(-2, 2, GeneProps::standard_values.curvedness, 0.25);
-	twist = new GenePropsOp_Old(-M_PI_2, M_PI_2, GeneProps::standard_values.twist, 0.3);
-	energy = new GenePropsOp_Old(0, 10, GeneProps::standard_values.energy, 0.1);
-
-	assimilation = new GenePropsOp_Old(0, 1, GeneProps::standard_values.assimilation, 0.8, 0.4);
-	ingestion = new GenePropsOp_Old(0, 1, GeneProps::standard_values.ingestion, 0.8, 0.4);
-	stamina = new GenePropsOp_Old(0, 1, GeneProps::standard_values.stamina, 0.8, 0.4);
-	muscle_power = new GenePropsOp_Old(0, 1, GeneProps::standard_values.muscle_power, 0.8, 0.4);
-
-	cred = new GenePropsOp_Old(0, 1, GeneProps::standard_values.cred, 0.25);
-	cgreen = new GenePropsOp_Old(0, 1, GeneProps::standard_values.cgreen, 0.25);
-	cblue = new GenePropsOp_Old(0, 1, GeneProps::standard_values.cblue, 0.25);
-}
-
-GenePropsOps_New05::GenePropsOps_New05()
+	length = new GenePropsOp_Legacy(0.33, 2.0, GeneProps::standard_values.length, 0.3);
+	weight = new GenePropsOp_Legacy(0.5, 2.0, GeneProps::standard_values.weight, 0.3);
+	friction = new GenePropsOp_Legacy(0, 4.0, GeneProps::standard_values.friction, 0.2);
+	curvedness = new GenePropsOp_Legacy(-2, 2, GeneProps::standard_values.curvedness, 0.25);
+	twist = new GenePropsOp_Legacy(-M_PI_2, M_PI_2, GeneProps::standard_values.twist, 0.3);
+	energy = new GenePropsOp_Legacy(0, 10, GeneProps::standard_values.energy, 0.1);
+
+	assimilation = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.assimilation, 0.8, 0.4);
+	ingestion = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.ingestion, 0.8, 0.4);
+	stamina = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.stamina, 0.8, 0.4);
+	muscle_power = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.muscle_power, 0.8, 0.4);
+
+	cred = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.cred, 0.25);
+	cgreen = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.cgreen, 0.25);
+	cblue = new GenePropsOp_Legacy(0, 1, GeneProps::standard_values.cblue, 0.25);
+}
+
+GenePropsOps_AllChange05::GenePropsOps_AllChange05()
 {
 	use_normalizebiol4 = false;
+
+	constexpr float CHANGE = 0.5;
 	auto fields = { length,curvedness,weight,friction,muscle_power,assimilation,stamina,ingestion,twist,energy,cred,cgreen,cblue };
 	for (auto f : fields)
 	{
-		auto f_gpo = dynamic_cast<GenePropsOp_Old*>(f);
+		auto f_gpo = dynamic_cast<GenePropsOp_Legacy*>(f);
 		if (f_gpo)
-			f_gpo->change = f_gpo->revchange = 0.5;
-	}
+			f_gpo->change = f_gpo->revchange = CHANGE;
+	}
+
+	delete curvedness;
+	curvedness = new GenePropsOp_Legacy(-M_PI_2, M_PI_2, GeneProps::standard_values.curvedness, CHANGE);
 }
 
@@ -298,10 +257,27 @@
 }
 
-
-GenePropsOps* GeneProps::standard_ops = NULL;
-GenePropsOps* GeneProps::getStandardOps()
-{
-	if (!standard_ops)
-		standard_ops = new GenePropsOps_New05();
-	return standard_ops;
-}
+GenePropsOps* GeneProps::getAllChange05Ops()
+{
+	static GenePropsOps_AllChange05 ops;
+	return &ops;
+}
+
+GenePropsOps* GeneProps::getLegacyOps()
+{
+	static GenePropsOps_Legacy ops;
+	return &ops;
+}
+
+static GenePropsOps* default_ops = NULL;
+
+GenePropsOps* GeneProps::getDefaultOps()
+{
+	if (!default_ops)
+		default_ops = getAllChange05Ops();
+	return default_ops;
+}
+
+void GeneProps::setDefaultOps(GenePropsOps* ops)
+{
+	default_ops = ops;
+}
