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