0 of 0

File information

Last updated

Original upload

Created by

InnoCreator

Uploaded by

InnoCreator

Virus scan

Safe to use

About this mod

Reduces the game speed 20x while your map is open to make marking locations and stuff easier and safer.

Permissions and credits
Changelogs
Donations
Reduces the game speed 20x while your map is open to make marking locations and stuff easier and safer.

using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using System.Reflection;
using UnityEngine;

namespace MapPause
{
    [BepInPlugin("innocreator.mappause", "MapPause", "1.0")]
    [BepInProcess("valheim.exe")]
    public class MapPause : BaseUnityPlugin
    {
        public static ConfigEntry<bool> showDebugMessages;
        public static ConfigEntry<float> gameTimeScale;
        public static ConfigEntry<float> mapTimeScale;
        public static ConfigEntry<float> gamepadMapSpeed;
        private static readonly FieldInfo gameTimeScaleField = typeof(Game).GetField("m_timeScale", BindingFlags.NonPublic | BindingFlags.Static);
        private static readonly FieldInfo gamepadMapSpeedField = typeof(Minimap).GetField("m_gamepadMoveSpeed", BindingFlags.NonPublic | BindingFlags.Instance);
        private readonly Harmony harmony = new Harmony("innocreator.mappause");

        void Awake()
        {
            showDebugMessages = Config.Bind<bool>("General", "showDebugMessages", false, "Display script debug messages.");
            gameTimeScale = Config.Bind<float>("Options", "gameTimeScale", 1f, "Set the base GAME time scale.");
            mapTimeScale = Config.Bind<float>("Options", "mapTimeScale", .05f, "Set the time scale while using your MAP.");
            gamepadMapSpeed = Config.Bind<float>("Options", "gamepadMapSpeed", 5f, "Set your controller map sensitivity.");
            harmony.PatchAll();
        }

        [HarmonyPatch(typeof(Minimap), nameof(Minimap.SetMapMode))]
        public static class MapPause_SetMapMode
        {
            static void Prefix(Minimap.MapMode mode)
            {
                Minimap minimapInstance = Minimap.instance;

                if (showDebugMessages.Value)
                    Debug.Log("innoCreator  Map Mode: " + mode);
                if (mode == Minimap.MapMode.Large)
                {
                    gameTimeScaleField.SetValue(null, mapTimeScale.Value);
                    gamepadMapSpeedField.SetValue(minimapInstance, gamepadMapSpeed.Value);
                    if (showDebugMessages.Value)
                        Debug.Log("innoCreator  Large Map Sense: " + gamepadMapSpeedField.GetValue(minimapInstance) + "  Time Scale: " + gameTimeScaleField.GetValue(null));
                    return;
                }
                gameTimeScaleField.SetValue(null, gameTimeScale.Value);
                gamepadMapSpeedField.SetValue(minimapInstance, .33f);
                if (showDebugMessages.Value)
                    Debug.Log("innoCreator  Small Map Sense: " + gamepadMapSpeedField.GetValue(minimapInstance) + "  Time Scale: " + gameTimeScaleField.GetValue(null));
                return;
            }
        }
    }
}