efmeow-MicSnitch icon

MicSnitch

Snitches on whoever is talking - quiet background filtered, loud shouters in red. Toggle with F8. Resolves real nicknames via PhotonView ID.

By efmeow
Last updated 26 minutes ago
Total downloads 90
Total rating 1 
Categories Mods Tools Misc Client-side AI Generated
Dependency string efmeow-MicSnitch-1.1.1
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2100

README

Mic Snitch

Snitches on whoever is talking. Shows the nicknames of every player currently transmitting voice, right on your screen — so the soundboard spammer on the loading screen has nowhere to hide.

A working replacement for the old, deprecated See_who_is_talking mod, which stopped showing names in current R.E.P.O. builds.

What you see

  • A list of currently-talking players in the upper-right corner.
  • Loud / shouting players — bold red, stay visible for 3 seconds. A sudden shout always pops out, even when 10 other people are also on the mic.
  • Normal speech — soft yellow, fades after ~0.7s.
  • Quiet background noise is filtered out by amplitude — open-mic players who are just breathing into the headset don't pollute the list.
  • Sorted with loud people on top.

Hotkey

  • F8 — toggle the overlay on/off. When hidden, a faint [F8] Mic Snitch hint stays in the corner so you never forget the toggle.

Why

In R.E.P.O. voice is proximity-based in a level, but global on loading screens and in the lobby — that's where someone always blasts a soundboard and you have no idea who. The old mod hooked the per-player Speaker component to find out. Problem: when other players run cosmetic mods (MoreHead & co.), their SetupCosmeticsModdedRPC fails, the Speaker never gets created, and the old mod sees nothing.

How it's fixed

Mic Snitch hooks RemoteVoiceLink.OnDecodedFrameFloatAction — the per-frame decoded audio callback at the VoiceClient level, before the player init / Speaker step. It fires for every remote voice that has a stream, including not-inited players. From the decoded float samples it computes the peak amplitude, classifies the speaker (quiet / normal / loud) and resolves the nickname through PhotonNetwork.CurrentRoom.GetPlayer(actorNumber).NickName, which keeps working even when a player's local object is broken by RPC errors.

Local mic state is read directly from LocalVoice.IsCurrentlyTransmitting, so your own name shows when you talk too — works even alone in a lobby for testing.

Everything is resolved via reflection — if a future game patch renames a type, the mod logs a warning and degrades gracefully instead of crashing.

Install

Use a mod manager (r2modman / Thunderstore app) — it handles the BepInExPack dependency. Manual install: drop MicSnitch.dll into BepInEx/plugins/.

Credits

Concept inspired by the original See_who_is_talking by xiaolei. Rebuilt from scratch.