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 @@ - + - + + + + + +