diff --git a/Source/monster.cpp b/Source/monster.cpp index 56672b844..3250fa18e 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -7,7 +7,7 @@ int MissileFileFlag; int monstkills[MAXMONSTERS]; int monstactive[MAXMONSTERS]; int nummonsters; -int sgbSaveSoundOn; // weak +BOOLEAN sgbSaveSoundOn; MonsterStruct monster[MAXMONSTERS]; int totalmonsters; // weak CMonster Monsters[16]; @@ -1539,72 +1539,53 @@ void M_StartHit(int i, int pnum, int dam) void M_DiabloDeath(int i, BOOL sendmsg) { - int v2; // esi - int v3; // edi - int v4; // eax - int v5; // ebx - int v6; // esi - int v7; // ecx - int v8; // eax - int v9; // esi - int v10; // eax - double v11; // st7 - int v12; // eax - int v13; // ecx - int v14; // esi - int v15; // [esp+8h] [ebp-8h] - int j; // [esp+Ch] [ebp-4h] - int v17; // [esp+Ch] [ebp-4h] - - v15 = i; - v2 = sendmsg; - v3 = i; + MonsterStruct *Monst, *pmonster; + int dist; + int j, k; + int _moldx, _moldy; + + Monst = monster + i; PlaySFX(USFX_DIABLOD); quests[QTYPE_MOD]._qactive = 3; - if (v2) - NetSendCmdQuest(TRUE, 5u); + if (sendmsg) + NetSendCmdQuest(TRUE, QTYPE_MOD); gbProcessPlayers = FALSE; - _LOBYTE(sgbSaveSoundOn) = gbSoundOn; - v4 = 0; - for (j = 0; j < nummonsters; ++j) { - v5 = monstactive[v4]; - if (v5 != v15 && monster[v3]._msquelch) { - v6 = v5; - NewMonsterAnim(monstactive[v4], &monster[v5].MType->Anims[MA_DEATH], monster[v5]._mdir); - v7 = monster[v5]._moldy; - monster[v6]._mxoff = 0; - monster[v6]._myoff = 0; - monster[v6]._mVar1 = 0; - v8 = monster[v5]._moldx; - monster[v6]._my = v7; - monster[v6]._mfuty = v7; - monster[v6]._mmode = MM_DEATH; - monster[v6]._mx = v8; - monster[v6]._mfutx = v8; - M_CheckEFlag(v5); - M_ClearSquares(v5); - dMonster[monster[v6]._mx][monster[v6]._my] = v5 + 1; - } - v4 = j + 1; - } - AddLight(monster[v3]._mx, monster[v3]._my, 8); - DoVision(monster[v3]._mx, monster[v3]._my, 8, 0, 1); - v9 = abs(ViewY - monster[v3]._my); - if (abs(ViewX - monster[v3]._mx) <= v9) - v10 = ViewY - monster[v3]._my; + sgbSaveSoundOn = gbSoundOn; + for (j = 0; j < nummonsters; j++) { + k = monstactive[j]; + if (k == i || monster[i]._msquelch == 0) + continue; + + pmonster = monster + k; + NewMonsterAnim(k, pmonster->MType->Anims + MA_DEATH, pmonster->_mdir); + monster[k]._mxoff = 0; + monster[k]._myoff = 0; + monster[k]._mVar1 = 0; + _moldx = monster[k]._moldx; + _moldy = monster[k]._moldy; + monster[k]._my = _moldy; + monster[k]._mfuty = _moldy; + monster[k]._mmode = MM_DEATH; + monster[k]._mx = _moldx; + monster[k]._mfutx = _moldx; + M_CheckEFlag(k); + M_ClearSquares(k); + dMonster[pmonster->_mx][pmonster->_my] = k + 1; + } + AddLight(Monst->_mx, Monst->_my, 8); + DoVision(Monst->_mx, Monst->_my, 8, FALSE, TRUE); + if (abs(ViewX - Monst->_mx) > abs(ViewY - Monst->_my)) + dist = abs (ViewX - Monst->_mx); else - v10 = ViewX - monster[v3]._mx; - v17 = abs(v10); - if (v17 > 20) - v17 = 20; - v11 = (double)v17; - v12 = ViewX << 16; - v13 = monster[v3]._mx << 16; - monster[v3]._mVar3 = ViewX << 16; - v14 = ViewY << 16; - monster[v3]._mVar4 = ViewY << 16; - monster[v3]._mVar5 = (signed __int64)((double)(v12 - v13) / v11); - monster[v3]._mVar6 = (signed __int64)((double)(v14 - (monster[v3]._my << 16)) / v11); + dist = abs (ViewY - Monst->_my); + if (dist > 20) + dist = 20; + j = ViewX << 16; + k = ViewY << 16; + Monst->_mVar3 = j; + Monst->_mVar4 = k; + Monst->_mVar5 = (int) ((j - (Monst->_mx << 16)) / (double)dist); + Monst->_mVar6 = (int) ((k - (Monst->_my << 16)) / (double)dist); } // 64D32C: using guessed type int sgbSaveSoundOn; @@ -6554,3 +6535,4 @@ void decode_enemy(int m, int enemy) monster[m]._menemyy = monster[enemy]._mfuty; } } +