Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/BestProjectTeam/BestClient/llms.txt

Use this file to discover all available pages before exploring further.

BestClient ships a fully integrated voice chat system built on the Opus audio codec. Rather than relying on an external application, voice is routed through a BestClient-operated relay server — the connection address is resolved automatically via the bc_voice_chat_server_address setting. Once connected, players are placed into a room tied to their current game server and team, enabling hands-free coordination without ever leaving the client.

Server Address

bc_voice_chat_server_address
string
default:"\"managed\""
The address of the voice relay server. The default value "managed" tells BestClient to resolve the relay endpoint from BestClient-run infrastructure automatically. You only need to change this if you are self-hosting a compatible voice relay or were given an alternate address by the BestClient team.

Enabling Voice Chat

bc_voice_chat_enable
int
default:"1"
Master toggle for the integrated voice chat system. Set to 1 to enable or 0 to disable entirely. When disabled, no audio devices are opened and no network connections are made.
bc_voice_chat_activation_mode
int
default:"1"
Controls how voice transmission is triggered.
  • 0Automatic / VAD: the client transmits whenever the microphone input exceeds the configured activity threshold.
  • 1Push-to-Talk: voice is only transmitted while the bound push-to-talk key is held.

Voice Activity Detection (VAD)

When bc_voice_chat_activation_mode is set to 0, the client uses energy-based voice activity detection to decide when to transmit. Two settings control its sensitivity and tail behaviour.
bc_voice_chat_vad_threshold
int
default:"5"
The microphone energy threshold (as a percentage) that must be exceeded before automatic transmission begins. Lower values make the VAD more sensitive to quiet speech; higher values require louder input before triggering.
bc_voice_chat_vad_release_delay_ms
int
default:"150"
How long (in milliseconds) the VAD continues transmitting after microphone energy drops below the threshold. A small delay (100–200 ms) prevents clipping the end of words.

Audio Settings

bc_voice_chat_volume
int
default:"100"
Global playback volume for incoming voice, expressed as a percentage. Values above 100 amplify remote players beyond their recorded level.
bc_voice_chat_mic_gain
int
default:"100"
Software gain applied to your microphone input before encoding, in percent. Increase this if your microphone is quiet; decrease it to prevent clipping.
bc_voice_chat_bitrate
int
default:"96"
Opus encoding bitrate in kilobits per second. Higher values improve audio quality at the cost of slightly more bandwidth. 96 kbps is a good balance for voice.
bc_voice_chat_input_device
int
default:"-1"
Index of the audio input device to use for capture. -1 selects the system default microphone. Run the in-client voice settings panel to enumerate available device indices.
bc_voice_chat_output_device
int
default:"-1"
Index of the audio output device used for playback. -1 selects the system default output. Useful for routing voice to headphones while game audio plays through speakers.

Mute Controls

bc_voice_chat_mic_muted
int
default:"0"
When set to 1, your microphone is muted and no audio is transmitted. Other players will not see you as talking. Persisted across sessions.
bc_voice_chat_headphones_muted
int
default:"0"
When set to 1, all incoming voice audio is silenced on your end. You can still transmit while headphone mute is active.
bc_voice_chat_mic_check
int
default:"0"
Enables microphone loopback — your own captured and encoded audio is played back to you locally. Useful for testing microphone quality and gain settings without disturbing other players.

Scope and Team Filtering

bc_voice_chat_ingame_only
int
default:"0"
When enabled (1), voice transmission and playback are only active while the game window has focus. Switching to another application suspends the voice pipeline.
bc_voice_chat_use_team0
int
default:"0"
Forces voice chat to operate on team 0 (the global channel) regardless of which in-game team you are currently on. Useful for servers where team assignments don’t reflect desired voice groups.
bc_voice_chat_enable_your_group
int
default:"0"
Only meaningful when bc_voice_chat_use_team0 is active. When 1, your own in-game team is additionally included in voice transmit and playback alongside team 0, so teammates can still hear each other.

Proximity Voice

BestClient can restrict voice to players within a configurable tile radius, simulating positional proximity without requiring server-side support.
bc_voice_chat_radius_enabled
int
default:"0"
Enables the client-side proximity filter. When active, only players within bc_voice_chat_radius_tiles tiles of your character will be heard (or heard by you).
bc_voice_chat_radius_tiles
int
default:"25"
The proximity radius in game tiles when the radius filter is enabled. One tile equals 32 world units. The default of 25 tiles covers a comfortable conversational range.

UI & Name Plate Integration

bc_voice_chat_nameplate_icon
int
default:"1"
When enabled, a microphone icon appears in the name plate above any player who is currently transmitting voice. Disable to keep name plates clean.

HUD Positioning

The voice HUD elements (talking indicator and mute status icons) can be repositioned using the BestClient HUD editor. Their positions and scale are stored in the following variables:
bc_hud_voice_hud_x
int
default:"4"
HUD editor X position for the voice talking indicator panel.
bc_hud_voice_hud_y
int
default:"122"
HUD editor Y position for the voice talking indicator panel.
bc_hud_voice_hud_scale
int
default:"100"
Scale of the voice talking indicator panel as a percentage.
bc_hud_voice_mute_icons_x
int
default:"136"
HUD editor X position for the microphone and headphone mute status icons.
bc_hud_voice_mute_icons_y
int
default:"0"
HUD editor Y position for the mute status icons.
bc_hud_voice_mute_icons_scale
int
default:"100"
Scale of the mute status icons as a percentage.

Per-Player Mute and Volume Overrides

These string settings store persistent per-player overrides that survive client restarts.
bc_voice_chat_muted_names
string
default:"\"\""
A comma-separated list of player names (case-insensitive) whose voice will be permanently silenced. Example: "Alice, Bob". Names are matched against the in-game player name at the time of speaking.
bc_voice_chat_name_volumes
string
default:"\"\""
A comma-separated list of name=value pairs that set per-player volume overrides in percent. Example: "Alice=150, Bob=50" boosts Alice to 150% and lowers Bob to 50%.

Voice Moderation

Server operators can grant moderation privileges to trusted players through the voice system. The moderation interface is exposed via the CVoiceChat public API and the Mod tab of the in-game voice panel.

Authentication

An admin initiates a session by calling VoiceModAuth(key) — or by entering their moderation key in the Mod tab. This sends a challenge-response authentication request to the voice relay. The result is reflected in these status accessors:
MethodDescription
IsVoiceModAuthed()Returns true once the key has been verified by the relay.
IsVoiceModAuthFailed()Returns true if the relay rejected the key.
IsVoiceModAuthPending()Returns true while the challenge-response exchange is in flight.
The moderation key can be saved locally for convenience:
bc_voice_mod_key
string
default:"\"\""
The voice moderation key saved locally. If set, the Mod tab pre-fills the key field so re-authentication after a reconnect requires only one click.

Player List and Muting

Once authenticated, the admin calls VoiceModRefresh() to request the current player list from the relay (internally SendModPlayerListReq). Each connected player is represented as an SModPlayer entry containing their session ID, in-game client ID, display name, and current mute state. To mute or unmute a specific player, call VoiceModMute(SessionId, true/false). This sends a signed moderation packet to the relay; the change takes effect server-side and is reflected back in the next player-list refresh.
# Save your moderation key so the Mod tab is pre-filled on reconnect
bc_voice_mod_key "your-mod-key-here"

Build docs developers (and LLMs) love