Date: Thursday October 12, 2000 @ 11:10 Author: peterm Update of /home/cvs/CVS/crossfire/server In directory boltzmann.eecs.berkeley.edu:/tmp/cvs-serv16722 Modified Files: attack.c Log Message: Patch from AV which makes poison attack savethrows depend on the level difference between the attacker and victim. --PeterM **************************************** Index: crossfire/server/attack.c diff -u crossfire/server/attack.c:1.14 crossfire/server/attack.c:1.15 --- crossfire/server/attack.c:1.14 Wed Jun 21 02:34:56 2000 +++ crossfire/server/attack.c Thu Oct 12 11:10:35 2000 @@ -1,6 +1,6 @@ /* * static char *rcsid_attack_c = - * "$Id: attack.c,v 1.14 2000/06/21 09:34:56 jec Exp $"; + * "$Id: attack.c,v 1.15 2000/10/12 18:10:35 peterm Exp $"; */ /* CrossFire, A Multiplayer game for X-windows @@ -540,9 +540,10 @@ int hit_player_attacktype(object *op, object *hitter, int dam, uint32 attacktype, int magic) { - + int does_slay=0; - + int level_diff; /* for special attacktypes (paralyze, etc) */ + #ifdef ATTACK_DEBUG LOG(llevDebug, "\thit_player_attacktype: attacktype %x, dam %d\n", attacktype, dam); @@ -587,11 +588,14 @@ } else if (attacktype & (AT_CONFUSION|AT_POISON|AT_SLOW|AT_PARALYZE|AT_FEAR|AT_CANCELLATION| AT_DEPLETE|AT_BLIND)) { + /* chance for inflicting a special attack depends on the + difference between attacker's and defender's level */ + level_diff = MIN(110, MAX(0, op->level - hitter->level)); if (op->speed && (QUERY_FLAG(op, FLAG_MONSTER) || op->type==PLAYER) && !(RANDOM()%((attacktype&AT_SLOW?6:3))) && (RANDOM()%20+1+((op->protected&attacktype)?4:0)-((op->vulnerable&attacktype)?4:0) - < savethrow[op->level])) { + < savethrow[level_diff])) { /* Player has been hit by something */ if (attacktype & AT_CONFUSION) confuse_player(op,hitter,dam); else if (attacktype & AT_POISON) poison_player(op,hitter,dam); @@ -1123,10 +1127,11 @@ tmp->stats.food+=dam; /* more damage, longer poisoning */ if(op->type==PLAYER) { - tmp->stats.Con= -(dam/4+1); - tmp->stats.Str= -(dam/3+2); - tmp->stats.Dex= -(dam/6+1); - tmp->stats.Int= -dam/7; + /* player looses stats, maximum is -10 of each */ + tmp->stats.Con= MAX(-(dam/4+1), -10); + tmp->stats.Str= MAX(-(dam/3+2), -10); + tmp->stats.Dex= MAX(-(dam/6+1), -10); + tmp->stats.Int= MAX(-dam/7, -10); SET_FLAG(tmp,FLAG_APPLIED); fix_player(op); new_draw_info(NDI_UNIQUE, 0,op,"You suddenly feel very ill.");