Exemple #1
0
        void Awake()
        {
            playerEnterExit = GetComponent <PlayerEnterExit>();
            if (!playerEnterExit)
            {
                throw new Exception("PlayerEnterExit not found.");
            }

            playerCamera = GetComponentInChildren <Camera>();
            if (!playerCamera)
            {
                throw new Exception("Player Camera not found.");
            }

            playerMouseLook = playerCamera.GetComponent <PlayerMouseLook>();
            if (!playerMouseLook)
            {
                throw new Exception("PlayerMouseLook not found.");
            }

            playerMotor = GetComponent <PlayerMotor>();
            if (!playerMotor)
            {
                throw new Exception("PlayerMotor not found.");
            }

            playerEntityBehaviour = GetComponent <DaggerfallEntityBehaviour>();
            if (!playerEntityBehaviour)
            {
                throw new Exception("PlayerEntityBehaviour not found.");
            }

            SaveLoadManager.RegisterSerializableGameObject(this);
        }
Exemple #2
0
    public void LoadLevel(string levelName)
    {
        if (!EditorManager.LevelExists(levelName))
        {
            return;
        }

        string path    = Application.persistentDataPath + "/Wolf3DLevels/" + levelName + ".json";
        bool   fromRes = false;

        if (!File.Exists(path))
        {
            TextAsset level = Resources.Load <TextAsset>($"Maps/{levelName}");
            if (level)
            {
                fromRes = true;
                path    = levelName;
            }
            else
            {
                Debug.LogError($"Couldn't find map with name {levelName}");
                return;
            }
        }

        Debug.Log("Opening level " + path);

        ClearLevel();
        level = LevelSerialiser.LoadLevel(path, fromRes);
        LoadTiles();
        LoadEntities();
        mouseLook = playerObject.GetComponentInChildren <PlayerMouseLook>();
        mapInfoPanel.SetValues(level.name, tilesCount, enemyCount);
        mapNameText.text = level.name;
    }
Exemple #3
0
        public void SetMouseLookEnabled(bool v)
        {
            WeaponController weaponController = Player.MainPlayer?.GetComponent <WeaponController>();

            if (weaponController != null)
            {
                if (v)
                {
                    weaponController.DrawCrosshair = _wasCrosshairEnabled;
                }
                else
                {
                    _wasCrosshairEnabled           = weaponController.DrawCrosshair;
                    weaponController.DrawCrosshair = false;
                }
            }

            PlayerMouseLook playerMouseLook = Player.MainPlayer?.MovementController?.GetComponent <PlayerMouseLook>();

            if (playerMouseLook == null)
            {
                return;
            }
            playerMouseLook.enabled = v;
        }
Exemple #4
0
        private void DoHideCursor(bool hide)
        {
            PlayerMouseLook mLook = GameManager.Instance.PlayerMouseLook;

            if (mLook != null)
            {
                mLook.ForceHideCursor(hide && hideCursor);
            }
        }
Exemple #5
0
    // Start is called before the first frame update
    void Start()
    {
        rb        = GetComponent <Rigidbody2D>();
        MouseLook = GetComponent <PlayerMouseLook>();

        currentState = airState;

        StartCoroutine(DecreaseHealthRoutine());
    }
Exemple #6
0
            public static string Execute(params string[] args)
            {
                PlayerMouseLook mLook = GameManager.Instance.PlayerMouseLook;//GameObject.FindObjectOfType<PlayerMouseLook>();

                if (mLook == null)
                {
                    return(error);
                }
                else
                {
                    //mLook.smoothing = new Vector2(speed, speed);
                    mLook.enableSmoothing = !mLook.enableSmoothing;
                    return(string.Format("Mouse smoothing is on: {0}", mLook.enableSmoothing.ToString()));
                }
            }
        void Awake()
        {
            playerContext.PMovement        = GetComponent <PlayerMovement>();
            playerContext.PWallrun         = GetComponent <PlayerWallrun>();
            playerContext.PStamina         = GetComponent <PlayerStamina>();
            playerContext.PController      = GetComponent <CharacterController>();
            playerContext.FootstepAudio    = GetComponentInChildren <FootstepAudioScript>();
            playerContext.PlayerTransform  = transform;
            playerContext.CameraTransform  = GameObject.FindGameObjectWithTag("PlayerCamera").transform;
            playerContext.TransformChanges = GetComponent <TransformChanges>();
            playerContext.PMouse           = GetComponentInChildren <PlayerMouseLook>();

            pGrab  = GetComponent <PlayerGrab>();
            pMLook = GetComponent <PlayerMouseLook>();
        }
