Browse Source

[hellfire] CheckMissileCol

pull/959/head
Anders Jenbo 5 years ago
parent
commit
1b2ebd1ce3
  1. 85
      Source/missiles.cpp

85
Source/missiles.cpp

@ -951,7 +951,12 @@ BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEA
return FALSE;
}
BOOL Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, int mtype, BOOLEAN shift)
BOOL Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, int mtype, BOOLEAN shift
#ifdef HELLFIRE
,
BOOLEAN *blocked
#endif
)
{
int tac, resper, dam, blk, blkper, hper, hit;
@ -1068,10 +1073,19 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
{
int oi;
#ifdef HELLFIRE
int dir, mAnimFAmt;
BOOLEAN blocked;
#endif
if (i >= MAXMISSILES || i < 0)
return;
if (mx >= MAXDUNX || mx < 0)
return;
if (my >= MAXDUNY || my < 0)
return;
if (missile[i]._micaster != TARGET_BOTH && missile[i]._misource != -1) {
#else
if (missile[i]._miAnimType != MFILE_FIREWAL && missile[i]._misource != -1) {
#endif
if (missile[i]._micaster == TARGET_MONSTERS) {
if (dMonster[mx][my] > 0) {
if (MonsterMHit(
@ -1111,9 +1125,28 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
maxdam,
missile[i]._midist,
missile[i]._mitype,
shift)) {
if (!nodel)
missile[i]._mirange = 0;
shift
#ifdef HELLFIRE
,
&blocked
#endif
)) {
#ifdef HELLFIRE
if (blocked) {
dir = missile[i]._mimfnum + (random_(10, 2) ? 1 : -1);
mAnimFAmt = misfiledata[missile[i]._miAnimType].mAnimFAmt;
if (dir < 0)
dir = mAnimFAmt - 1;
else if (dir > mAnimFAmt)
dir = 0;
SetMissDir(i, dir);
} else
#endif
{
if (!nodel)
missile[i]._mirange = 0;
}
missile[i]._miHitFlag = TRUE;
}
} else {
@ -1140,14 +1173,32 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
&blocked
#endif
)) {
if (!nodel)
missile[i]._mirange = 0;
#ifdef HELLFIRE
if (blocked) {
dir = missile[i]._mimfnum + (random_(10, 2) ? 1 : -1);
mAnimFAmt = misfiledata[missile[i]._miAnimType].mAnimFAmt;
if (dir < 0)
dir = mAnimFAmt - 1;
else if (dir > mAnimFAmt)
dir = 0;
SetMissDir(i, dir);
} else
#endif
{
if (!nodel)
missile[i]._mirange = 0;
}
missile[i]._miHitFlag = TRUE;
}
}
} else {
if (dMonster[mx][my] > 0) {
#ifdef HELLFIRE
if (missile[i]._micaster == TARGET_BOTH) {
#else
if (missile[i]._miAnimType == MFILE_FIREWAL) {
#endif
if (MonsterMHit(
missile[i]._misource,
dMonster[mx][my] - 1,
@ -1169,12 +1220,26 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
if (dPlayer[mx][my] > 0
&& PlayerMHit(dPlayer[mx][my] - 1, -1, missile[i]._midist, mindam, maxdam, missile[i]._mitype, shift, missile[i]._miAnimType == MFILE_FIREWAL
#ifdef HELLFIRE
,
|| missile[i]._miAnimType == MFILE_LGHNING,
&blocked
#endif
)) {
if (!nodel)
missile[i]._mirange = 0;
#ifdef HELLFIRE
if (blocked) {
dir = missile[i]._mimfnum + (random_(10, 2) ? 1 : -1);
mAnimFAmt = misfiledata[missile[i]._miAnimType].mAnimFAmt;
if (dir < 0)
dir = mAnimFAmt - 1;
else if (dir > mAnimFAmt)
dir = 0;
SetMissDir(i, dir);
} else
#endif
{
if (!nodel)
missile[i]._mirange = 0;
}
missile[i]._miHitFlag = TRUE;
}
}

Loading…
Cancel
Save