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