Exemple #8
0
            public static string Execute(params string[] args)
            {
                PlayerMouseLook mLook = GameManager.Instance.PlayerMouseLook;//GameObject.FindObjectOfType<PlayerMouseLook>();
                float           speed = 0;

                if (args == null || args.Length < 1 || !float.TryParse(args[0], out speed))
                {
                    if (mLook)
                    {
                        Console.Log(string.Format("Current mouse smoothing: {0}", mLook.smoothing));
                    }
                    return(HelpCommand.Execute(SetMouseSmoothing.name));
                }
                else if (mLook == null)
                {
                    return(error);
                }
                else
                {
                    mLook.smoothing = new Vector2(speed, speed);
                    return(string.Format("Set mouse smoothing to: {0}", mLook.smoothing.ToString()));
                }
            }
        void Start()
        {
            dfUnity = DaggerfallUnity.Instance;
            streamingWorld = GameObject.FindObjectOfType<StreamingWorld>();
            playerEnterExit = GetComponent<PlayerEnterExit>();
            playerGPS = GetComponent<PlayerGPS>();
            playerMotor = GetComponent<PlayerMotor>();
            playerMouseLook = GameObject.FindObjectOfType<PlayerMouseLook>();
            titleScreen = GameObject.FindObjectOfType<ShowTitleScreen>();

            // Get starting run speed
            if (playerMotor)
                startRunSpeed = playerMotor.runSpeed;

            // Get starting torch range
            if (PlayerTorch != null)
                startTorchRange = PlayerTorch.range;
        }
        public void ApplyStartSettings()
        {
            // Resolution
            if (DaggerfallUnity.Settings.ExclusiveFullscreen && DaggerfallUnity.Settings.Fullscreen)
            {
                Screen.SetResolution(
                    DaggerfallUnity.Settings.ResolutionWidth,
                    DaggerfallUnity.Settings.ResolutionHeight,
                    FullScreenMode.ExclusiveFullScreen);
            }
            else
            {
                Screen.SetResolution(
                    DaggerfallUnity.Settings.ResolutionWidth,
                    DaggerfallUnity.Settings.ResolutionHeight,
                    DaggerfallUnity.Settings.Fullscreen);
            }

            // Camera settings
            GameObject cameraObject = GameObject.FindGameObjectWithTag("MainCamera");

            if (cameraObject)
            {
                // Set camera FOV
                Camera camera = cameraObject.GetComponent <Camera>();
                if (camera)
                {
                    camera.fieldOfView = DaggerfallUnity.Settings.FieldOfView;
                }

                // Set mouse look
                PlayerMouseLook mouseLook = cameraObject.GetComponent <PlayerMouseLook>();
                if (mouseLook)
                {
                    mouseLook.invertMouseY = DaggerfallUnity.Settings.InvertMouseVertical;
                }

                // Set mouse look smoothing
                if (mouseLook)
                {
                    mouseLook.enableSmoothing = DaggerfallUnity.Settings.MouseLookSmoothing;
                }

                // Set mouse look sensitivity
                if (mouseLook)
                {
                    mouseLook.sensitivityScale = DaggerfallUnity.Settings.MouseLookSensitivity;
                }
            }

            // Set shadow resolution
            GameManager.UpdateShadowResolution();

            // VSync settings
            if (DaggerfallUnity.Settings.VSync)
            {
                QualitySettings.vSyncCount = 1;
            }
            else
            {
                QualitySettings.vSyncCount = 0;
            }

            // Target frame rate settings
            // Does nothing if VSync enabled
            // Default is 0 but anything below 30 is ignored and treated as disabled
            if (DaggerfallUnity.Settings.TargetFrameRate >= 30 && !DaggerfallUnity.Settings.VSync)
            {
                Application.targetFrameRate = DaggerfallUnity.Settings.TargetFrameRate;
            }

            // Filter settings
            DaggerfallUnity.Instance.MaterialReader.MainFilterMode         = (FilterMode)DaggerfallUnity.Settings.MainFilterMode;
            DaggerfallUnity.Instance.MaterialReader.CompressModdedTextures = DaggerfallUnity.Settings.CompressModdedTextures;

            // HUD settings
            DaggerfallHUD hud = DaggerfallUI.Instance.DaggerfallHUD;

            if (hud != null)                                              //null at startup
            {
                hud.ShowCrosshair = DaggerfallUnity.Settings.Crosshair;
            }

            // Weapon swing settings
            WeaponManager weaponManager = GameManager.Instance.WeaponManager;

            weaponManager.AttackThreshold = DaggerfallUnity.Settings.WeaponAttackThreshold;
            TransportManager transportManager = GameManager.Instance.TransportManager;

            // Weapon hand settings
            // Only supporting left-hand rendering for now
            // More handedness options may be added later
            if (DaggerfallUnity.Settings.Handedness == 1)
            {
                weaponManager.ScreenWeapon.FlipHorizontal = true;
            }

            // GodMode setting
            PlayerEntity playerEntity = FindPlayerEntity();

            playerEntity.GodMode = GodMode;

            PlayerSpeedChanger speedChanger = FindPlayerSpeedChanger();

            speedChanger.ToggleSneak = DaggerfallUnity.Settings.ToggleSneak;

            // Enable/disable videos
            DaggerfallUI.Instance.enableVideos = EnableVideos;

            // Streaming world terrain distance
            GameManager.Instance.StreamingWorld.TerrainDistance = DaggerfallUnity.Settings.TerrainDistance;
        }
