You are viewing a potentially older version of this package. View all versions.
Khundian-Shadows_of_Doubt_Tracker_Control-0.5.0 icon

Shadows of Doubt Tracker Control

A lightweight BepInEx plugin for Shadows of Doubt that lets you mute specific tracker “Movement Alert” toasts by location. Open the UI with F8 (default), hotkey can be changed in config. Requires BepInEx 6 IL2CPP.

Date uploaded 10 months ago
Version 0.5.0
Download link Khundian-Shadows_of_Doubt_Tracker_Control-0.5.0.zip
Downloads 624
Dependency string Khundian-Shadows_of_Doubt_Tracker_Control-0.5.0

This mod requires the following mods to function

BepInEx-BepInExPack_IL2CPP-6.0.733 icon
BepInEx-BepInExPack_IL2CPP

BepInEx pack for IL2CPP x64 Unity games. Preconfigured and ready to use.

Preferred version: 6.0.733

README

Shadows of Doubt – Tracker Control

A lightweight BepInEx plugin for Shadows of Doubt that lets you mute specific tracker “Movement Alert” toasts by location. Open the UI with F8 (default), hotkey can be changed in config.

Version: 0.5.0

Requirements

  • Game: Shadows of Doubt (IL2CPP / Unity)
  • Mod loader: BepInEx 6 (Unity.IL2CPP)
  • Platform: Windows (paths below use Windows examples; other OSes supported by BepInEx may differ)

Install

  1. Install BepInEx 6 for Shadows of Doubt according to the BepInEx instructions.

  2. Download this plugin (a zip containing Khundian.SoD.TrackerControl.dll).

  3. Extract to your game’s BepInEx/plugins folder. Recommended layout:

    • BepInEx/plugins/Khundian-Shadows_of_Doubt_Tracker_Control/Khundian.SoD.TrackerControl.dll
  4. Launch the game. A config file Khundian.SoD.TrackerControl.cfg is created under BepInEx/config on first run.

  5. Verify load: BepInEx logs show a line similar to

    • Shadows of Doubt Tracker Control v0.5.0 loaded. Muter=ON ...

To uninstall, remove the plugin folder from BepInEx/plugins.

Use In‑Game

  • Toggle UI: Press F8 to open/close the Tracker Control window (in‑game only).
  • Mute by location: Check the box next to a location to mute future tracker toasts from that location.
  • Learn locations: The mod “learns” location names when Movement Alert toasts appear. Visit a location once to make it appear in the list.
  • Close safely: Press F8 again or click Close. If the ESC key is pressed while the UI is open, the UI closes first and prevents the game menu from opening on that same keypress. You'll have to press ESC again to open the game menu.
  • Changes save automatically to the config.

Tip: Use the filter field to quickly find a location in long lists. You can also Remove entries from the list; they’ll re‑appear the next time that location triggers an alert.

Configuration

Config file: BepInEx/config/Khundian.SoD.TrackerControl.cfg

Key options you might change:

  • Mute.EnablePerTrackerMute (bool, default true)

    • Master enable for muting.
  • Mute.MuteTrackerNamePatterns (string)

    • Comma/semicolon‑separated list of names or patterns that should be muted.
    • Normally added via the in-game UI after receiving ingame movement alerts.
  • Mute.AudioMuteWindowMs (int, default 100)

    • While a toast is muted, also suppress likely related world SFX within this time window near the player. Increase if you still hear a brief ping.
  • Mute.MuteUIPings (bool, default true)

    • Also suppress 2D UI pings during the mute window.
  • UI.TrackerMuterToggleKey (string, default F8)

    • Hotkey to open/close the in‑game UI. Use a Unity KeyCode name (e.g., F7, BackQuote, Home).
  • Mute.KnownTrackerLocations (string)

    • Internal list of learned locations (semicolon‑separated). Normally edited via the in‑game UI.

Known Behavior & Tips

  • The UI only opens while in a gameplay scene (not in the main menu).
  • Per‑location mute toggles in the UI directly update MuteTrackerNamePatterns behind the scenes.
  • Audio suppression uses a small time window to avoid over‑muting unrelated sounds; tune AudioMuteWindowMs to taste.

Troubleshooting

  • The UI doesn’t open:

    • Ensure you’re in‑game (not in the main menu).
    • Confirm the plugin DLL is in BepInEx/plugins and BepInEx is installed for IL2CPP.
  • A location never shows up:

    • You must see at least one Movement Alert at that location so the mod can learn its name.
  • Still hearing a random ping slipping through when muting alot of trackers:

    • Increase AudioMuteWindowMs (try 200–400) and keep MuteUIPings enabled.

License

  • Copyright (c) [2025] [Khundian]. All rights reserved.

  • You may redistribute this mod in its original, unmodified form.

  • You may not decompile, reverse engineer, modify, or distribute modified versions of this mod without prior written permission from the author.

  • This mod may not be used for commercial purposes or included in any paid mod packs or compilations.

  • The mod is provided "as is," without warranty of any kind. Use at your own risk.

CHANGELOG

Changelog

0.5.0

Initial public build focused on muting tracker toasts by location.

  • Added

    • Per‑location muting for tracker “Movement Alert” toasts.
    • In‑game Tracker Control UI (default hotkey: F8).
    • Optional suppression of related audio: nearby world one‑shots and 2D UI pings during a short window.
    • Automatic learning of location names from alerts; persistent list with filter, remove, mute/unmute all, reload, center.
  • Configuration (BepInEx Khundian.SoD.TrackerControl.cfg)

    • Mute.EnablePerTrackerMute (bool, default true): master toggle.
    • Mute.MuteTrackerNamePatterns (string): comma/semicolon list; case‑insensitive substring match; * accepted but treated as contains (e.g., City Hall*City Hall).
    • Mute.AudioMuteWindowMs (int, default 100): suppress nearby world SFX for this many ms after a mute.
    • Mute.MuteUIPings (bool, default true): also suppress 2D UI pings during the mute window.
    • UI.TrackerMuterToggleKey (string, default F8): UI toggle hotkey (KeyCode name).
    • Mute.KnownTrackerLocations (string): internal, learned locations (semicolon‑separated).
  • UX & Safety

    • UI opens only while in‑game; closes in menus.
    • Uses Desktop Mode while open; unlocks mouse cursor; pauses/resumes gameplay; disables/enables movement & mouselook; restores crosshair and typing focus on close.
    • Pressing Esc while the UI is open closes the UI and consumes the key to prevent the game menu from opening on the same press.
  • Technical Notes

    • Harmony patches:
      • InterfaceController.Update: strips muted messages from notificationQueue and starts the audio mute window.
      • InterfaceController.GameMessages() state machine: skips muted items by advancing the iterator.
      • GameMessageController.OnEnable/Update: kill‑switch/render‑guard destroys late‑identified muted toasts; reflection used to avoid TMP dependency.
      • AudioController.PlayWorldOneShot/Play2DSound: suppresses related audio during the mute window (radius ~25m for world SFX).
  • Compatibility

    • BepInEx 6 (Unity.IL2CPP). Windows paths shown; other OS layouts may differ with BepInEx.