diff --git a/Source/missiles.cpp b/Source/missiles.cpp index efbad33ab..3c8ca69d5 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1653,54 +1653,39 @@ void __fastcall GetVileMissPos(int mi, int dx, int dy) void __fastcall AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam) { - int v9; // eax - int v11; // esi - int v12; // eax - int v14; // edi - int v16; // eax - BOOLEAN v17; // zf - int v18; // ecx - int v19; // ecx - int v20; // [esp+Ch] [ebp-Ch] - int mia; // [esp+10h] [ebp-8h] - int v22; // [esp+14h] [ebp-4h] + int pn, r1, r2, nTries; - v22 = 0; - v20 = sx; - mia = mi; - while (++v22 <= 500) { - v9 = random(58, 3); - v11 = v9 + 4; - v12 = random(58, 3); - v14 = v12 + 4; + nTries = 0; + do { + nTries++; + if (nTries > 500) { + r1 = 0; + r2 = 0; + break; + } + r1 = random(58, 3) + 4; + r2 = random(58, 3) + 4; if (random(58, 2) == 1) - v11 = -v11; + r1 = -r1; if (random(58, 2) == 1) - v14 = -v14; - mi = 4 * (sy + v14 + 112 * (v11 + v20)); - if (!nSolidTable[dPiece[0][mi / 4u]] && !dObject[v11 + v20][sy + v14] && !dMonster[0][mi / 4u]) - goto LABEL_12; - } - v11 = 0; - v14 = 0; -LABEL_12: - v16 = mia; - missile[v16]._miVar1 = 0; - v17 = setlevel == 0; - missile[v16]._mirange = 2; - if (v17 || setlvlnum != SL_VILEBETRAYER) { - missile[v16]._mix = v20 + v11; - missile[v16]._miy = sy + v14; + r2 = -r2; + + } while (nSolidTable[dPiece[r1 + sx][sy + r2]] || dObject[r1 + sx][sy + r2] || dMonster[r1 + sx][sy + r2]); + + missile[mi]._miVar1 = 0; + missile[mi]._mirange = 2; + if (setlevel == 0 || setlvlnum != SL_VILEBETRAYER) { + missile[mi]._mix = sx + r1; + missile[mi]._miy = sy + r2; if (!(_BYTE)mienemy) UseMana(id, 10); } else { - v18 = object[dObject[dx][dy] - 1]._otype; - if (v18 == OBJ_MCIRCLE1 || v18 == OBJ_MCIRCLE2) { - v19 = myplr; - missile[v16]._mix = dx; - missile[v16]._miy = dy; - if (!PosOkPlayer(v19, dx, dy)) - GetVileMissPos(mia, dx, dy); + pn = dObject[dx][dy] - 1; + if (object[pn]._otype == OBJ_MCIRCLE1 || object[pn]._otype == OBJ_MCIRCLE2) { + missile[mi]._mix = dx; + missile[mi]._miy = dy; + if (!PosOkPlayer(myplr, dx, dy)) + GetVileMissPos(mi, dx, dy); } } } @@ -2611,7 +2596,7 @@ void __fastcall AddHeal(int mi, int sx, int sy, int dx, int dy, int midir, int m { int i; int HealAmount; - + HealAmount = (random(57, 10) + 1) << 6; for (i = 0; i < plr[id]._pLevel; i++) { HealAmount += (random(57, 4) + 1) << 6;