diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index d490addbe..7d3b8c400 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -1068,8 +1068,18 @@ terminate(troop dt, troop at, int type, const char *damage, boolean missile) sd = weapon_effskill(dt, at, weapon, false, false); if (weapon!=NULL) dwtype=weapon->type; - if (armor) ar += armor->prot; - if (shield) ar += shield->prot; + if (armor) { + ar += armor->prot; + if (armor->projectile>0 && chance(armor->projectile)) { + return false; + } + } + if (shield) { + ar += shield->prot; + if (shield->projectile>0 && chance(shield->projectile)) { + return false; + } + } /* natürliche Rüstung */ an = du->race->armor; diff --git a/src/common/kernel/item.h b/src/common/kernel/item.h index d592a94b0..73eed6380 100644 --- a/src/common/kernel/item.h +++ b/src/common/kernel/item.h @@ -185,6 +185,7 @@ typedef struct armor_type { double penalty; double magres; int prot; + float projectile; /* chance, dass ein projektil abprallt */ unsigned int flags; } armor_type; diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c index 847f0a586..80411b928 100644 --- a/src/common/kernel/race.c +++ b/src/common/kernel/race.c @@ -125,7 +125,6 @@ rc_new(const char * zName) rc->attack[0].type = AT_COMBATSPELL; rc->attack[1].type = AT_NONE; - rc->speed = 0; return rc; } diff --git a/src/common/kernel/xmlreader.c b/src/common/kernel/xmlreader.c index 32a9e9b98..af50dc520 100644 --- a/src/common/kernel/xmlreader.c +++ b/src/common/kernel/xmlreader.c @@ -638,6 +638,7 @@ xml_readarmor(xmlXPathContextPtr xpath, item_type * itype) if (xml_bvalue(node, "shield", false)) flags |= ATF_SHIELD; atype = new_armortype(itype, penalty, magres, ac, flags); + atype->projectile = (float)xml_fvalue(node, "projectile", 0.0); return atype; } diff --git a/src/res/e2k9/items.xml b/src/res/e2k9/items.xml index 28c53130c..9122f1e32 100644 --- a/src/res/e2k9/items.xml +++ b/src/res/e2k9/items.xml @@ -7,7 +7,7 @@ - +