Also look at your heartbeat script for acid fog.
This line:
int nDamage = (6 * nCasterLvl) / 3;
Doubles the amount of the caster level for damage.
These lines:
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_ACID, GetAreaOfEffectCreator(), fDelay))
{
nDamage = (6 * nCasterLvl) / 3;
}
Double the damage for each creature that would be affected. So the first creature takes 2 * caster level damage, the second 4 * caster level, the third 8 * caster level, etc.
Edit: Oops that's not the case because you never passed the damage done in the loop to the effect. So your saving throws are meaningless (as they are with the regular spell script as it does this too).