Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
MicSnitch
Snitches on whoever is talking - quiet background noise filtered out, loud shouters highlighted in red. Toggle with F8.
By efmeow
| Date uploaded | 5 months ago |
| Version | 1.1.0 |
| Download link | efmeow-MicSnitch-1.1.0.zip |
| Downloads | 76 |
| Dependency string | efmeow-MicSnitch-1.1.0 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
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 Snitchhint 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.
CHANGELOG
Changelog
1.1.1
- Fixed nickname resolution. Some players were showing as
Player 9/Player 23instead of their real nicknames. The voice subsystem uses a separate Photon room with its own actor numbering, so feeding the voice playerId straight intoRoom.GetPlayer()resolves the wrong player (or no one). - The fix reads the PhotonView ID that PUN packs into
VoiceInfo.UserData(this is the same hintPunVoiceClient.InstantiateSpeakerForRemoteVoiceuses to link a Speaker to a player), and derives the real game ActorNumber from it (PUN's standardviewID = actorNumber * 1000 + viewNumberlayout). Falls back to the voice playerId only if UserData is missing.
1.1.0
- Loudness filter: quiet background noise (passing the open-mic threshold but contributing nothing) no longer pollutes the list. Only real speech registers.
- Loud shouters in red: anyone speaking above the loud threshold is highlighted in bold red and stays visible for 3 seconds, so a sudden shout pops out from the always-on chatter.
- F8 toggles the overlay. A faint
[F8] Mic Snitchhint stays in the corner when hidden, so the hotkey is never forgotten. - Sort order: loud speakers on top (most recent first), then normal-volume speakers below.
- Smaller, semi-transparent text — readable but not in your face when 10 people are on a loading screen.
- Internal: dropped the redundant
Speaker.OnAudioFrame/VoiceClient.onFrame/Transport.onVoiceFrameEventhooks; everything now flows throughRemoteVoiceLink.OnDecodedFrameFloatActionwhich fires for every decoded voice (init-broken or not) and gives access to the audio samples for the loudness analysis.
1.0.0
- Initial release.
- Shows nicknames of currently-talking players in the upper-right corner.
- Hooks
LoadBalancingTransport.onVoiceFrameEventso detection works even when other players' cosmetic mods breakSpeakerinitialization. - Local mic detection via
LocalVoice.IsCurrentlyTransmitting— shows your own name too. - All game/Photon types resolved via reflection for forward-compatibility.