Exemple #11
0
        void ApplyStartSettings()
        {
            // Resolution
            Screen.SetResolution(
                DaggerfallUnity.Settings.ResolutionWidth,
                DaggerfallUnity.Settings.ResolutionHeight,
                DaggerfallUnity.Settings.Fullscreen);

            // Camera settings
            GameObject cameraObject = GameObject.FindGameObjectWithTag("MainCamera");

            if (cameraObject)
            {
                // Set camera FOV
                Camera camera = cameraObject.GetComponent <Camera>();
                if (camera)
                {
                    camera.fieldOfView = DaggerfallUnity.Settings.FieldOfView;
                }

                // Set mouse look
                PlayerMouseLook mouseLook = cameraObject.GetComponent <PlayerMouseLook>();
                if (mouseLook)
                {
                    mouseLook.invertMouseY = DaggerfallUnity.Settings.InvertMouseVertical;
                }

                // Set mouse look smoothing
                if (mouseLook)
                {
                    mouseLook.enableSmoothing = DaggerfallUnity.Settings.MouseLookSmoothing;
                }

                // Set mouse look sensitivity
                if (mouseLook)
                {
                    mouseLook.sensitivityScale = DaggerfallUnity.Settings.MouseLookSensitivity;
                }

                // Set rendering path
                if (DaggerfallUnity.Settings.UseLegacyDeferred)
                {
                    camera.renderingPath = RenderingPath.DeferredLighting;
                }
            }

            // VSync settings
            if (DaggerfallUnity.Settings.VSync)
            {
                QualitySettings.vSyncCount = 1;
            }
            else
            {
                QualitySettings.vSyncCount = 0;
            }

            // Filter settings
            DaggerfallUnity.Instance.MaterialReader.MainFilterMode = (FilterMode)DaggerfallUnity.Settings.MainFilterMode;

            // HUD settings
            DaggerfallHUD hud = DaggerfallUI.Instance.DaggerfallHUD;

            if (hud != null)
            {
                hud.ShowCrosshair = DaggerfallUnity.Settings.Crosshair;
            }

            // Weapon swing settings
            WeaponManager weaponManager = GameManager.Instance.WeaponManager;

            weaponManager.HorizontalThreshold = DaggerfallUnity.Settings.WeaponSwingThreshold;
            weaponManager.VerticalThreshold   = DaggerfallUnity.Settings.WeaponSwingThreshold;
            weaponManager.TriggerCount        = DaggerfallUnity.Settings.WeaponSwingTriggerCount;

            // Weapon hand settings
            // Only supporting left-hand rendering for now
            // More handedness options may be added later
            if (DaggerfallUnity.Settings.Handedness == 1)
            {
                weaponManager.RightHandWeapon.LeftHand = true;
            }

            // GodMode setting
            playerHealth.GodMode = GodMod;

            // Enable/disable videos
            DaggerfallUI.Instance.enableVideos = EnableVideos;

            // Streaming world terrain distance
            int terrainDistance = DaggerfallUnity.Settings.TerrainDistance;

            if (DaggerfallUnity.Settings.Nystul_IncreasedTerrainDistance)
            {
                // Reduce terrain distance by 1 if far terrain enabled
                terrainDistance = Mathf.Clamp(terrainDistance - 1, 1, 4);
            }
            GameManager.Instance.StreamingWorld.TerrainDistance = terrainDistance;
        }
        void Awake()
        {
            playerEnterExit = GetComponent<PlayerEnterExit>();
            if (!playerEnterExit)
                throw new Exception("PlayerEnterExit not found.");

            playerCamera = GetComponentInChildren<Camera>();
            if (!playerCamera)
                throw new Exception("Player Camera not found.");

            playerMouseLook = playerCamera.GetComponent<PlayerMouseLook>();
            if (!playerMouseLook)
                throw new Exception("PlayerMouseLook not found.");

            playerMotor = GetComponent<PlayerMotor>();
            if (!playerMotor)
                throw new Exception("PlayerMotor not found.");

            playerEntityBehaviour = GetComponent<DaggerfallEntityBehaviour>();
            if (!playerEntityBehaviour)
                throw new Exception("PlayerEntityBehaviour not found.");

            SaveLoadManager.RegisterSerializableGameObject(this);
        }
