public bool Load()
        {
            var scenario     = _engine.Scenario;
            var scenarioInfo = scenario.Info;

            _variables.Initialise();

            var path = Path.Combine(Directory, "database");

            // TODO: DI
            using (var reader = new TMEBinaryReader(File.Open(path, FileMode.Open)))
            {
                var magicNo = reader.ReadUInt32();
                if (magicNo != TMEMagicNo)
                {
                    var number = BinaryPrimitives.ReverseEndianness(TMEMagicNo);
                    if (magicNo != number)
                    {
                        _logger.LogError($"Database MagicNo '{magicNo}' does not match '{TMEMagicNo}'");
                        return(false);
                    }
                    reader.EnableByteSwap = true;
                }

                ScenarioId = reader.ReadUInt32();
                if (ScenarioId != scenarioInfo.Id)
                {
                    _logger.LogError($"Database ScenarioId '{ScenarioId}' does not match '{scenarioInfo.Id}'");
                    return(false);
                }

                Version = reader.ReadUInt32();
                if (Version < scenarioInfo.DatabaseVersion)
                {
                    _logger.LogError($"Database Version '{Version}' is less than scenario version '{scenarioInfo.DatabaseVersion}'");
                    return(false);
                }

                Header      = reader.ReadString();
                Description = "";

                if (_serializeContext.IsSaveGame)
                {
                    Description = Version > 8
                        ? reader.ReadString()
                        : "";
                }

                _serializeContext.Reader     = reader;
                _serializeContext.Version    = Version;
                _serializeContext.IsDatabase = true;
                _serializeContext.IsSaveGame = false;

                // Read objects
                if (_entityContainer is ISerializable entities)
                {
                    if (!entities.Load(_serializeContext))
                    {
                        throw new FileLoadException("Error in Entities");
                    }
                }

                // Load Text
                if (_strings is ISerializable strings)
                {
                    if (!strings.Load(_serializeContext))
                    {
                        throw new FileLoadException("Error in Strings");
                    }
                }

                // load variables
                if (_variables is ISerializable variables)
                {
                    if (!variables.Load(_serializeContext))
                    {
                        throw new FileLoadException("Error in variables");
                    }
                }

                _engine.Scenario.InitialiseAfterGameLoad();

                // load Version 10 extras ** DDR **
            }

            return(LoadMap());
        }