From adc338b5793eb629189513e3a5e5535405813f6c Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sat, 18 May 2019 00:11:03 +0200 Subject: [PATCH] Clean up MissToMonst --- Source/monster.cpp | 163 +++++++++++++++++---------------------------- 1 file changed, 60 insertions(+), 103 deletions(-) diff --git a/Source/monster.cpp b/Source/monster.cpp index 63111cb58..f5fd9223e 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -5117,118 +5117,75 @@ void PrintUniqueHistory() void MissToMonst(int i, int x, int y) { - int v3; // edi - MissileStruct *v4; // edi - unsigned int v5; // ebx - MonsterStruct *v6; // esi - int v7; // edx - char v8; // al - int v9; // eax - char *v10; // edi - int v11; // eax - int v12; // edx - char v13; // al - char v14; // al - int v15; // ebx - int v16; // eax - int v17; // esi - int v18; // edi - int v19; // esi - int v20; // edx - int *v21; // ebx - char v22; // cl - char v23; // al - int v24; // esi - int v25; // edi - int v26; // esi - int v27; // eax - int v28; // eax - int ia; // [esp+Ch] [ebp-10h] - int v30; // [esp+10h] [ebp-Ch] - int v31; // [esp+14h] [ebp-8h] - int v32; // [esp+18h] [ebp-4h] - int arglist; // [esp+24h] [ebp+8h] - - v3 = i; - v30 = x; + int oldx, oldy; + int newx, newy; + int m, pnum; + MissileStruct *Miss; + MonsterStruct *Monst; + if ((DWORD)i >= MAXMISSILES) app_fatal("MissToMonst: Invalid missile %d", i); - v4 = &missile[v3]; - v5 = v4->_misource; - ia = v4->_misource; - if (v5 >= MAXMONSTERS) - app_fatal("MissToMonst: Invalid monster %d", v5); - v32 = v4->_mix; - v31 = v4->_miy; - v6 = &monster[v5]; - v6->_mx = v30; - dMonster[v30][y] = v5 + 1; - v7 = v4->_mimfnum; - v6->_mdir = v7; - v6->_my = y; - M_StartStand(v5, v7); - v8 = v6->MType->mtype; - if (v8 < MT_INCIN || v8 > MT_HELLBURN) { - if (v6->_mFlags & MFLAG_TARGETS_MONSTER) - M2MStartHit(v5, -1, 0); + + Miss = &missile[i]; + m = Miss->_misource; + + if ((DWORD)m >= MAXMONSTERS) + app_fatal("MissToMonst: Invalid monster %d", m); + + Monst = &monster[m]; + oldx = Miss->_mix; + oldy = Miss->_miy; + dMonster[x][y] = m + 1; + Monst->_mdir = Miss->_mimfnum; + Monst->_mx = x; + Monst->_my = y; + M_StartStand(m, Monst->_mdir); + if (Monst->MType->mtype < MT_INCIN || Monst->MType->mtype > MT_HELLBURN) { + if (!(Monst->_mFlags & MFLAG_TARGETS_MONSTER)) + M_StartHit(m, -1, 0); else - M_StartHit(v5, -1, 0); + M2MStartHit(m, -1, 0); } else { - M_StartFadein(v5, v6->_mdir, FALSE); - } - v9 = v32; - if (v6->_mFlags & MFLAG_TARGETS_MONSTER) { - v21 = (int *)((char *)dMonster + 4 * (v31 + v9 * 112)); - if (*v21 > 0) { - v22 = v6->MType->mtype; - if (v22 != MT_GLOOM && (v22 < MT_INCIN || v22 > MT_HELLBURN)) { - M_TryM2MHit(ia, *v21 - 1, 500, (unsigned char)v6->mMinDamage2, (unsigned char)v6->mMaxDamage2); - v23 = v6->MType->mtype; - if (v23 < MT_NSNAKE || v23 > MT_GSNAKE) { - v24 = v6->_mdir; - v25 = v32 + offset_x[v24]; - v26 = v31 + offset_y[v24]; - if (PosOkMonst(*v21 - 1, v25, v26)) { - v27 = *v21; - dMonster[v25][v26] = *v21; - *v21 = 0; - v28 = v27 - 1; - monster[v28]._mx = v25; - monster[v28]._mfutx = v25; - monster[v28]._my = v26; - monster[v28]._mfuty = v26; + M_StartFadein(m, Monst->_mdir, FALSE); + } + + if (!(Monst->_mFlags & MFLAG_TARGETS_MONSTER)) { + pnum = dPlayer[oldx][oldy] - 1; + if (dPlayer[oldx][oldy] > 0) { + if (Monst->MType->mtype != MT_GLOOM && (Monst->MType->mtype < MT_INCIN || Monst->MType->mtype > MT_HELLBURN)) { + M_TryH2HHit(m, dPlayer[oldx][oldy] - 1, 500, Monst->mMinDamage2, Monst->mMaxDamage2); + if (pnum == dPlayer[oldx][oldy] - 1 && (Monst->MType->mtype < MT_NSNAKE || Monst->MType->mtype > MT_GSNAKE)) { + if (plr[pnum]._pmode != 7 && plr[pnum]._pmode != 8) + StartPlrHit(pnum, 0, 1); + newx = oldx + offset_x[Monst->_mdir]; + newy = oldy + offset_y[Monst->_mdir]; + if (PosOkPlayer(pnum, newx, newy)) { + plr[pnum].WorldX = newx; + plr[pnum].WorldY = newy; + FixPlayerLocation(pnum, plr[pnum]._pdir); + FixPlrWalkTags(pnum); + dPlayer[newx][newy] = pnum + 1; + SetPlayerOld(pnum); } } } } } else { - v10 = &dPlayer[v9][v31]; - v11 = *v10; - v12 = v11 - 1; - arglist = v11 - 1; - if (*v10 > 0) { - v13 = v6->MType->mtype; - if (v13 != MT_GLOOM && (v13 < MT_INCIN || v13 > MT_HELLBURN)) { - M_TryH2HHit(v5, v12, 500, (unsigned char)v6->mMinDamage2, (unsigned char)v6->mMaxDamage2); - if (arglist == *v10 - 1) { - v14 = v6->MType->mtype; - if (v14 < MT_NSNAKE || v14 > MT_GSNAKE) { - v15 = arglist; - v16 = plr[arglist]._pmode; - if (v16 != 7 && v16 != 8) - StartPlrHit(arglist, 0, 1u); - v17 = v6->_mdir; - v18 = v32 + offset_x[v17]; - v19 = v31 + offset_y[v17]; - if (PosOkPlayer(arglist, v18, v19)) { - v20 = plr[v15]._pdir; - plr[v15].WorldX = v18; - plr[v15].WorldY = v19; - FixPlayerLocation(arglist, v20); - FixPlrWalkTags(arglist); - dPlayer[v18][v19] = arglist + 1; - SetPlayerOld(arglist); - } + if (dMonster[oldx][oldy] > 0) { + if (Monst->MType->mtype != MT_GLOOM && (Monst->MType->mtype < MT_INCIN || Monst->MType->mtype > MT_HELLBURN)) { + M_TryM2MHit(m, dMonster[oldx][oldy] - 1, 500, Monst->mMinDamage2, Monst->mMaxDamage2); + if (Monst->MType->mtype < MT_NSNAKE || Monst->MType->mtype > MT_GSNAKE) { + newx = oldx + offset_x[Monst->_mdir]; + newy = oldy + offset_y[Monst->_mdir]; + if (PosOkMonst(dMonster[oldx][oldy] - 1, newx, newy)) { + m = dMonster[oldx][oldy]; + dMonster[newx][newy] = m; + dMonster[oldx][oldy] = 0; + m--; + monster[m]._mx = newx; + monster[m]._mfutx = newx; + monster[m]._my = newy; + monster[m]._mfuty = newy; } } }