Exemple #13
0
        void ApplyStartSettings()
        {
            // Camera settings
            GameObject cameraObject = GameObject.FindGameObjectWithTag("MainCamera");

            if (cameraObject)
            {
                // Set camera FOV
                Camera camera = cameraObject.GetComponent <Camera>();
                if (camera)
                {
                    camera.fieldOfView = DaggerfallUnity.Settings.FieldOfView;
                }

                // Set mouse look
                PlayerMouseLook mouseLook = cameraObject.GetComponent <PlayerMouseLook>();
                if (mouseLook)
                {
                    mouseLook.invertMouseY = DaggerfallUnity.Settings.InvertMouseVertical;
                }

                // Set mouse look smoothing
                if (mouseLook)
                {
                    mouseLook.enableSmoothing = DaggerfallUnity.Settings.MouseLookSmoothing;
                }

                // Set mouse look sensitivity
                if (mouseLook)
                {
                    mouseLook.sensitivityScale = DaggerfallUnity.Settings.MouseLookSensitivity;
                }

                // Set rendering path
                if (DaggerfallUnity.Settings.UseLegacyDeferred)
                {
                    camera.renderingPath = RenderingPath.DeferredLighting;
                }
            }

            // VSync settings
            if (DaggerfallUnity.Settings.VSync)
            {
                QualitySettings.vSyncCount = 1;
            }
            else
            {
                QualitySettings.vSyncCount = 0;
            }

            // Filter settings
            DaggerfallUnity.Instance.MaterialReader.MainFilterMode = (FilterMode)DaggerfallUnity.Settings.MainFilterMode;

            // HUD settings
            DaggerfallHUD hud = DaggerfallUI.Instance.DaggerfallHUD;

            if (hud != null)
            {
                hud.ShowCrosshair = DaggerfallUnity.Settings.Crosshair;
            }

            // Weapon hand settings
            WeaponManager weaponManager = GameManager.Instance.WeaponManager;

            weaponManager.RightHandWeapon.LeftHand = DaggerfallUnity.Settings.ShowWeaponLeftHand;

            // Weapon swing settings
            weaponManager.HorizontalThreshold = DaggerfallUnity.Settings.WeaponSwingThreshold;
            weaponManager.VerticalThreshold   = DaggerfallUnity.Settings.WeaponSwingThreshold;
            weaponManager.TriggerCount        = DaggerfallUnity.Settings.WeaponSwingTriggerCount;

            // GodMode setting
            playerHealth.GodMode = GodMod;

            // Enable/disable videos
            DaggerfallUI.Instance.enableVideos = EnableVideos;
        }
