/// <summary>Throws the magic puff down.</summary>
        /// <param name="loc">The loc.</param>
        /// <param name="map">The map.</param>
        public static void ThrowMagicPuffDown(Vector3 loc, Map map)
        {
            if (map == null)
            {
                return;              //make sure we don't try an put smoke down if there's no map
            }
            if (!loc.ToIntVec3().ShouldSpawnMotesAt(map) || map.moteCounter.SaturatedLowPriority)
            {
                return;
            }
            MoteThrown moteThrown = IntermittentMagicSprayer.NewBaseMagicPuff();

            moteThrown.exactPosition = loc + new Vector3(Rand.Range(-0.02f, 0.02f), 0f, Rand.Range(-0.02f, 0.02f));
            moteThrown.SetVelocity((float)Rand.Range(0, 359), Rand.Range(0.2f, 0.5f));
            GenSpawn.Spawn(moteThrown, loc.ToIntVec3(), map, WipeMode.Vanish);
        }
        /// <summary>Throws the magic puff up.</summary>
        /// <param name="loc">The loc.</param>
        /// <param name="map">The map.</param>
        public static void ThrowMagicPuffUp(Vector3 loc, Map map)
        {
            if (map == null)
            {
                return;
            }
            if (!loc.ToIntVec3().ShouldSpawnMotesAt(map) || map.moteCounter.SaturatedLowPriority)
            {
                return;
            }
            MoteThrown moteThrown = IntermittentMagicSprayer.NewBaseMagicPuff();

            moteThrown.exactPosition  = loc;
            moteThrown.exactPosition += new Vector3(Rand.Range(-0.02f, 0.02f), 0f, Rand.Range(-0.02f, 0.02f));
            moteThrown.SetVelocity((float)Rand.Range(-10, 10), Rand.Range(1.2f, 1.5f));
            GenSpawn.Spawn(moteThrown, loc.ToIntVec3(), map, WipeMode.Vanish);
        }