diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 04b80e949..03903d03b 100644 --- a/Source/missiles.cpp +++ b/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) diff --git a/Source/missiles.h b/Source/missiles.h index c201c6c94..f63f3b682 100644 --- a/Source/missiles.h +++ b/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);