diff --git a/Source/missiles.cpp b/Source/missiles.cpp index a623d325f..d9068c7e3 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -227,8 +227,7 @@ void GetDamageAmt(int i, int *mind, int *maxd) static bool CheckBlock(Point from, Point to) { while (from != to) { - Direction pn = GetDirection(from, to); - from += pn; + from += GetDirection(from, to); if (nSolidTable[dPiece[from.x][from.y]]) return true; } @@ -1700,24 +1699,21 @@ void AddRuneExplosion(int mi, Point src, Point dst, int midir, int8_t mienemy, i void AddImmolation(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - int i; - if (src == dst) { dst += (Direction)midir; } + int sp = 16; if (mienemy == TARGET_MONSTERS) { + sp += std::min(missile[mi]._mispllvl * 2, 34); + missile[mi]._midam = 2 * (plr[id]._pLevel + GenerateRnd(10) + GenerateRnd(10)) + 4; - for (i = missile[mi]._mispllvl; i > 0; i--) { + for (int i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam / 8; } - i = 2 * missile[mi]._mispllvl + 16; - if (i > 50) - i = 50; + UseMana(id, SPL_FIREBALL); - } else { - i = 16; } - GetMissileVel(mi, src, dst, i); + GetMissileVel(mi, src, dst, sp); SetMissDir(mi, GetDirection16(src, dst)); missile[mi]._mirange = 256; missile[mi]._miVar1 = src.x; @@ -1732,20 +1728,14 @@ void AddImmolation(int mi, Point src, Point dst, int midir, int8_t mienemy, int void AddFireNova(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - int i; - if (src == dst) { dst += (Direction)midir; } + int sp = 16; if (mienemy == TARGET_MONSTERS) { - i = missile[mi]._mispllvl + 16; - if (i > 50) { - i = 50; - } - } else { - i = 16; + sp += std::min(missile[mi]._mispllvl, 34); } - GetMissileVel(mi, src, dst, i); + GetMissileVel(mi, src, dst, sp); SetMissDir(mi, GetDirection16(src, dst)); missile[mi]._mirange = 256; missile[mi]._miVar1 = src.x; @@ -1866,14 +1856,8 @@ void AddSearch(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, void AddCboltArrow(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - if (mienemy == TARGET_MONSTERS) { - if (id == myplr) { - missile[mi]._mirnd = GenerateRnd(15) + 1; - } else { - missile[mi]._mirnd = GenerateRnd(15) + 1; - } - } else { - missile[mi]._mirnd = GenerateRnd(15) + 1; + missile[mi]._mirnd = GenerateRnd(15) + 1; + if (mienemy != TARGET_MONSTERS) { missile[mi]._midam = 15; } @@ -1894,9 +1878,8 @@ void AddLArrow(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, if (src == dst) { dst += (Direction)midir; } + int av = 32; if (mienemy == TARGET_MONSTERS) { - int av = 32; - if (plr[id]._pClass == HeroClass::Rogue) av += (plr[id]._pLevel) / 4; else if (plr[id]._pClass == HeroClass::Warrior || plr[id]._pClass == HeroClass::Bard) @@ -1915,10 +1898,8 @@ void AddLArrow(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, if (plr[id]._pClass == HeroClass::Rogue || plr[id]._pClass == HeroClass::Warrior || plr[id]._pClass == HeroClass::Bard) av -= 1; } - - GetMissileVel(mi, src, dst, av); - } else - GetMissileVel(mi, src, dst, 32); + } + GetMissileVel(mi, src, dst, av); SetMissDir(mi, GetDirection16(src, dst)); missile[mi]._mirange = 256; @@ -1929,13 +1910,11 @@ void AddLArrow(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, void AddArrow(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - int av; - if (src == dst) { dst += (Direction)midir; } + int av = 32; if (mienemy == TARGET_MONSTERS) { - av = 32; if ((plr[id]._pIFlags & ISPL_RNDARROWVEL) != 0) { av = GenerateRnd(32) + 16; } @@ -1953,10 +1932,8 @@ void AddArrow(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, i if ((plr[id]._pIFlags & ISPL_FASTESTATTACK) != 0) av += 8; } - GetMissileVel(mi, src, dst, av); - } else { - GetMissileVel(mi, src, dst, 32); } + GetMissileVel(mi, src, dst, av); missile[mi]._miAnimFrame = GetDirection16(src, dst) + 1; missile[mi]._mirange = 256; } @@ -2025,28 +2002,24 @@ void AddRndTeleport(int mi, Point src, Point dst, int midir, int8_t mienemy, int void AddFirebolt(int mi, Point src, Point dst, int midir, int8_t micaster, int id, int dam) { - int i, mx, sp; - if (src == dst) { dst += (Direction)midir; } - if (!micaster) { + int sp = 26; + if (micaster == 0) { + sp = 16; + if (id != -1) { + sp += std::min(missile[mi]._mispllvl * 2, 47); + } + + int i; for (i = 0; i < nummissiles; i++) { - mx = missileactive[i]; + int mx = missileactive[i]; if (missile[mx]._mitype == MIS_GUARDIAN && missile[mx]._misource == id && missile[mx]._miVar3 == mi) break; } if (i == nummissiles) UseMana(id, SPL_FIREBOLT); - if (id != -1) { - sp = 2 * missile[mi]._mispllvl + 16; - if (sp >= 63) - sp = 63; - } else { - sp = 16; - } - } else { - sp = 26; } GetMissileVel(mi, src, dst, sp); SetMissDir(mi, GetDirection16(src, dst)); @@ -2127,13 +2100,11 @@ void AddLightball(int mi, Point src, Point dst, int midir, int8_t mienemy, int i void AddFirewall(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - int i; - missile[mi]._midam = GenerateRnd(10) + GenerateRnd(10) + 2; missile[mi]._midam += id >= 0 ? plr[id]._pLevel : currlevel; // BUGFIX: missing parenthesis around ternary (fixed) missile[mi]._midam <<= 3; GetMissileVel(mi, src, dst, 16); - i = missile[mi]._mispllvl; + int i = missile[mi]._mispllvl; missile[mi]._mirange = 10; if (i > 0) missile[mi]._mirange *= i + 1; @@ -2148,24 +2119,19 @@ void AddFirewall(int mi, Point src, Point dst, int midir, int8_t mienemy, int id void AddFireball(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - int i; - if (src == dst) { dst += (Direction)midir; } + int sp = 16; if (mienemy == TARGET_MONSTERS) { + sp += std::min(missile[mi]._mispllvl * 2, 34); missile[mi]._midam = 2 * (plr[id]._pLevel + GenerateRnd(10) + GenerateRnd(10)) + 4; - for (i = missile[mi]._mispllvl; i > 0; i--) { + for (int i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam / 8; } - i = 2 * missile[mi]._mispllvl + 16; - if (i > 50) - i = 50; UseMana(id, SPL_FIREBALL); - } else { - i = 16; } - GetMissileVel(mi, src, dst, i); + GetMissileVel(mi, src, dst, sp); SetMissDir(mi, GetDirection16(src, dst)); missile[mi]._mirange = 256; missile[mi]._miVar1 = src.x; @@ -2741,13 +2707,11 @@ void AddHealOther(int mi, Point src, Point dst, int midir, int8_t mienemy, int i void AddElement(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, int dam) { - int i; - if (src == dst) { dst += (Direction)midir; } missile[mi]._midam = 2 * (plr[id]._pLevel + GenerateRnd(10) + GenerateRnd(10)) + 4; - for (i = missile[mi]._mispllvl; i > 0; i--) { + for (int i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam / 8; } missile[mi]._midam /= 2; @@ -2999,17 +2963,10 @@ void AddCbolt(int mi, Point src, Point dst, int midir, int8_t micaster, int id, { assert((DWORD)mi < MAXMISSILES); + missile[mi]._mirnd = GenerateRnd(15) + 1; + missile[mi]._midam = 15; if (micaster == 0) { - if (id == myplr) { - missile[mi]._mirnd = GenerateRnd(15) + 1; - missile[mi]._midam = GenerateRnd(plr[id]._pMagic / 4) + 1; - } else { - missile[mi]._mirnd = GenerateRnd(15) + 1; - missile[mi]._midam = GenerateRnd(plr[id]._pMagic / 4) + 1; - } - } else { - missile[mi]._mirnd = GenerateRnd(15) + 1; - missile[mi]._midam = 15; + missile[mi]._midam = GenerateRnd(plr[id]._pMagic / 4) + 1; } if (src == dst) { @@ -3027,18 +2984,12 @@ void AddCbolt(int mi, Point src, Point dst, int midir, int8_t micaster, int id, void AddHbolt(int mi, Point src, Point dst, int midir, int8_t micaster, int id, int dam) { - int sp; - if (src == dst) { dst += (Direction)midir; } + int sp = 16; if (id != -1) { - sp = 2 * missile[mi]._mispllvl + 16; - if (sp >= 63) { - sp = 63; - } - } else { - sp = 16; + sp += std::min(missile[mi]._mispllvl * 2, 47); } GetMissileVel(mi, src, dst, sp); SetMissDir(mi, GetDirection16(src, dst));