Browse Source

Clean up CheckMissileCol

pull/124/head
Anders Jenbo 7 years ago
parent
commit
f22984027a
  1. 253
      Source/missiles.cpp
  2. 2
      Source/missiles.h

253
Source/missiles.cpp

@ -951,167 +951,124 @@ BOOL Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, int mtype, B
return FALSE;
}
void CheckMissileCol(int i, int mindam, int maxdam, BOOLEAN shift, int mx, int my, int nodel)
{
int v7; // ebx
int v8; // esi
char v9; // dl
int v10; // ecx
int v11; // edi
int v12; // eax
BOOLEAN v13; // eax
char v14; // al
int v15; // ecx
int v16; // edx
BOOLEAN v17; // eax
int v18; // eax
BOOLEAN v19; // eax
char v20; // al
int v21; // eax
int v22; // eax
char v23; // al
char v24; // al
int v25; // edx
int v26; // ecx
int v27; // [esp-Ch] [ebp-1Ch]
int v28; // [esp-8h] [ebp-18h]
int mindama; // [esp+Ch] [ebp-4h]
v7 = mindam;
v8 = i;
mindama = mindam;
v9 = missile[i]._miAnimType;
if (v9 == 4 || (v10 = missile[v8]._misource, v10 == -1)) {
v11 = 112 * mx + my;
v21 = dMonster[0][v11];
if (v21 > 0) {
v28 = missile[v8]._mitype;
v27 = missile[v8]._midist;
v22 = v9 == 4 ? MonsterMHit(missile[v8]._misource, v21 - 1, v7, maxdam, v27, v28, shift) : MonsterTrapHit(v21 - 1, v7, maxdam, v27, v28, shift);
if (v22) {
if (!(_BYTE)nodel)
missile[v8]._mirange = 0;
missile[v8]._miHitFlag = TRUE;
}
}
v23 = dPlayer[0][v11];
if (v23 > 0) {
v17 = PlayerMHit(
v23 - 1,
-1,
missile[v8]._midist,
v7,
maxdam,
missile[v8]._mitype,
shift,
_LOBYTE(missile[v8]._miAnimType) == MFILE_FIREWAL);
LABEL_35:
if (v17) {
if (!(_BYTE)nodel)
missile[v8]._mirange = 0;
missile[v8]._miHitFlag = TRUE;
}
goto LABEL_39;
}
} else {
if (!missile[v8]._micaster) {
v11 = 112 * mx + my;
v12 = dMonster[0][v11];
if (v12 <= 0) {
if (v12 >= 0 || monster[-(v12 + 1)]._mmode != MM_STONE) {
LABEL_13:
v14 = dPlayer[0][v11];
if (v14 <= 0)
goto LABEL_39;
v15 = missile[v8]._misource;
v16 = v14 - 1;
if (v16 == v15)
goto LABEL_39;
v17 = Plr2PlrMHit(
v15,
v16,
mindama,
maxdam,
missile[v8]._midist,
missile[v8]._mitype,
shift);
goto LABEL_35;
void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, BOOLEAN nodel)
{
int oi;
if (missile[i]._miAnimType != 4 && missile[i]._misource != -1) {
if (!missile[i]._micaster) {
if (dMonster[mx][my] > 0) {
if (MonsterMHit(
missile[i]._misource,
dMonster[mx][my] - 1,
mindam,
maxdam,
missile[i]._midist,
missile[i]._mitype,
shift)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
v13 = MonsterMHit(
v10,
-1 - v12,
mindama,
maxdam,
missile[v8]._midist,
missile[v8]._mitype,
shift);
} else {
v13 = MonsterMHit(v10, v12 - 1, v7, maxdam, missile[v8]._midist, missile[v8]._mitype, shift);
if (dMonster[mx][my] < 0
&& monster[-(dMonster[mx][my] + 1)]._mmode == 15
&& MonsterMHit(
missile[i]._misource,
-(dMonster[mx][my] + 1),
mindam,
maxdam,
missile[i]._midist,
missile[i]._mitype,
shift)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
}
if (dPlayer[mx][my] > 0
&& dPlayer[mx][my] - 1 != missile[i]._misource
&& Plr2PlrMHit(
missile[i]._misource,
dPlayer[mx][my] - 1,
mindam,
maxdam,
missile[i]._midist,
missile[i]._mitype,
shift)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
if (v13) {
if (!(_BYTE)nodel)
missile[v8]._mirange = 0;
missile[v8]._miHitFlag = TRUE;
} else {
if (monster[missile[i]._misource]._mFlags & 0x10
&& dMonster[mx][my] > 0
&& monster[dMonster[mx][my] - 1]._mFlags & 0x20
&& MonsterTrapHit(dMonster[mx][my] - 1, mindam, maxdam, missile[i]._midist, missile[i]._mitype, shift)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
if (dPlayer[mx][my] > 0
&& PlayerMHit(
dPlayer[mx][my] - 1,
missile[i]._misource,
missile[i]._midist,
mindam,
maxdam,
missile[i]._mitype,
shift,
0)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
goto LABEL_13;
}
if (monster[v10]._mFlags & MFLAG_TARGETS_MONSTER) {
v18 = dMonster[mx][my];
if (v18 > 0) {
if (monster[v18 - 1]._mFlags & MFLAG_GOLEM) /* fix */
{
v19 = MonsterTrapHit(
v18 - 1,
mindama,
maxdam,
missile[v8]._midist,
missile[v8]._mitype,
shift);
if (v19) {
if (!(_BYTE)nodel)
missile[v8]._mirange = 0;
missile[v8]._miHitFlag = TRUE;
}
} else {
if (dMonster[mx][my] > 0) {
if (missile[i]._miAnimType == 4) {
if (MonsterMHit(
missile[i]._misource,
dMonster[mx][my] - 1,
mindam,
maxdam,
missile[i]._midist,
missile[i]._mitype,
shift)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
} else if (MonsterTrapHit(dMonster[mx][my] - 1, mindam, maxdam, missile[i]._midist, missile[i]._mitype, shift)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
}
v11 = my + 112 * mx;
v20 = dPlayer[0][v11];
if (v20 > 0) {
v17 = PlayerMHit(
v20 - 1,
missile[v8]._misource,
missile[v8]._midist,
mindama,
maxdam,
missile[v8]._mitype,
shift,
0);
goto LABEL_35;
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)) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 1;
}
}
LABEL_39:
v24 = dObject[0][v11];
if (v24) {
v25 = v24 <= 0 ? -1 - v24 : v24 - 1;
if (!object[v25]._oMissFlag) {
if (object[v25]._oBreak == 1)
BreakObject(-1, v25);
if (!(_BYTE)nodel)
missile[v8]._mirange = 0;
missile[v8]._miHitFlag = FALSE;
if (dObject[mx][my]) {
oi = dObject[mx][my] > 0 ? dObject[mx][my] - 1 : -(dObject[mx][my] + 1);
if (!object[oi]._oMissFlag) {
if (object[oi]._oBreak == 1)
BreakObject(-1, oi);
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 0;
}
}
if (nMissileTable[dPiece[0][v11]]) {
if (!(_BYTE)nodel)
missile[v8]._mirange = 0;
missile[v8]._miHitFlag = FALSE;
}
if (!missile[v8]._mirange) {
v26 = missiledata[missile[v8]._mitype].miSFX;
if (v26 != -1)
PlaySfxLoc(v26, missile[v8]._mix, missile[v8]._miy);
if (nMissileTable[dPiece[mx][my]]) {
if (!nodel)
missile[i]._mirange = 0;
missile[i]._miHitFlag = 0;
}
if (!missile[i]._mirange && missiledata[missile[i]._mitype].miSFX != -1)
PlaySfxLoc(missiledata[missile[i]._mitype].miSFX, missile[i]._mix, missile[i]._miy);
}
void SetMissAnim(int mi, int animtype)

2
Source/missiles.h

@ -26,7 +26,7 @@ BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shif
BOOL MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, BOOLEAN shift);
BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEAN shift, int earflag);
BOOL Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, int mtype, BOOLEAN shift);
void CheckMissileCol(int i, int mindam, int maxdam, BOOLEAN shift, int mx, int my, int nodel);
void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, BOOLEAN nodel);
void SetMissAnim(int mi, int animtype);
void SetMissDir(int mi, int dir);
void LoadMissileGFX(BYTE mi);

Loading…
Cancel
Save