diff --git a/Source/missiles.cpp b/Source/missiles.cpp index f43b76d2e..4d7961f00 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -4635,35 +4635,26 @@ void MI_Rhino(int i) void MI_Fireman(int i) { - int src, enemy, ax, ay, bx, by, cx, cy, j; + int j; GetMissilePos(i); - ax = missile[i].position.tile.x; - ay = missile[i].position.tile.y; + Point a = missile[i].position.tile; missile[i].position.traveled += missile[i].position.velocity; GetMissilePos(i); - src = missile[i]._misource; - bx = missile[i].position.tile.x; - by = missile[i].position.tile.y; - enemy = monster[src]._menemy; - if ((monster[src]._mFlags & MFLAG_TARGETS_MONSTER) == 0) { - cx = plr[enemy].position.tile.x; - cy = plr[enemy].position.tile.y; - } else { - cx = monster[enemy].position.tile.x; - cy = monster[enemy].position.tile.y; - } - if ((bx != ax || by != ay) && ((missile[i]._miVar1 & 1 && (abs(ax - cx) >= 4 || abs(ay - cy) >= 4)) || missile[i]._miVar2 > 1) && PosOkMonst(missile[i]._misource, { ax, ay })) { - MissToMonst(i, { ax, ay }); + int src = missile[i]._misource; + Point b = missile[i].position.tile; + int enemy = monster[src]._menemy; + Point c = (monster[src]._mFlags & MFLAG_TARGETS_MONSTER) == 0 ? plr[enemy].position.tile : monster[enemy].position.tile; + if (b != a && ((missile[i]._miVar1 & 1 && a.WalkingDistance(c) >= 4) || missile[i]._miVar2 > 1) && PosOkMonst(missile[i]._misource, a)) { + MissToMonst(i, a); missile[i]._miDelFlag = true; } else if ((monster[src]._mFlags & MFLAG_TARGETS_MONSTER) == 0) { - j = dPlayer[bx][by]; + j = dPlayer[b.x][b.y]; } else { - j = dMonster[bx][by]; + j = dMonster[b.x][b.y]; } - if (!PosOkMissile(0, { bx, by }) || (j > 0 && !(missile[i]._miVar1 & 1))) { - missile[i].position.velocity.x *= -1; - missile[i].position.velocity.y *= -1; + if (!PosOkMissile(0, b) || (j > 0 && !(missile[i]._miVar1 & 1))) { + missile[i].position.velocity *= -1; missile[i]._mimfnum = opposite[missile[i]._mimfnum]; missile[i]._miAnimData = monster[src].MType->Anims[MA_WALK].Data[missile[i]._mimfnum]; missile[i]._miVar2++;