public void Load(SaveGame saved, string voosFilePath = null)
    {
        StartCoroutine(PerformDeferredBehaviorUpgrades(saved.version));

        bool removeUnusedBehaviors = saved.version < FirstVersionAllowingUnusedBehaviors;
        var  usedBrainIds          = VoosEngine.GetUsedBrainIds(saved.voosEngineState.actors);

        if (saved.version < FirstVersionWithLegacyWarning)
        {
            behaviors.returnEmptyForMissingBuiltinBehaviors = true;
        }
        behaviors.LoadDatabase(saved.behaviorDatabase, removeUnusedBehaviors, usedBrainIds);

        engine.SetPersistedState(saved.voosEngineState);
        // Load stage before terrain..dependency there for world size. Not sure if good...shouldn't terrain just have its own size?
        stage.Load(saved.stage);
        terrain.SetPersistedState(stage.GetGroundSize(), saved.gridState);

        sojoSystem.Reset();
        if (saved.version >= FirstVersionWithSojoDatabase)
        {
            sojoSystem.LoadDatabase(saved.sojoDatabase);
        }
        if (saved.cardPacks != null)
        {
            behaviors.LoadCardPacks(saved.cardPacks);
        }
        if (saved.actorPacks != null)
        {
            sceneActorLibrary.LoadActorPacks(saved.actorPacks);
        }

        if (saved.version < FirstVersionWithLegacyWarning && !SuppressLegacyWarning)
        {
            popups.ShowTwoButtons(OLD_SAVE_MESSAGE,
                                  "Open Project Location", () => { Application.OpenURL("file://" + System.IO.Path.GetDirectoryName(voosFilePath)); },
                                  "OK", null, 800f);
        }
    }