///<summary>
        /// Encrypt and save the current engine state to file, so it can be loaded later.
        /// If file with the same name exists it won't be replaced,
        /// but to the current filename will be added a number, 'filename(1).acc' e.g.
        ///</summary>
        ///<param name="password">
        /// The password to encrypt the file.
        ///</param>
        ///<param name="savePath">
        /// The folder to save in.
        /// If not setted, the file will be saved in "pSavepath".
        ///</param>
        public string FileSaveSafe(string password, string savePath = "")
        {
            if (!Initial("FileSaveSafe()"))
            {
                return(null);
            }
            try
            {
                if (savePath == "")
                {
                    savePath = pSavepath + FileName;
                }
                else
                {
                    if (savePath[savePath.Length - 1] != '\\')
                    {
                        savePath += '\\';
                    }
                    savePath += FileName;
                }
                if (Validators.ValidateWriteAccess(savePath) == false)
                {
                    Fault("You don't have write access!");
                    return(savePath);
                }

                byte[] buff    = IO.Serialize(Memory);
                byte[] crypted = IO.EncryptBytes(buff, password);
                IO.SaveSafe(savePath, crypted);
                Success(FileName + " Saved!");
                return(savePath);
            }
            catch (Exception ex)
            {
                Exceptional(ex);
                return(null);
            }
        }
        ///<summary>
        /// Save the current engine state to file, so it can be loaded later.
        /// If FileName property is not set, the FileName is a string, representing a timestamp.
        ///</summary>
        ///<param name="savePath">
        /// The folder to save in.
        /// If not setted, the file will be saved in "pSavepath".
        ///</param>
        public string FileSave(string savePath = "")
        {
            if (!Initial("FileSave()"))
            {
                return(null);
            }
            try
            {
                if (savePath == "")
                {
                    savePath = pSavepath + FileName;
                }
                else
                {
                    if (savePath[savePath.Length - 1] != '\\')
                    {
                        savePath += '\\';
                    }
                    savePath += FileName;
                }
                if (Validators.ValidateWriteAccess(savePath) == false)
                {
                    Fault("You don't have write access!");
                    return(savePath);
                }

                IO.Serialize(savePath, Memory);
                Success(FileName + " Saved!");
                return(savePath);
            }
            catch (Exception ex)
            {
                Exceptional(ex);
                return(null);
            }
        }