diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c
index 461079b9c..aebe55805 100644
--- a/src/common/gamecode/economy.c
+++ b/src/common/gamecode/economy.c
@@ -245,7 +245,7 @@ expandrecruit(region * r, request * recruitorders)
{
/* Rekrutierung */
- int i, n, p = rpeasants(r), h = rhorses(r);
+ int i, n, p = rpeasants(r), h = rhorses(r), uruks = 0;
int rfrac = p / RECRUITFRACTION;
unit * u;
@@ -266,7 +266,7 @@ expandrecruit(region * r, request * recruitorders)
if (h <= 0) continue;
} else if ((rc->ec_flags & ECF_REC_ETHEREAL) == 0) {
/* recruit from peasants if any space left */
- if (n >= rfrac) continue;
+ if (n - (uruks+1)/2 >= rfrac) continue;
}
}
if (recruitcost) {
@@ -276,7 +276,10 @@ expandrecruit(region * r, request * recruitorders)
if ((rc->ec_flags & ECF_REC_UNLIMITED)==0) {
if (rc->ec_flags & ECF_REC_HORSES) h--; /* use a horse */
else {
- if ((rc->ec_flags & ECF_REC_ETHEREAL)==0) p--; /* use a peasant */
+ if ((rc->ec_flags & ECF_REC_ETHEREAL)==0) {
+ p--; /* use a peasant */
+ if(rc == new_race[RC_URUK]) uruks++;
+ }
n++;
}
}
@@ -286,7 +289,7 @@ expandrecruit(region * r, request * recruitorders)
}
assert(p>=0 && h>=0);
- rsetpeasants(r, p);
+ rsetpeasants(r, p+uruks/2);
rsethorses(r, h);
free(oa);
@@ -295,7 +298,7 @@ expandrecruit(region * r, request * recruitorders)
if (u->n >= 0) {
if (u->number)
u->hp += u->n * unit_max_hp(u);
- if (u->race == new_race[RC_ORC]) {
+ if (u->race == new_race[RC_URUK]) {
change_skill(u, SK_SWORD, skill_level(1) * u->n);
change_skill(u, SK_SPEAR, skill_level(1) * u->n);
}
@@ -365,12 +368,17 @@ recruit(region * r, unit * u, strlist * S,
return;
}
+#if RACE_ADJUSTMENTS
+ if (fval(r, RF_ORCIFIED) && u->faction->race != new_race[RC_URUK] &&
+#else
if (fval(r, RF_ORCIFIED) && u->faction->race != new_race[RC_ORC] &&
+#endif
!(u->faction->race->ec_flags & ECF_REC_HORSES)) {
cmistake(u, S->s, 238, MSG_EVENT);
return;
}
+
recruitcost = u->faction->race->recruitcost;
if (recruitcost) {
pl = getplane(r);
@@ -537,6 +545,11 @@ givemen(int n, unit * u, unit * u2, const char * cmd)
return;
} else if (u == u2) {
error = 10;
+#if RACE_ADJUSTMENTS
+ } else if (u->race == new_race[RC_URUK]) {
+ /* Uruks/Snotlings können nicht an Bauern übergeben werden. */
+ error = 307;
+#endif
} else if ((u && unit_has_cursed_item(u)) || (u2 && unit_has_cursed_item(u2))) {
error = 78;
} else if (fval(u, FL_LOCKED) || fval(u, FL_HUNGER) || is_cursed(u->attribs, C_SLAVE, 0)) {
diff --git a/src/common/gamecode/randenc.c b/src/common/gamecode/randenc.c
index 9b2ebb6ce..5de96cb56 100644
--- a/src/common/gamecode/randenc.c
+++ b/src/common/gamecode/randenc.c
@@ -1075,6 +1075,8 @@ randomevents(void)
drown(r);
}
+
+#if RACE_ADJUSTMENTS
/* Orks vermehren sich */
for (r = regions; r; r = r->next) {
@@ -1129,6 +1131,7 @@ randomevents(void)
}
}
}
+#endif
/* Talente von Dämonen verschieben sich und Dämonen fressen Bauern */
diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c
index 60cfb56e3..2e36bf600 100644
--- a/src/common/gamecode/report.c
+++ b/src/common/gamecode/report.c
@@ -1324,8 +1324,6 @@ describe(FILE * F, region * r, int partial, faction * f)
}
}
-extern const int wagetable[6][3];
-
void
statistics(FILE * F, region * r, faction * f)
{
diff --git a/src/common/gamecode/spy.c b/src/common/gamecode/spy.c
index 5f6330c5c..6a6c2017d 100644
--- a/src/common/gamecode/spy.c
+++ b/src/common/gamecode/spy.c
@@ -131,8 +131,8 @@ setstealth(unit * u, strlist * S)
/* Dämonen können sich nur als andere Spielerrassen tarnen */
if (u->race == new_race[RC_DAEMON]) {
race_t allowed[] = { RC_DWARF, RC_ELF, RC_ORC, RC_GOBLIN, RC_HUMAN,
- RC_TROLL, RC_DAEMON, RC_INSECT, RC_HALFLING, RC_CAT, RC_AQUARIAN,
- NORACE };
+ RC_TROLL, RC_DAEMON, RC_INSECT, RC_HALFLING, RC_CAT, RC_AQUARIAN,
+ RC_URUK, NORACE };
int i;
for (i=0;allowed[i]!=NORACE;++i) if (new_race[allowed[i]]==trace) break;
if (new_race[allowed[i]]==trace) {
diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c
index 797774f9d..eef17858c 100644
--- a/src/common/kernel/battle.c
+++ b/src/common/kernel/battle.c
@@ -682,10 +682,21 @@ weapon_skill(const weapon_type * wtype, const unit * u, boolean attacking)
skill = effskill(u, SK_WEAPONLESS);
if (skill==0) {
/* wenn kein waffenloser kampf, dann den rassen-defaultwert */
- if (attacking) {
- skill = u->race->at_default;
+ if(u->race == new_race[RC_URUK]) {
+ int sword = effskill(u, SK_SWORD);
+ int spear = effskill(u, SK_SPEAR);
+ skill = max(sword, spear) - 3;
+ if (attacking) {
+ skill = max(skill, u->race->at_default);
+ } else {
+ skill = max(skill, u->race->df_default);
+ }
} else {
- skill = u->race->df_default;
+ if (attacking) {
+ skill = u->race->at_default;
+ } else {
+ skill = u->race->df_default;
+ }
}
} else {
/* der rassen-defaultwert kann höher sein als der Talentwert von
diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c
index 0f0065ae1..390b1e003 100644
--- a/src/common/kernel/eressea.c
+++ b/src/common/kernel/eressea.c
@@ -2764,7 +2764,8 @@ wage(const region *r, const unit *u, boolean img)
if (b) esize = buildingeffsize(b, img);
if (u) {
- wage = wagetable[esize][old_race(u->race) == RC_ORC];
+ /* TODO: Snotling! */
+ wage = wagetable[esize][u->race == new_race[RC_ORC] || u->race == new_race[RC_URUK]];
if (fspecial(u->faction, FS_URBAN)) {
wage += wagetable[esize][3];
}
diff --git a/src/common/kernel/eressea.h b/src/common/kernel/eressea.h
index 67dadcd76..3c50b66a1 100644
--- a/src/common/kernel/eressea.h
+++ b/src/common/kernel/eressea.h
@@ -616,34 +616,35 @@ enum {
RC_HALFLING,
RC_CAT,
RC_AQUARIAN,
+ RC_URUK,
- RC_UNDEAD, /* 11 - Untoter */
+ RC_UNDEAD, /* 12 - Untoter */
RC_ILLUSION,
RC_FIREDRAGON,
RC_DRAGON,
RC_WYRM,
RC_TREEMAN,
- RC_BIRTHDAYDRAGON, /* 17 - Katzendrache*/
+ RC_BIRTHDAYDRAGON, /* 18 - Katzendrache*/
RC_DRACOID,
RC_SPECIAL,
RC_SPELL,
- RC_IRONGOLEM, /* 21 - Eisengolem */
+ RC_IRONGOLEM, /* 22 - Eisengolem */
RC_STONEGOLEM,
RC_SHADOW,
RC_SHADOWLORD,
- RC_IRONKEEPER, /* 25 - Bergwächter */
+ RC_IRONKEEPER, /* 26 - Bergwächter */
RC_ALP,
- RC_TOAD, /* 27 - Kröte */
+ RC_TOAD, /* 28 - Kröte */
RC_HIRNTOETER,
RC_PEASANT,
- RC_WOLF, /* 30 */
+ RC_WOLF, /* 31 */
RC_HOUSECAT,
RC_TUNNELWORM,
@@ -654,7 +655,7 @@ enum {
RC_UNICORN,
RC_WARG,
RC_WRAITH,
- RC_IMP, /* 40 */
+ RC_IMP, /* 41 */
RC_DREAMCAT,
RC_FEY,
RC_OWL,
@@ -664,7 +665,7 @@ enum {
RC_OCEANTURTLE,
RC_KRAKEN,
RC_SEASERPENT,
- RC_SHADOWKNIGHT, /* 50 */
+ RC_SHADOWKNIGHT, /* 51 */
RC_CENTAUR,
@@ -675,10 +676,11 @@ enum {
RC_GHOUL,
RC_GHOUL_LORD,
- RC_MUS_SPIRIT, /* 58 */
- RC_GNOME, /* 59 */
- RC_TEMPLATE, /* 60 */
- RC_CLONE, /* 61 */
+ RC_MUS_SPIRIT, /* 59 */
+ RC_GNOME, /* 60 */
+ RC_TEMPLATE, /* 61 */
+ RC_CLONE, /* 62 */
+
MAXRACES,
NORACE = (race_t) - 1
diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c
index 6a277b7e0..fe0da3ec0 100644
--- a/src/common/kernel/race.c
+++ b/src/common/kernel/race.c
@@ -155,7 +155,7 @@ const struct race_syn race_synonyms[] = {
/* required for old_race, do not change order! */
static const char * oldracenames[MAXRACES] = {
- "dwarf", "elf", "orc", "goblin", "human", "troll", "demon", "insect", "halfling", "cat", "aquarian",
+ "dwarf", "elf", "orc", "goblin", "human", "troll", "demon", "insect", "halfling", "cat", "aquarian", "uruk"
"undead", "illusion",
"young dragon", "dragon", "wyrm", "ent", "catdragon", "dracoid",
"special", "spell",
@@ -208,6 +208,7 @@ give_starting_equipment(struct region *r, struct unit *u)
set_show_item(u->faction, I_FEENSTIEFEL);
break;
case RC_ORC:
+ case RC_URUK:
set_level(u, SK_SPEAR, 4);
set_level(u, SK_SWORD, 4);
set_level(u, SK_CROSSBOW, 4);
diff --git a/src/res/de/messages.xml b/src/res/de/messages.xml
index a9149e117..0bc2d2b01 100644
--- a/src/res/de/messages.xml
+++ b/src/res/de/messages.xml
@@ -4287,7 +4287,7 @@
"$unit($unit) in $region($region): '$command' - options ZIP and BZIP2 can only be switched, not turned off."
-
+
@@ -4299,6 +4299,19 @@
+
+
+
+
+
+
+
+
+
+ "$unit($unit) in $region($region): '$command' - Orks sind keine Bauern."
+
+
+
diff --git a/src/res/de/strings.xml b/src/res/de/strings.xml
index bca336294..b301347b7 100644
--- a/src/res/de/strings.xml
+++ b/src/res/de/strings.xml
@@ -1861,6 +1861,12 @@
Orks
+
+ Ork
+
+
+ Orks
+
Riesenschildkröte
@@ -2013,6 +2019,12 @@
Ork
+
+ Orks
+
+
+ Ork
+
Zombie
diff --git a/src/res/en/strings.xml b/src/res/en/strings.xml
index 3a1278d0a..a49c5f25f 100644
--- a/src/res/en/strings.xml
+++ b/src/res/en/strings.xml
@@ -1691,8 +1691,14 @@
orc
+ orcs
+
+
orc
+
+ orcs
+
giant turtle
diff --git a/src/res/races.xml b/src/res/races.xml
index 2e5677837..ebc8345b2 100644
--- a/src/res/races.xml
+++ b/src/res/races.xml
@@ -1093,7 +1093,7 @@
-
+
@@ -1173,7 +1173,7 @@
-
+
@@ -1204,4 +1204,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+