From 4e986007383de567340d25a20c931be4d38828de Mon Sep 17 00:00:00 2001 From: Christian Schlittchen Date: Sat, 27 Apr 2002 14:46:27 +0000 Subject: [PATCH] =?UTF-8?q?-=20Armbrust=C3=A4nderung=20(#define=20CHANGED?= =?UTF-8?q?=5FCROSSBOWS=201)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/items/weapons.c | 14 ++++++--- src/common/kernel/battle.c | 39 ++++++++++++++++--------- src/common/kernel/item.h | 1 + src/common/settings-eressea.h | 1 + src/common/settings-tutorial.h | 11 +++---- src/common/settings-vinyambar-classic.h | 1 + src/common/settings-vinyambar-murder.h | 1 + src/common/settings-vinyambar.h | 1 + 8 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/common/items/weapons.c b/src/common/items/weapons.c index 59db24bfe..91129bf24 100644 --- a/src/common/items/weapons.c +++ b/src/common/items/weapons.c @@ -84,11 +84,12 @@ enum { RL_NONE }; -/* Schadenstypen */ +/* damage types */ -#define CUT (1<<0) -#define PIERCE (1<<1) -#define BASH (1<<2) +#define CUT (1<<0) +#define PIERCE (1<<1) +#define BASH (1<<2) +#define ARMORPIERCING (1<<3) typedef struct weapondata { double magres; @@ -124,7 +125,11 @@ static weapondata weapontable[WP_MAX + 1] = /* Langbogen */ {0.00, "1d11+1", "1d11+1", I_LONGBOW, SK_LONGBOW, 0, 0, true, false, { RL_NONE, 0 }, PIERCE }, /* Armbrust */ +#if CHANGED_CROSSBOWS == 1 + {0.00, "3d3+5", "3d3+5", I_CROSSBOW, SK_CROSSBOW, 0, 0, true, false, { RL_CROSSBOW, 2 }, PIERCE | ARMORPIERCING }, +#else {0.00, "3d3+5", "3d3+5", I_CROSSBOW, SK_CROSSBOW, 0, 0, true, false, { RL_CROSSBOW, 1 }, PIERCE }, +#endif /* Speer */ {0.00, "1d10+0", "1d12+2", I_SPEAR, SK_SPEAR, 0, 0, false, false, { RL_NONE, 0}, PIERCE }, /* Zweihänder */ @@ -304,6 +309,7 @@ init_oldweapons(void) if (weapontable[w].damage_type & CUT) wflags |= WTF_CUT; if (weapontable[w].damage_type & PIERCE) wflags |= WTF_PIERCE; if (weapontable[w].damage_type & BASH) wflags |= WTF_BLUNT; + if (weapontable[w].damage_type & ARMORPIERCING) wflags |= WTF_ARMORPIERCING; damage[0] = weapontable[w].damfoot; damage[1] = weapontable[w].damhorse; diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index af1290f31..c9cfa0bf8 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -1000,15 +1000,20 @@ terminate(troop dt, troop at, int type, const char *damage, boolean missile) int ar, an, am; int armor = select_armor(dt); int shield = select_shield(dt); - - int da = dice_rand(damage); - int rda, sk = 0, sd; - boolean magic = false; - + const weapon_type *dwtype = NULL; const weapon_type *awtype = NULL; const weapon * weapon; + int rda, sk = 0, sd; + boolean magic = false; + int da = dice_rand(damage); + + if(fval(au, UFL_WERE)) { + int level = fspecial(du->faction, FS_LYCANTROPE); + da += level; + } + switch (type) { case AT_STANDARD: weapon = select_weapon(at, true, true); @@ -1030,20 +1035,28 @@ 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; - /* Magischer Schaden durch Sprüche oder magische Waffen? */ - ar = armordata[armor].prot; ar += armordata[shield].prot; + /* natürliche Rüstung */ an = du->race->armor; - if(fval(du, UFL_WERE)) { - int level = fspecial(du->faction, FS_LYCANTROPE); - an += level; - da += level; - } + /* magische Rüstung durch Artefakte oder Sprüche */ - /* Momentan nur Trollgürtel */ + /* Momentan nur Trollgürtel und Werwolf-Eigenschaft */ am = select_magicarmor(dt); + if(fval(du, UFL_WERE)) { + /* this counts as magical armor */ + int level = fspecial(du->faction, FS_LYCANTROPE); + am += level; + } + +#if CHANGED_CROSSBOWS == 1 + if(fval(awtype,ARMORPIERCING)) { + /* crossbows */ + ar /= 2; + an /= 2; + } +#endif /* natürliche Rüstung ist halbkumulativ */ if (ar>0) { diff --git a/src/common/kernel/item.h b/src/common/kernel/item.h index 8c75ceb28..28fc896af 100644 --- a/src/common/kernel/item.h +++ b/src/common/kernel/item.h @@ -181,6 +181,7 @@ typedef struct weapon_mod { #define WTF_CUT 0x08 #define WTF_BLUNT 0x10 #define WTF_BOW 0x20 /* elves like 'em */ +#define WTF_ARMORPIERCING 0x40 /* armor has only half value */ typedef struct weapon_type { const item_type * itype; diff --git a/src/common/settings-eressea.h b/src/common/settings-eressea.h index 5aded6b9a..28c40bb52 100644 --- a/src/common/settings-eressea.h +++ b/src/common/settings-eressea.h @@ -35,4 +35,5 @@ #define RESOURCE_QUANTITY 1.0 #define RECRUITFRACTION 5 #define CATAPULT_AMMUNITION 0 /* Gebaut werden kann sie auch mit 0! */ +#define CHANGED_CROSSBOWS 0 diff --git a/src/common/settings-tutorial.h b/src/common/settings-tutorial.h index 09f0e81ba..872ed7e85 100644 --- a/src/common/settings-tutorial.h +++ b/src/common/settings-tutorial.h @@ -30,9 +30,10 @@ #define SKILLPOINTS 0 #define NEW_MIGRATION 1 #define PEASANTS_DO_NOT_STARVE 0 -#define GUARD_DISABLES_RECRUIT 1 -#define GUARD_DISABLES_PRODUCTION 1 -#define RESOURCE_QUANTITY 0.5 -#define RECRUITFRACTION 5 -#define CATAPULT_AMMUNITION 1 +#define GUARD_DISABLES_RECRUIT 0 +#define GUARD_DISABLES_PRODUCTION 0 +#define RESOURCE_QUANTITY 1.0 +#define RECRUITFRACTION 10 +#define CATAPULT_AMMUNITION 0 +#define CHANGED_CROSSBOWS 0 diff --git a/src/common/settings-vinyambar-classic.h b/src/common/settings-vinyambar-classic.h index 830dd27ea..d35702e65 100644 --- a/src/common/settings-vinyambar-classic.h +++ b/src/common/settings-vinyambar-classic.h @@ -33,4 +33,5 @@ #define RESOURCE_QUANTITY 1.0 #define RECRUITFRACTION 20 #define CATAPULT_AMMUNITION 0 +#define CHANGED_CROSSBOWS 0 diff --git a/src/common/settings-vinyambar-murder.h b/src/common/settings-vinyambar-murder.h index 77a7658bc..4bc4d5cf1 100644 --- a/src/common/settings-vinyambar-murder.h +++ b/src/common/settings-vinyambar-murder.h @@ -35,6 +35,7 @@ #define RESOURCE_QUANTITY 1.0 #define RECRUITFRACTION 5 #define CATAPULT_AMMUNITION 1 +#define CHANGED_CROSSBOWS 0 #define VICTORY_CONDITION VICTORY_MURDER #define VICTORY_DELAY 4 diff --git a/src/common/settings-vinyambar.h b/src/common/settings-vinyambar.h index 3a5c0806c..304c74a45 100644 --- a/src/common/settings-vinyambar.h +++ b/src/common/settings-vinyambar.h @@ -33,4 +33,5 @@ #define RESOURCE_QUANTITY 1.0 #define RECRUITFRACTION 20 #define CATAPULT_AMMUNITION 0 +#define CHANGED_CROSSBOWS 0