/// <summary>
        ///  Add a single size surface.
        /// </summary>
        /// <param name="key">The key of the sprite surface.</param>
        /// <param name="xFrames">The number of frames of animation.</param>
        /// <param name="yFrames">The number of frame types.</param>
        internal void Add(string key, int xFrames, int yFrames)
        {
            if (string.IsNullOrEmpty(key))
            {
                return;
            }

            Sprites[key] = null;

            try
            {
                Int32.Parse(key);
                return;
            }
            catch
            {
            }

            var basepath = GameConfig.MediaDirectory + "\\" + key;
            var bmppath  = basepath + ".bmp";

            if (File.Exists(bmppath))
            {
                var tss = new TerrariumSpriteSurface();
                tss.AttachSurface(new DirectDrawSpriteSurface(key, bmppath, xFrames, yFrames));
                Sprites[key] = tss;
            }
        }
        /// <summary>
        ///  Adds a new sized surface to the sprite manager.  A sized surface
        ///  attempts to load multiple surfaces for the various sizes of a keyed
        ///  sprite.
        /// </summary>
        /// <param name="key">The name of the sprite surface.</param>
        /// <param name="xFrames">The number of frames of animation.</param>
        /// <param name="yFrames">The number of frame types.</param>
        internal void AddSizedSurface(string key, int xFrames, int yFrames)
        {
            if (string.IsNullOrEmpty(key))
            {
                return;
            }

            Sprites[key] = null;

            try
            {
                Int32.Parse(key);
                return;
            }
            catch
            {
            }

            var tss  = new TerrariumSpriteSurface();
            var bmps = Directory.GetFiles(GameConfig.MediaDirectory, key + "*.bmp");

            for (var i = 0; i < bmps.Length; i++)
            {
                if (!IsSourceValid(bmps[i], key))
                {
                    continue;
                }

                DirectDrawSpriteSurface dds;

                try
                {
                    dds = new DirectDrawSpriteSurface(
                        Path.GetFileNameWithoutExtension(bmps[i]),
                        bmps[i],
                        xFrames,
                        yFrames
                        );
                }
                catch
                {
                    dds = null;
                }

                if (dds != null)
                {
                    // Only if frames are between 8 and 48 pixels.
                    if (dds.FrameWidth > 7 && dds.FrameWidth < 49)
                    {
                        tss.AttachSurface(dds, dds.FrameWidth);
                        Sprites[key] = tss;
                    }
                }
            }
        }
        /// <summary>
        ///  Add a single size surface.
        /// </summary>
        /// <param name="key">The key of the sprite surface.</param>
        /// <param name="xFrames">The number of frames of animation.</param>
        /// <param name="yFrames">The number of frame types.</param>
        internal void Add(string key, int xFrames, int yFrames)
        {
            if (key == null || key.Length == 0)
            {
                return;
            }

            sprites[key] = null;

            try
            {
                Int32.Parse(key);
                return;
            }
            catch
            {
            }

            string basepath = GameConfig.MediaDirectory + "\\" + key;
            string bmppath = basepath + ".bmp";
            if (File.Exists(bmppath))
            {
                TerrariumSpriteSurface tss = new TerrariumSpriteSurface();
                tss.AttachSurface(new DirectDrawSpriteSurface(key, bmppath, xFrames, yFrames));
                sprites[key] = tss;
            }
        }
        /// <summary>
        ///  Adds a new sized surface to the sprite manager.  A sized surface
        ///  attempts to load multiple surfaces for the various sizes of a keyed
        ///  sprite.
        /// </summary>
        /// <param name="key">The name of the sprite surface.</param>
        /// <param name="xFrames">The number of frames of animation.</param>
        /// <param name="yFrames">The number of frame types.</param>
        internal void AddSizedSurface(string key, int xFrames, int yFrames)
        {
            if (key == null || key.Length == 0)
            {
                return;
            }

            sprites[key] = null;

            try
            {
                Int32.Parse(key);
                return;
            }
            catch
            {
            }

            TerrariumSpriteSurface tss = new TerrariumSpriteSurface();
            string[] bmps = Directory.GetFiles(GameConfig.MediaDirectory, key + "*.bmp");
            for (int i = 0; i < bmps.Length; i++)
            {
                if (!IsSourceValid(bmps[i], key))
                {
                    continue;
                }

                DirectDrawSpriteSurface dds;

                try
                {
                    dds = new DirectDrawSpriteSurface(
                        Path.GetFileNameWithoutExtension(bmps[i]),
                        bmps[i],
                        xFrames,
                        yFrames
                        );
                }
                catch
                {
                    dds = null;
                }

                if (dds != null)
                {
                    // Only if frames are between 8 and 48 pixels.
                    if (dds.FrameWidth > 7 && dds.FrameWidth < 49)
                    {
                        tss.AttachSurface(dds, dds.FrameWidth);
                        sprites[key] = tss;
                    }
                }
            }
        }
        /// <summary>
        ///  Add a single size surface.
        /// </summary>
        /// <param name="key">The key of the sprite surface.</param>
        /// <param name="xFrames">The number of frames of animation.</param>
        /// <param name="yFrames">The number of frame types.</param>
        internal void Add(string key, int xFrames, int yFrames)
        {
            if (string.IsNullOrEmpty(key))
            {
                return;
            }

            Sprites[key] = null;

            try
            {
                Int32.Parse(key);
                return;
            }
            catch
            {
            }

            var basepath = GameConfig.MediaDirectory + "\\" + key;
            var bmppath = basepath + ".bmp";
            if (File.Exists(bmppath))
            {
                var tss = new TerrariumSpriteSurface();
                tss.AttachSurface(new DirectDrawSpriteSurface(key, bmppath, xFrames, yFrames));
                Sprites[key] = tss;
            }
        }