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
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;
}
}
}
}