Browse Source

Merge pull request #1166 from Predelnik/PR2

Clean up DirOK (bin exact)
pull/114/head
Robin Eklind 7 years ago committed by GitHub
parent
commit
4bc0b26b50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 155
      Source/monster.cpp

155
Source/monster.cpp

@ -4689,118 +4689,57 @@ void FreeMonsters()
BOOL DirOK(int i, int mdir) BOOL DirOK(int i, int mdir)
{ {
int v2; // ebx int fx, fy;
int v3; // esi int x, y;
int v4; // ebx int mcount, mi;
int v5; // edi
int v6; // esi
int v7; // edi
BOOLEAN v8; // zf
int v9; // edx
unsigned char *v11; // ebx
unsigned char v12; // al
int v13; // edx
int v14; // eax
int v15; // edi
int v16; // ecx
signed int j; // esi
int v18; // eax
BOOLEAN v19; // zf
int v20; // eax
int v21; // [esp+Ch] [ebp-14h]
int v22; // [esp+10h] [ebp-10h]
int v23; // [esp+14h] [ebp-Ch]
int a1; // [esp+18h] [ebp-8h]
int v25; // [esp+1Ch] [ebp-4h]
int v26; // [esp+1Ch] [ebp-4h]
v2 = i;
v3 = mdir;
v25 = mdir;
a1 = i;
if ((DWORD)i >= MAXMONSTERS) if ((DWORD)i >= MAXMONSTERS)
app_fatal("DirOK: Invalid monster %d", i); app_fatal("DirOK: Invalid monster %d", i);
v4 = v2; fx = monster[i]._mx + offset_x[mdir];
v5 = offset_y[v3]; fy = monster[i]._my + offset_y[mdir];
v6 = monster[v4]._mx + offset_x[v3]; if (fy < 0 || fy >= MAXDUNY || fx < 0 || fx >= MAXDUNX || !PosOkMonst(i, fx, fy))
v7 = monster[v4]._my + v5; return FALSE;
if (v7 < 0 || v7 >= MAXDUNY || v6 < 0 || v6 >= MAXDUNX || !PosOkMonst(a1, v6, v7)) if (mdir == DIR_E) {
return 0; if (SolidLoc(fx, fy + 1) || dFlags[fx][fy + 1] & DFLAG_MONSTER)
if (v25 == DIR_E) { return FALSE;
if (!SolidLoc(v6, v7 + 1)) { }
v8 = (dFlags[v6][v7 + 1] & DFLAG_MONSTER) == 0; if (mdir == DIR_W) {
goto LABEL_18; if (SolidLoc(fx + 1, fy) || dFlags[fx + 1][fy] & DFLAG_MONSTER)
} return FALSE;
return 0; }
} if (mdir == DIR_N) {
if (v25 == DIR_W) { if (SolidLoc(fx + 1, fy) || SolidLoc(fx, fy + 1))
if (SolidLoc(v6 + 1, v7)) return FALSE;
return 0; }
v8 = (dFlags[v6 + 1][v7] & DFLAG_MONSTER) == 0; if (mdir == DIR_S)
} else { if (SolidLoc(fx - 1, fy) || SolidLoc(fx, fy - 1))
if (v25 == DIR_N) { return FALSE;
if (SolidLoc(v6 + 1, v7)) if (monster[i].leaderflag == 1) {
return 0; if (abs(fx - monster[monster[i].leader]._mfutx) >= 4
v9 = v7 + 1; || abs(fy - monster[monster[i].leader]._mfuty) >= 4) {
} else { return FALSE;
if (v25) }
goto LABEL_24; return TRUE;
if (SolidLoc(v6 - 1, v7)) }
return 0; if (monster[i]._uniqtype == 0 || !(UniqMonst[monster[i]._uniqtype - 1].mUnqAttr & 2))
v9 = v7 - 1; return TRUE;
} mcount = 0;
v8 = SolidLoc(v6, v9) == 0; for (x = fx - 3; x <= fx + 3; x++) {
} for (y = fy - 3; y <= fy + 3; y++) {
LABEL_18: if (y < 0 || y >= MAXDUNY || x < 0 || x >= MAXDUNX)
if (!v8) continue;
return 0; mi = dMonster[x][y];
LABEL_24: if (mi < 0) mi = -mi;
if (monster[v4].leaderflag == 1) { if (mi != 0) mi--;
v11 = &monster[v4].leader; if (monster[mi].leaderflag == 1
if (abs(v6 - monster[(unsigned char)*v11]._mfutx) >= 4 && monster[mi].leader == i
|| abs(v7 - monster[(unsigned char)*v11]._mfuty) >= 4) { && monster[mi]._mfutx == x
return 0; && monster[mi]._mfuty == y) {
} mcount++;
return 1;
}
v12 = monster[v4]._uniqtype;
if (v12 == 0 || !(UniqMonst[v12 - 1].mUnqAttr & 2))
return 1;
v26 = 0;
v13 = v6 - 3;
v21 = v6 + 3;
if (v6 - 3 <= v6 + 3) {
v14 = v7 - 3;
v15 = v7 + 3;
v23 = v14;
v22 = v15;
v16 = 112 * v13;
do {
for (j = v23; j <= v15; ++j) {
if (j >= 0 && j < MAXDUNY && v16 >= 0 && v16 < MAXDUNX * 112) {
v18 = dMonster[0][v16 + j];
v19 = v18 == 0;
if (v18 < 0) {
v18 = -v18;
v19 = v18 == 0;
}
if (!v19)
--v18;
v20 = v18;
if (monster[v20].leaderflag == 1
&& (unsigned char)monster[v20].leader == a1
&& monster[v20]._mfutx == v13
&& monster[v20]._mfuty == j) {
++v26;
}
}
v15 = v22;
} }
++v13; }
v16 += 112;
} while (v13 <= v21);
} }
return v26 == (unsigned char)monster[v4].packsize; return mcount == monster[i].packsize;
} }
BOOL PosOkMissile(int x, int y) BOOL PosOkMissile(int x, int y)

Loading…
Cancel
Save