diff --git a/src/common/gamecode/study.c b/src/common/gamecode/study.c
index ec9b5f0a3..37fab76b2 100644
--- a/src/common/gamecode/study.c
+++ b/src/common/gamecode/study.c
@@ -154,14 +154,20 @@ const attrib_type at_learning = {
static int
study_days(unit * student, skill_t sk)
{
- int speed = 30 + student->race->study_speed_base;
- if (student->race->study_speed) speed += student->race->study_speed[sk];
+ int speed = 30;
+ if (student->race->study_speed) {
+ speed += student->race->study_speed[sk];
+ }
+ if (speed<30) {
+ skill * sv = get_skill(student, sk);
+ if (sv==0) return 30;
+ }
return student->number * speed;
}
static int
teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk,
- boolean report, int * academy)
+ boolean report, int * academy)
{
teaching_info * teach = NULL;
attrib * a;
@@ -179,7 +185,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk,
return 0;
}
- n = study_days(student, sk);
+ n = 30;
a = a_find(student->attribs, &at_learning);
if (a!=NULL) {
teach = (teaching_info*)a->data.v;
@@ -487,6 +493,7 @@ study_speedup(unit * u)
}
return 1.0;
}
+
int
learn_cmd(unit * u, order * ord)
{
@@ -703,8 +710,8 @@ learn_cmd(unit * u, order * ord)
}
multi *= study_speedup(u);
-
- days = (int)((u->number * 30 + teach->value) * multi);
+ days = study_days(u, sk);
+ days = (int)((days + teach->value) * multi);
/* the artacademy currently improves the learning of entertainment
of all units in the region, to be able to make it cumulative with
diff --git a/src/common/kernel/race.h b/src/common/kernel/race.h
index 7cf79f6e5..bc1e1b101 100644
--- a/src/common/kernel/race.h
+++ b/src/common/kernel/race.h
@@ -75,7 +75,6 @@ typedef struct race {
const spell * precombatspell;
struct att attack[10];
char bonus[MAXSKILLS];
- char study_speed_base;
signed char * study_speed; /* study-speed-bonus in points/turn (0=30 Tage) */
boolean __remove_me_nonplayer;
int flags;
diff --git a/src/common/kernel/xmlreader.c b/src/common/kernel/xmlreader.c
index 1bbda02f5..32a9e9b98 100644
--- a/src/common/kernel/xmlreader.c
+++ b/src/common/kernel/xmlreader.c
@@ -1541,7 +1541,7 @@ parse_races(xmlDocPtr doc)
xmlChar * propValue;
race * rc;
xmlXPathObjectPtr result;
- int k;
+ int k, study_speed_base;
struct att * attack;
propValue = xmlGetProp(node, BAD_CAST "name");
@@ -1565,7 +1565,7 @@ parse_races(xmlDocPtr doc)
rc->speed = (float)xml_fvalue(node, "speed", 1.0F);
rc->hitpoints = xml_ivalue(node, "hp", 0);
rc->armor = (char)xml_ivalue(node, "ac", 0);
- rc->study_speed_base = xml_ivalue(node, "studyspeed", 0);
+ study_speed_base = xml_ivalue(node, "studyspeed", 0);
rc->at_default = (char)xml_ivalue(node, "unarmedattack", -2);
rc->df_default = (char)xml_ivalue(node, "unarmeddefense", -2);
@@ -1627,7 +1627,7 @@ parse_races(xmlDocPtr doc)
for (k=0;k!=result->nodesetval->nodeNr;++k) {
xmlNodePtr node = result->nodesetval->nodeTab[k];
int mod = xml_ivalue(node, "modifier", 0);
- int speed = xml_ivalue(node, "speed", 0);
+ int speed = xml_ivalue(node, "speed", study_speed_base);
skill_t sk;
propValue = xmlGetProp(node, BAD_CAST "name");
diff --git a/src/res/e2k9/races.xml b/src/res/e2k9/races.xml
index 1e24b51ac..1c7d58f2e 100644
--- a/src/res/e2k9/races.xml
+++ b/src/res/e2k9/races.xml
@@ -24,20 +24,25 @@
-
+
-
+
+
+
+
+
+