Browse Source

Use Point stuff in DirOK

pull/2113/head
Vladimir Olteanu 5 years ago committed by Anders Jenbo
parent
commit
f1a3ace440
  1. 18
      Source/monster.cpp

18
Source/monster.cpp

@ -4681,9 +4681,6 @@ void FreeMonsters()
bool DirOK(int i, Direction mdir) bool DirOK(int i, Direction mdir)
{ {
int x, y;
int mcount, mi;
commitment((DWORD)i < MAXMONSTERS, i); commitment((DWORD)i < MAXMONSTERS, i);
Point position = monster[i].position.tile; Point position = monster[i].position.tile;
Point futurePosition = position + mdir; Point futurePosition = position + mdir;
@ -4702,20 +4699,18 @@ bool DirOK(int i, Direction mdir)
if (SolidLoc(position + DIR_SW) || SolidLoc(position + DIR_SE)) if (SolidLoc(position + DIR_SW) || SolidLoc(position + DIR_SE))
return false; return false;
if (monster[i].leaderflag == 1) { if (monster[i].leaderflag == 1) {
if (abs(futurePosition.x - monster[monster[i].leader].position.future.x) >= 4 if (futurePosition.WalkingDistance(monster[monster[i].leader].position.future) >= 4)
|| abs(futurePosition.y - monster[monster[i].leader].position.future.y) >= 4) {
return false; return false;
}
return true; return true;
} }
if (monster[i]._uniqtype == 0 || !(UniqMonst[monster[i]._uniqtype - 1].mUnqAttr & 2)) if (monster[i]._uniqtype == 0 || !(UniqMonst[monster[i]._uniqtype - 1].mUnqAttr & 2))
return true; return true;
mcount = 0; int mcount = 0;
for (x = futurePosition.x - 3; x <= futurePosition.x + 3; x++) { for (int x = futurePosition.x - 3; x <= futurePosition.x + 3; x++) {
for (y = futurePosition.y - 3; y <= futurePosition.y + 3; y++) { for (int y = futurePosition.y - 3; y <= futurePosition.y + 3; y++) {
if (y < 0 || y >= MAXDUNY || x < 0 || x >= MAXDUNX) if (y < 0 || y >= MAXDUNY || x < 0 || x >= MAXDUNX)
continue; continue;
mi = dMonster[x][y]; int mi = dMonster[x][y];
if (mi < 0) if (mi < 0)
mi = -mi; mi = -mi;
if (mi != 0) if (mi != 0)
@ -4723,8 +4718,7 @@ bool DirOK(int i, Direction mdir)
// BUGFIX: should only run pack member check if mi was non-zero prior to executing the body of the above if-statement. // BUGFIX: should only run pack member check if mi was non-zero prior to executing the body of the above if-statement.
if (monster[mi].leaderflag == 1 if (monster[mi].leaderflag == 1
&& monster[mi].leader == i && monster[mi].leader == i
&& monster[mi].position.future.x == x && monster[mi].position.future == Point { x, y }) {
&& monster[mi].position.future.y == y) {
mcount++; mcount++;
} }
} }

Loading…
Cancel
Save