Exemple #14
0
        void StartFromClassicSave()
        {
            DaggerfallUnity.ResetUID();
            QuestMachine.Instance.ClearState();
            RaiseOnNewGameEvent();
            ResetWeaponManager();

            // Save index must be in range
            if (classicSaveIndex < 0 || classicSaveIndex >= 6)
            {
                throw new IndexOutOfRangeException("classicSaveIndex out of range.");
            }

            // Open saves in parent path of Arena2 folder
            string    path      = SaveLoadManager.Instance.DaggerfallSavePath;
            SaveGames saveGames = new SaveGames(path);

            if (!saveGames.IsPathOpen)
            {
                throw new Exception(string.Format("Could not open Daggerfall saves path {0}", path));
            }

            // Open save index
            if (!saveGames.TryOpenSave(classicSaveIndex))
            {
                string error = string.Format("Could not open classic save index {0}.", classicSaveIndex);
                DaggerfallUI.MessageBox(error);
                DaggerfallUnity.LogMessage(string.Format(error), true);
                return;
            }

            // Get required save data
            SaveTree saveTree = saveGames.SaveTree;
            SaveVars saveVars = saveGames.SaveVars;

            SaveTreeBaseRecord positionRecord = saveTree.FindRecord(RecordTypes.CharacterPositionRecord);

            if (NoWorld)
            {
                playerEnterExit.DisableAllParents();
            }
            else
            {
                // Set player to world position
                playerEnterExit.EnableExteriorParent();
                StreamingWorld streamingWorld = FindStreamingWorld();
                int            worldX         = positionRecord.RecordRoot.Position.WorldX;
                int            worldZ         = positionRecord.RecordRoot.Position.WorldZ;
                streamingWorld.TeleportToWorldCoordinates(worldX, worldZ);
                streamingWorld.suppressWorld = false;
            }

            GameObject      cameraObject = GameObject.FindGameObjectWithTag("MainCamera");
            PlayerMouseLook mouseLook    = cameraObject.GetComponent <PlayerMouseLook>();

            if (mouseLook)
            {
                // Classic save value ranges from -256 (looking up) to 256 (looking down).
                // The maximum up and down range of view in classic is similar to 45 degrees up and down in DF Unity.
                float pitch = positionRecord.RecordRoot.Pitch;
                if (pitch != 0)
                {
                    pitch = (pitch * 45 / 256);
                }
                mouseLook.Pitch = pitch;

                float yaw = positionRecord.RecordRoot.Yaw;
                // In classic saves 2048 units of yaw is 360 degrees.
                if (yaw != 0)
                {
                    yaw = (yaw * 360 / 2048);
                }
                mouseLook.Yaw = yaw;
            }

            // Set whether the player's weapon is drawn
            GameManager.Instance.WeaponManager.Sheathed = (!saveVars.WeaponDrawn);

            // Set game time
            DaggerfallUnity.Instance.WorldTime.Now.FromClassicDaggerfallTime(saveVars.GameTime);

            // Get character record
            List <SaveTreeBaseRecord> records = saveTree.FindRecords(RecordTypes.Character);

            if (records.Count != 1)
            {
                throw new Exception("SaveTree CharacterRecord not found.");
            }

            // Get prototypical character document data
            CharacterRecord characterRecord = (CharacterRecord)records[0];

            characterDocument = characterRecord.ToCharacterDocument();

            // Assign data to player entity
            PlayerEntity playerEntity = FindPlayerEntity();

            playerEntity.AssignCharacter(characterDocument, characterRecord.ParsedData.level, characterRecord.ParsedData.maxHealth, false);

            // Assign biography modifiers
            playerEntity.BiographyResistDiseaseMod = saveVars.BiographyResistDiseaseMod;
            playerEntity.BiographyResistMagicMod   = saveVars.BiographyResistMagicMod;
            playerEntity.BiographyAvoidHitMod      = saveVars.BiographyAvoidHitMod;
            playerEntity.BiographyResistPoisonMod  = saveVars.BiographyResistPoisonMod;
            playerEntity.BiographyFatigueMod       = saveVars.BiographyFatigueMod;

            // Assign faction data
            playerEntity.FactionData.ImportClassicReputation(saveVars);

            // Assign global variables
            playerEntity.GlobalVars.ImportClassicGlobalVars(saveVars);

            // Set time of last check for raising skills
            playerEntity.TimeOfLastSkillIncreaseCheck = saveVars.LastSkillCheckTime;

            // Assign items to player entity
            playerEntity.AssignItems(saveTree);

            // Assign gold pieces
            playerEntity.GoldPieces = (int)characterRecord.ParsedData.physicalGold;

            // GodMode setting
            playerEntity.GodMode = saveVars.GodMode;

            // Setup bank accounts
            var bankRecords = saveTree.FindRecord(RecordTypes.BankAccount);

            Banking.DaggerfallBankManager.ReadNativeBankData(bankRecords);

            // Get regional data.
            playerEntity.RegionData = saveVars.RegionData;

            // Set time tracked by playerEntity for game minute-based updates
            playerEntity.LastGameMinutes = saveVars.GameTime;

            // Start game
            DaggerfallUI.Instance.PopToHUD();
            GameManager.Instance.PauseGame(false);
            DaggerfallUI.Instance.FadeHUDFromBlack();
            DaggerfallUI.PostMessage(PostStartMessage);

            lastStartMethod = StartMethods.LoadClassicSave;
            SaveIndex       = -1;

            if (OnStartGame != null)
            {
                OnStartGame(this, null);
            }
        }
        void ApplyStartSettings()
        {
            // Resolution
            Screen.SetResolution(
                DaggerfallUnity.Settings.ResolutionWidth,
                DaggerfallUnity.Settings.ResolutionHeight,
                DaggerfallUnity.Settings.Fullscreen);

            // Camera settings
            GameObject cameraObject = GameObject.FindGameObjectWithTag("MainCamera");

            if (cameraObject)
            {
                // Set camera FOV
                Camera camera = cameraObject.GetComponent <Camera>();
                if (camera)
                {
                    camera.fieldOfView = DaggerfallUnity.Settings.FieldOfView;
                }

                // Set mouse look
                PlayerMouseLook mouseLook = cameraObject.GetComponent <PlayerMouseLook>();
                if (mouseLook)
                {
                    mouseLook.invertMouseY = DaggerfallUnity.Settings.InvertMouseVertical;
                }

                // Set mouse look smoothing
                if (mouseLook)
                {
                    mouseLook.enableSmoothing = DaggerfallUnity.Settings.MouseLookSmoothing;
                }

                // Set mouse look sensitivity
                if (mouseLook)
                {
                    mouseLook.sensitivityScale = DaggerfallUnity.Settings.MouseLookSensitivity;
                }

                // Set rendering path
                if (DaggerfallUnity.Settings.UseLegacyDeferred)
                {
                    camera.renderingPath = RenderingPath.DeferredLighting;
                }
            }

            // Shadow Resoltion Mode
            switch (DaggerfallUnity.Settings.ShadowResolutionMode)
            {
            case 0:
                QualitySettings.shadowResolution = ShadowResolution.Low;
                break;

            case 1:
            default:
                QualitySettings.shadowResolution = ShadowResolution.Medium;
                break;

            case 2:
                QualitySettings.shadowResolution = ShadowResolution.High;
                break;

            case 3:
                QualitySettings.shadowResolution = ShadowResolution.VeryHigh;
                break;
            }

            // VSync settings
            if (DaggerfallUnity.Settings.VSync)
            {
                QualitySettings.vSyncCount = 1;
            }
            else
            {
                QualitySettings.vSyncCount = 0;
            }

            // Filter settings
            DaggerfallUnity.Instance.MaterialReader.MainFilterMode         = (FilterMode)DaggerfallUnity.Settings.MainFilterMode;
            DaggerfallUnity.Instance.MaterialReader.CompressModdedTextures = DaggerfallUnity.Settings.CompressModdedTextures;

            // HUD settings
            DaggerfallHUD hud = DaggerfallUI.Instance.DaggerfallHUD;

            if (hud != null)                                              //null at startup
            {
                hud.ShowCrosshair = DaggerfallUnity.Settings.Crosshair;
            }

            // Weapon swing settings
            WeaponManager weaponManager = GameManager.Instance.WeaponManager;

            weaponManager.AttackThreshold = DaggerfallUnity.Settings.WeaponAttackThreshold;
            TransportManager transportManager = GameManager.Instance.TransportManager;

            // Weapon hand settings
            // Only supporting left-hand rendering for now
            // More handedness options may be added later
            if (DaggerfallUnity.Settings.Handedness == 1)
            {
                weaponManager.ScreenWeapon.FlipHorizontal = true;
            }

            // GodMode setting
            PlayerEntity playerEntity = FindPlayerEntity();

            playerEntity.GodMode = GodMode;

            // Enable/disable videos
            DaggerfallUI.Instance.enableVideos = EnableVideos;

            // Streaming world terrain distance
            GameManager.Instance.StreamingWorld.TerrainDistance = DaggerfallUnity.Settings.TerrainDistance;
        }
        void StartFromClassicSave()
        {
            DaggerfallUnity.ResetUID();
            QuestMachine.Instance.ClearState();
            RaiseOnNewGameEvent();
            ResetWeaponManager();

            // Save index must be in range
            if (classicSaveIndex < 0 || classicSaveIndex >= 6)
            {
                throw new IndexOutOfRangeException("classicSaveIndex out of range.");
            }

            // Open saves in parent path of Arena2 folder
            string    path      = SaveLoadManager.Instance.DaggerfallSavePath;
            SaveGames saveGames = new SaveGames(path);

            if (!saveGames.IsPathOpen)
            {
                throw new Exception(string.Format("Could not open Daggerfall saves path {0}", path));
            }

            // Open save index
            if (!saveGames.TryOpenSave(classicSaveIndex))
            {
                string error = string.Format("Could not open classic save index {0}.", classicSaveIndex);
                DaggerfallUI.MessageBox(error);
                DaggerfallUnity.LogMessage(string.Format(error), true);
                return;
            }

            // Get required save data
            SaveTree saveTree = saveGames.SaveTree;
            SaveVars saveVars = saveGames.SaveVars;

            SaveTreeBaseRecord positionRecord = saveTree.FindRecord(RecordTypes.CharacterPositionRecord);

            if (NoWorld)
            {
                playerEnterExit.DisableAllParents();
            }
            else
            {
                // Set player to world position
                playerEnterExit.EnableExteriorParent();
                StreamingWorld streamingWorld = FindStreamingWorld();
                int            worldX         = positionRecord.RecordRoot.Position.WorldX;
                int            worldZ         = positionRecord.RecordRoot.Position.WorldZ;
                streamingWorld.TeleportToWorldCoordinates(worldX, worldZ);
                streamingWorld.suppressWorld = false;
            }

            GameObject      cameraObject = GameObject.FindGameObjectWithTag("MainCamera");
            PlayerMouseLook mouseLook    = cameraObject.GetComponent <PlayerMouseLook>();

            if (mouseLook)
            {
                // Classic save value ranges from -256 (looking up) to 256 (looking down).
                // The maximum up and down range of view in classic is similar to 45 degrees up and down in DF Unity.
                float pitch = positionRecord.RecordRoot.Pitch;
                if (pitch != 0)
                {
                    pitch = (pitch * 45 / 256);
                }
                mouseLook.Pitch = pitch;

                float yaw = positionRecord.RecordRoot.Yaw;
                // In classic saves 2048 units of yaw is 360 degrees.
                if (yaw != 0)
                {
                    yaw = (yaw * 360 / 2048);
                }
                mouseLook.Yaw = yaw;
            }

            // Set whether the player's weapon is drawn
            WeaponManager weaponManager = GameManager.Instance.WeaponManager;

            weaponManager.Sheathed = (!saveVars.WeaponDrawn);

            // Set game time
            DaggerfallUnity.Instance.WorldTime.Now.FromClassicDaggerfallTime(saveVars.GameTime);

            // Get character record
            List <SaveTreeBaseRecord> records = saveTree.FindRecords(RecordTypes.Character);

            if (records.Count != 1)
            {
                throw new Exception("SaveTree CharacterRecord not found.");
            }

            // Get prototypical character document data
            CharacterRecord characterRecord = (CharacterRecord)records[0];

            characterDocument = characterRecord.ToCharacterDocument();

            // Assign data to player entity
            PlayerEntity playerEntity = FindPlayerEntity();

            playerEntity.AssignCharacter(characterDocument, characterRecord.ParsedData.level, characterRecord.ParsedData.maxHealth, false);

            // Assign biography modifiers
            playerEntity.BiographyResistDiseaseMod = saveVars.BiographyResistDiseaseMod;
            playerEntity.BiographyResistMagicMod   = saveVars.BiographyResistMagicMod;
            playerEntity.BiographyAvoidHitMod      = saveVars.BiographyAvoidHitMod;
            playerEntity.BiographyResistPoisonMod  = saveVars.BiographyResistPoisonMod;
            playerEntity.BiographyFatigueMod       = saveVars.BiographyFatigueMod;

            // Assign faction data
            playerEntity.FactionData.ImportClassicReputation(saveVars);

            // Assign global variables
            playerEntity.GlobalVars.ImportClassicGlobalVars(saveVars);

            // Set time of last check for raising skills
            playerEntity.TimeOfLastSkillIncreaseCheck = saveVars.LastSkillCheckTime;

            // Assign items to player entity
            playerEntity.AssignItems(saveTree);

            // Assign guild memberships
            playerEntity.AssignGuildMemberships(saveTree);

            // Assign diseases and poisons to player entity
            playerEntity.AssignDiseasesAndPoisons(saveTree);

            // Assign gold pieces
            playerEntity.GoldPieces = (int)characterRecord.ParsedData.physicalGold;

            // Assign weapon hand being used
            weaponManager.UsingRightHand = !saveVars.UsingLeftHandWeapon;

            // GodMode setting
            playerEntity.GodMode = saveVars.GodMode;

            // Setup bank accounts
            var bankRecords = saveTree.FindRecord(RecordTypes.BankAccount);

            Banking.DaggerfallBankManager.ReadNativeBankData(bankRecords);

            // Get regional data.
            playerEntity.RegionData = saveVars.RegionData;

            // Set time tracked by playerEntity for game minute-based updates
            playerEntity.LastGameMinutes = saveVars.GameTime;

            // Get breath remaining if player was submerged (0 if they were not in the water)
            playerEntity.CurrentBreath = saveVars.BreathRemaining;

            // TODO: Import classic spellbook
            playerEntity.DeserializeSpellbook(null);

            // Get last type of crime committed
            playerEntity.CrimeCommitted = (PlayerEntity.Crimes)saveVars.CrimeCommitted;

            // Get weather
            byte[] climateWeathers = saveVars.ClimateWeathers;

            // Enums for thunder and snow are reversed in classic and Unity, so they are converted here.
            for (int i = 0; i < climateWeathers.Length; i++)
            {
                // TODO: 0x80 flag can be set for snow or rain, to add fog to these weathers. This isn't in DF Unity yet, so
                // temporarily removing the flag.
                climateWeathers[i] &= 0x7f;
                if (climateWeathers[i] == 5)
                {
                    climateWeathers[i] = 6;
                }
                else if (climateWeathers[i] == 6)
                {
                    climateWeathers[i] = 5;
                }
            }
            GameManager.Instance.WeatherManager.PlayerWeather.ClimateWeathers = climateWeathers;

            // Load character biography text
            playerEntity.BackStory = saveGames.BioFile.Lines;

            // Validate spellbook item
            DaggerfallUnity.Instance.ItemHelper.ValidateSpellbookItem(playerEntity);

            // Start game
            DaggerfallUI.Instance.PopToHUD();
            GameManager.Instance.PauseGame(false);
            DaggerfallUI.Instance.FadeBehaviour.FadeHUDFromBlack();
            DaggerfallUI.PostMessage(PostStartMessage);

            lastStartMethod = StartMethods.LoadClassicSave;
            SaveIndex       = -1;

            if (OnStartGame != null)
            {
                OnStartGame(this, null);
            }
        }
        public void ApplyStartSettings()
        {
            // Resolution
            if (DaggerfallUnity.Settings.ExclusiveFullscreen && DaggerfallUnity.Settings.Fullscreen)
            {
                Screen.SetResolution(
                    DaggerfallUnity.Settings.ResolutionWidth,
                    DaggerfallUnity.Settings.ResolutionHeight,
                    FullScreenMode.ExclusiveFullScreen);
            }
            else
            {
                Screen.SetResolution(
                    DaggerfallUnity.Settings.ResolutionWidth,
                    DaggerfallUnity.Settings.ResolutionHeight,
                    DaggerfallUnity.Settings.Fullscreen);
            }

            // Camera settings
            GameObject cameraObject = GameObject.FindGameObjectWithTag("MainCamera");

            if (cameraObject)
            {
                // Set camera FOV
                Camera camera = cameraObject.GetComponent <Camera>();
                if (camera)
                {
                    camera.fieldOfView = DaggerfallUnity.Settings.FieldOfView;
                }

                // Set mouse look
                PlayerMouseLook mouseLook = cameraObject.GetComponent <PlayerMouseLook>();
                if (mouseLook)
                {
                    mouseLook.invertMouseY = DaggerfallUnity.Settings.InvertMouseVertical;
                    // Set mouse look smoothing
                    mouseLook.enableSmoothing = DaggerfallUnity.Settings.MouseLookSmoothing;
                    // Set mouse look sensitivity
                    mouseLook.sensitivityScale = DaggerfallUnity.Settings.MouseLookSensitivity;

                    mouseLook.joystickSensitivityScale = DaggerfallUnity.Settings.JoystickLookSensitivity;
                }

                // Anti-aliasing method
                PostProcessLayer postProcessLayer = camera.GetComponent <PostProcessLayer>();
                if (postProcessLayer)
                {
                    switch ((AntiAliasingMethods)DaggerfallUnity.Settings.Antialiasing)
                    {
                    case AntiAliasingMethods.None:
                        postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.None;
                        break;

                    case AntiAliasingMethods.FXAA:
                        postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.FastApproximateAntialiasing;
                        break;

                    case AntiAliasingMethods.SMAA:
                        postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing;
                        break;

                    case AntiAliasingMethods.TAA:
                        postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.TemporalAntialiasing;
                        break;
                    }
                }
            }

            InputManager.Instance.JoystickCursorSensitivity = DaggerfallUnity.Settings.JoystickCursorSensitivity;

            InputManager.Instance.JoystickMovementThreshold = DaggerfallUnity.Settings.JoystickMovementThreshold;

            InputManager.Instance.JoystickDeadzone = DaggerfallUnity.Settings.JoystickDeadzone;

            InputManager.Instance.EnableController = DaggerfallUnity.Settings.EnableController;

            Application.runInBackground = DaggerfallUnity.Settings.RunInBackground;

            // Set shadow resolution
            GameManager.UpdateShadowResolution();

            // VSync settings
            if (DaggerfallUnity.Settings.VSync)
            {
                QualitySettings.vSyncCount = 1;
            }
            else
            {
                QualitySettings.vSyncCount = 0;
            }

            // Target frame rate settings
            // Does nothing if VSync enabled
            // Default is 0 but anything below 30 is ignored and treated as disabled
            if (DaggerfallUnity.Settings.TargetFrameRate >= 30 && !DaggerfallUnity.Settings.VSync)
            {
                Application.targetFrameRate = DaggerfallUnity.Settings.TargetFrameRate;
            }

            // Filter settings
            DaggerfallUnity.Instance.MaterialReader.MainFilterMode         = (FilterMode)DaggerfallUnity.Settings.MainFilterMode;
            DaggerfallUnity.Instance.MaterialReader.CompressModdedTextures = DaggerfallUnity.Settings.CompressModdedTextures;

            // HUD settings
            DaggerfallHUD hud = DaggerfallUI.Instance.DaggerfallHUD;

            if (hud != null)                                              //null at startup
            {
                hud.ShowCrosshair = DaggerfallUnity.Settings.Crosshair;
            }

            // Weapon swing settings
            WeaponManager weaponManager = GameManager.Instance.WeaponManager;

            weaponManager.AttackThreshold = DaggerfallUnity.Settings.WeaponAttackThreshold;
            TransportManager transportManager = GameManager.Instance.TransportManager;

            // Weapon hand settings
            // Only supporting left-hand rendering for now
            // More handedness options may be added later
            if (DaggerfallUnity.Settings.Handedness == 1)
            {
                weaponManager.ScreenWeapon.FlipHorizontal = true;
            }

            // GodMode setting
            PlayerEntity playerEntity = FindPlayerEntity();

            playerEntity.GodMode = GodMode;

            PlayerSpeedChanger speedChanger = FindPlayerSpeedChanger();

            speedChanger.ToggleSneak = DaggerfallUnity.Settings.ToggleSneak;

            // Enable/disable videos
            DaggerfallUI.Instance.enableVideos = EnableVideos;

            // Streaming world terrain distance
            GameManager.Instance.StreamingWorld.TerrainDistance = DaggerfallUnity.Settings.TerrainDistance;
        }