Browse Source

Fix min diff in PlrHitMonst (#1281)

pull/136/head
galaxyhaxz 7 years ago committed by Anders Jenbo
parent
commit
26932a843f
  1. 49
      Source/player.cpp

49
Source/player.cpp

@ -2292,7 +2292,7 @@ BOOL WeaponDur(int pnum, int durrnd)
BOOL PlrHitMonst(int pnum, int m)
{
BOOL rv, ret;
int hit, hper, mind, maxd, dam, lvl, phanditype, mClass, skdam, tac;
int hit, hper, mind, maxd, ddp, dam, skdam, phanditype, tmac;
if ((DWORD)m >= MAXMONSTERS) {
app_fatal("PlrHitMonst: illegal monster %d", m);
@ -2321,7 +2321,8 @@ BOOL PlrHitMonst(int pnum, int m)
hit = 0;
}
hper = (plr[pnum]._pDexterity >> 1) + plr[pnum]._pLevel + 50 - (monster[m].mArmorClass - plr[pnum]._pIEnAc);
tmac = monster[m].mArmorClass - plr[pnum]._pIEnAc;
hper = (plr[pnum]._pDexterity >> 1) + plr[pnum]._pLevel + 50 - tmac;
if (plr[pnum]._pClass == PC_WARRIOR) {
hper += 20;
}
@ -2342,12 +2343,13 @@ BOOL PlrHitMonst(int pnum, int m)
if (hit < hper) {
#endif
mind = plr[pnum]._pIMinDam;
maxd = random(5, plr[pnum]._pIMaxDam - mind + 1);
dam = maxd + mind;
dam += plr[pnum]._pDamageMod + plr[pnum]._pIBonusDamMod + dam * plr[pnum]._pIBonusDam / 100;
maxd = plr[pnum]._pIMaxDam;
dam = random(5, maxd - mind + 1) + mind;
dam += dam * plr[pnum]._pIBonusDam / 100;
dam += plr[pnum]._pDamageMod + plr[pnum]._pIBonusDamMod;
if (plr[pnum]._pClass == PC_WARRIOR) {
lvl = plr[pnum]._pLevel;
if (random(6, 100) < lvl) {
ddp = plr[pnum]._pLevel;
if (random(6, 100) < ddp) {
dam *= 2;
}
}
@ -2360,8 +2362,7 @@ BOOL PlrHitMonst(int pnum, int m)
phanditype = ITYPE_MACE;
}
mClass = monster[m].MData->mMonstClass;
switch (mClass) {
switch (monster[m].MData->mMonstClass) {
case MC_UNDEAD:
if (phanditype == ITYPE_SWORD) {
dam -= dam >> 1;
@ -2384,18 +2385,18 @@ BOOL PlrHitMonst(int pnum, int m)
dam *= 3;
}
skdam = dam << 6;
dam <<= 6;
if (pnum == myplr) {
monster[m]._mhitpoints -= skdam;
monster[m]._mhitpoints -= dam;
}
if (plr[pnum]._pIFlags & ISPL_RNDSTEALLIFE) {
tac = random(7, skdam >> 3);
plr[pnum]._pHitPoints += tac;
skdam = random(7, dam >> 3);
plr[pnum]._pHitPoints += skdam;
if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) {
plr[pnum]._pHitPoints = plr[pnum]._pMaxHP;
}
plr[pnum]._pHPBase += tac;
plr[pnum]._pHPBase += skdam;
if (plr[pnum]._pHPBase > plr[pnum]._pMaxHPBase) {
plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase;
}
@ -2403,16 +2404,16 @@ BOOL PlrHitMonst(int pnum, int m)
}
if (plr[pnum]._pIFlags & (ISPL_STEALMANA_3 | ISPL_STEALMANA_5) && !(plr[pnum]._pIFlags & ISPL_NOMANA)) {
if (plr[pnum]._pIFlags & ISPL_STEALMANA_3) {
tac = 3 * skdam / 100;
skdam = 3 * dam / 100;
}
if (plr[pnum]._pIFlags & ISPL_STEALMANA_5) {
tac = 5 * skdam / 100;
skdam = 5 * dam / 100;
}
plr[pnum]._pMana += tac;
plr[pnum]._pMana += skdam;
if (plr[pnum]._pMana > plr[pnum]._pMaxMana) {
plr[pnum]._pMana = plr[pnum]._pMaxMana;
}
plr[pnum]._pManaBase += tac;
plr[pnum]._pManaBase += skdam;
if (plr[pnum]._pManaBase > plr[pnum]._pMaxManaBase) {
plr[pnum]._pManaBase = plr[pnum]._pMaxManaBase;
}
@ -2420,16 +2421,16 @@ BOOL PlrHitMonst(int pnum, int m)
}
if (plr[pnum]._pIFlags & (ISPL_STEALLIFE_3 | ISPL_STEALLIFE_5)) {
if (plr[pnum]._pIFlags & ISPL_STEALLIFE_3) {
tac = 3 * skdam / 100;
skdam = 3 * dam / 100;
}
if (plr[pnum]._pIFlags & ISPL_STEALLIFE_5) {
tac = 5 * skdam / 100;
skdam = 5 * dam / 100;
}
plr[pnum]._pHitPoints += tac;
plr[pnum]._pHitPoints += skdam;
if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) {
plr[pnum]._pHitPoints = plr[pnum]._pMaxHP;
}
plr[pnum]._pHPBase += tac;
plr[pnum]._pHPBase += skdam;
if (plr[pnum]._pHPBase > plr[pnum]._pMaxHPBase) {
plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase;
}
@ -2452,13 +2453,13 @@ BOOL PlrHitMonst(int pnum, int m)
}
} else {
if (monster[m]._mmode == MM_STONE) {
M_StartHit(m, pnum, skdam);
M_StartHit(m, pnum, dam);
monster[m]._mmode = MM_STONE;
} else {
if (plr[pnum]._pIFlags & ISPL_KNOCKBACK) {
M_GetKnockback(m);
}
M_StartHit(m, pnum, skdam);
M_StartHit(m, pnum, dam);
}
}
rv = TRUE;

Loading…
Cancel
Save