diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 7a54fb84a..1ebb29bdc 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1400,11 +1400,11 @@ void missiles_berserk(int mi, int sx, int sy, int dx, int dy, int midir, char mi if ((!(monster[dm].mMagicRes & RESIST_MAGIC) || (monster[dm].mMagicRes & RESIST_MAGIC) == 1 && !random(99, 2)) && monster[dm]._mmode != MM_CHARGE) { j = 6; double slvl = (double)GetSpellLevel(id, SPL_BERSERK); - monster[dm]._mFlags |= MFLAG_UNUSED | MFLAG_GOLEM; //is this ok? - monster[dm].mMinDamage = (__int64)(((double)(random(145, 10) + 20) * 0.01 - -1.0) * (double)monster[dm].mMinDamage + slvl); - monster[dm].mMaxDamage = (__int64)(((double)(random(145, 10) + 20) * 0.01 - -1.0) * (double)monster[dm].mMaxDamage + slvl); - monster[dm].mMinDamage2 = (__int64)(((double)(random(145, 10) + 20) * 0.01 - -1.0) * (double)monster[dm].mMinDamage2 + slvl); - monster[dm].mMaxDamage2 = (__int64)(((double)(random(145, 10) + 20) * 0.01 - -1.0) * (double)monster[dm].mMaxDamage2 + slvl); + monster[dm]._mFlags |= MFLAG_UNUSED | MFLAG_GOLEM; + monster[dm].mMinDamage = ((double)(random(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMinDamage + slvl; + monster[dm].mMaxDamage = ((double)(random(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMaxDamage + slvl; + monster[dm].mMinDamage2 = ((double)(random(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMinDamage2 + slvl; + monster[dm].mMaxDamage2 = ((double)(random(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMaxDamage2 + slvl; if (currlevel < 17 || currlevel > 20) r = 3; else @@ -3396,6 +3396,23 @@ void MI_Firebolt(int i) missile[i]._miDelFlag = FALSE; PutMissile(i); return; +#ifdef HELLFIRE + case MIS_LICH: + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_EXORA1, missile[i]._micaster, missile[i]._misource, 0, 0); + break; + case MIS_PSYCHORB: + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_EXBL2, missile[i]._micaster, missile[i]._misource, 0, 0); + break; + case MIS_NECROMORB: + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_EXRED3, missile[i]._micaster, missile[i]._misource, 0, 0); + break; + case MIS_ARCHLICH: + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_EXYEL2, missile[i]._micaster, missile[i]._misource, 0, 0); + break; + case MIS_BONEDEMON: + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_EXBL3, missile[i]._micaster, missile[i]._misource, 0, 0); + break; +#endif } if (missile[i]._mlid >= 0) AddUnLight(missile[i]._mlid); @@ -3593,45 +3610,30 @@ void missiles_4359A0(int i) void MI_Rune(int i) { - int dir; - int mid; - int pid; - - mid = dMonster[missile[i]._mix][missile[i]._miy]; - pid = dPlayer[missile[i]._mix][missile[i]._miy]; + int mid, pid, dir, mx, my; - if (mid == 0) { - if (pid == 0) { - PutMissile(i); - return; - } else { - if (pid <= 0) - pid = -1 - pid; + mx = missile[i]._mix; + my = missile[i]._miy; + mid = dMonster[mx][my]; + pid = dPlayer[mx][my]; + if (mid != 0 || pid != 0) { + if (mid != 0) { + if (mid > 0) + mid = mid - 1; else + mid = -(mid + 1); + dir = GetDirection(missile[i]._mix, missile[i]._miy, monster[mid]._mx, monster[mid]._my); + } else { + if (pid > 0) pid = pid - 1; + else + pid = -(pid + 1); dir = GetDirection(missile[i]._mix, missile[i]._miy, plr[pid].WorldX, plr[pid].WorldY); } - } else { - if (mid <= 0) - mid = -1 - mid; - else - mid = mid - 1; - dir = GetDirection(missile[i]._mix, missile[i]._miy, monster[mid]._mx, monster[mid]._my); + missile[i]._miDelFlag = TRUE; + AddUnLight(missile[i]._mlid); + AddMissile(mx, my, mx, my, dir, missile[i]._miVar1, 2, missile[i]._misource, missile[i]._midam, missile[i]._mispllvl); } - - missile[i]._miDelFlag = TRUE; - AddUnLight(missile[i]._mlid); - AddMissile( - missile[i]._mix, - missile[i]._miy, - missile[i]._mix, - missile[i]._miy, - dir, - missile[i]._miVar1, - 2, - missile[i]._misource, - missile[i]._midam, - missile[i]._mispllvl); PutMissile(i); }