Q2PRO-X

Q2PRO-X 1.6 Beta 5 by ly — Q2PRO-X 1.6 Beta 5 Cvars and Cvar Browser Guide

The complete guide in HTML. The original DOCX is available from its documentation card.

Q2PRO-X 1.6 Beta 5 by ly

Q2PRO-X 1.6 Beta 5 Cvars and Cvar Browser Guide

Q2PRO-X document image

Project author: ly

How variables work, where they are saved, and how to use the browser

English edition • Q2PRO-X 1.6 Beta 5 by ly • 2026-10-10


Contents

The entries are links: click one to jump to that section.

Beta 3 reference coverage

Variables, configs and the cvar browser

1. What a variable is

2. The four places settings are saved

2.1. Global settings

2.2. Local settings of the base game

2.3. Mod-dependent settings

2.4. The demo visual profile

3. Why the release ships no ready-made user config

4. Schema migration

5. Save and reset commands

5.1. Autosave

5.2. Full config write

5.3. Why not to clean configs by hand

6. The cvar browser

6.1. The browser's own settings

6.2. Tabs

6.3. What the window can do

6.4. Favourites

6.5. The Commands tab

6.6. Search

7. The browser's language and appearance

8. Short recipes

Save everything before quitting

Reset the demo visuals only

Find every demo variable

Work out why a value is not saved

9. The printed reference

Command and menu help in Beta 5


Beta 3 reference coverage

Added 106 missing RU/EN entries covering health ambient, part/item highlights, volume categories and window mode. Search exposes current descriptions and value hints. Diagnostic variables and ambient status are not ordinary saved gameplay settings.



Variables, configs and the cvar browser

This document explains how variables work in Q2PRO-X, what scopes they have, how settings are saved, and how the built-in cvar browser is used.


1. What a variable is

A variable (cvar) is a named engine setting you can:

read in the console;
change in the console;
change in the menu;
save to a settings file;
use as state for the interface and for runtime logic.

Examples: sensitivity, vid_driver, cl_vis_enable, cl_avfx, cl_it.

Most Q2PRO-X user variables have a clear scope, so a setting is saved where it belongs.



2. The four places settings are saved

2.1. Global settings

baseq2\q2pro-x\q2pro-x.cfg

These are the things that are normally the same everywhere:

the menu and the interface;
language and typography;
mouse and zoom;
the video backend;
voice chat;
the server browser;
the general demo browser and player settings;
the cvar reference;
the network tools.

In the menu such rows carry the (G) badge.

2.2. Local settings of the base game

baseq2\q2pro-x\q2pro-x.local.cfg

This holds the client's local settings while the base game is active: the visual layer, the highlights, the colours, a large part of the render profile, and the local binds.

2.3. Mod-dependent settings

<mod folder>\q2pro-x\q2pro-x.cfg

The same local settings while a mod is active. That is how one visual profile can differ between mods. In the menu such rows carry the (M) badge.

2.4. The demo visual profile

baseq2\q2pro-x\demo_visual\q2pro-x.demo.cfg

While .dm2 and .mvd2 recordings are being watched, the local visual settings are written into one shared profile instead of the mod folder. That is what makes recordings from different mods look the same.

A simple rule. Mouse, sound, voice, network and interface are global. A mod's visuals, highlights and appearance are local. Those same visual settings while watching a recording go into the demo profile.



3. Why the release ships no ready-made user config

The release package does not place a user q2pro-x.cfg in baseq2. That is deliberate:

so an existing user config is never overwritten;
so no foreign local state or demo profile is brought along;
so the package is never mixed with a personal profile;
so the engine can create a clean file on the first save.

If the file is absent, Q2PRO-X starts from its built-in defaults and creates its own files when settings are saved.


4. Schema migration

The internal marker cl_q2prox_cfg_version records which settings schema has already been applied to your profile.

VariableAccepted valuesDescription
cl_q2prox_cfg_versioninternal schema marker (0=pre-1.2 / 1.2=onboarding / 1.5=startup menu / 1.51=exact fullscreen default / 1.52=safe GLOBAL migration / 1.53=complete GL coverage)Internal Q2PRO-X GLOBAL config schema marker, read from the physical baseq2/q2pro-x/q2pro-x.cfg rather than from the live cvar so a legacy config cannot spoof completion. Tracks which version-gated migrations were applied exactly once. Missing/0 receives the 1.2 onboarding preset; 1.5 enables the idle-start main menu; 1.51 migrates the former serialized desktop-fullscreen automatic margin to the new exact-size default; 1.52 completes safe add-only GLOBAL ownership migration; 1.53 extends the audited GL coverage to previously omitted user preferences such as gl_bloom_sigma. Existing records always win. The marker advances only after the GLOBAL target has been written and validated, and a newer marker from a future build is never downgraded. Not a user preference and not exposed in the config menu.

If the marker is absent or older than the current one, the engine applies only the safe recommended settings and writes the new marker. The migration does not repeat on the next launch.

This is not a full reset. Your sensitivity, sound, voice, mouse, zoom and other settings are not reset.

Migration from legacy configs is strictly add-only: it adds missing supported values and never overwrites settings and binds that are already stored. The stock game configs remain immutable input sources.



5. Save and reset commands

CommandWhat it does
q2prox_cfg_saveSave the global and the local profiles
q2prox_cfg_save_globalSave the global profile only
q2prox_cfg_save_localSave the local profile — or, while a recording is playing, the demo profile
q2prox_cfg_save_demo_visualSave the demo profile explicitly
q2prox_cfg_defaultsReset every Q2PRO-X setting
q2prox_cfg_defaults_globalReset the global scope only
q2prox_cfg_defaults_localReset the local scope; during playback, only the demo visual variables, with binds preserved
q2prox_cfg_defaults_demo_visualReset the demo visual variables only

5.1. Autosave

VariableAccepted valuesDescription
cl_q2prox_cfg_autosave0=no autosave / 1=autosave on every change (default)Autosave Q2PRO-X config on menu / console changes. When on, any adjustment that flips a CVAR_Q2PROXCFG_GLOBAL or CVAR_Q2PROXCFG_LOCAL cvar is written after a 500 ms debounce to the correct target. Post-2026-04-25 storage split: GLOBAL cvars go to baseq2/q2pro-x/q2pro-x.cfg (GLOBAL-only now); LOCAL cvars go to <gamedir>/q2pro-x/q2pro-x.cfg when a mod is active, to baseq2/q2pro-x/q2pro-x.local.cfg when fs_game is empty, or to baseq2/q2pro-x/demo_visual/q2pro-x.demo.cfg while a .dm2/.mvd2 demo is playing. Every save goes through the atomic pipeline: write to .tmp, validate, rotate backups under backups/ (.bak/.bak.2/.bak.3), replace. Automatic writes additionally reject candidates that look like mass-reset / mass-bind-loss stamps (rejected candidates are kept under rejected/ as *.rejected-<ts> for diagnosis); explicit q2prox_cfg_defaults_* commands bypass that guard.

5.2. Full config write

VariableAccepted valuesDescription
cl_writeconfig_full0=bindings + archived cvars (default) / 1=same as -b -m -a (bindings + aliases + all modified cvars)Controls what a bare writeconfig <filename> writes when you give it no content flags. 0 (default) keeps the historical meaning: key bindings plus archived cvars. 1 makes the flagless form save everything the explicit -b -m -a form saves — all key bindings, all your command aliases, and every eligible cvar whose current (or latched) value differs from its default, including Q2PRO-X global (G) and mod-local (M) settings. Explicit flags are never touched: if you type -a, -b, -c or -m yourself, exactly that selection is written and this setting is ignored; -h still only prints help. The destination stays configs/<filename>.cfg and the config-readonly barrier still applies first. Note this is a manual legacy-style CFG export and NOT a replacement for Q2PRO-X global/local preset saving, which has its own storage. Saved to the global Q2PRO-X config, shared across all mods.

Explicit flags on the config-write command always take priority over this setting.

5.3. Why not to clean configs by hand

Q2PRO-X does not overwrite existing values with a mass reset on an ordinary start. If something looks wrong, first:

1. open the corresponding menu page;

2. check the value in the cvar reference;

3. use a scope-specific reset instead of deleting the whole directory.

Deleting the configs completely is only justified when you genuinely want to start from a clean profile.



6. The cvar browser

The cvar browser is the built-in window for searching, describing and editing settings.

It opens in three ways:

from the Open the cvar reference… row in the help menu;
from the toggle key you assign;
with the cvar_help console command.

6.1. The browser's own settings

Menu path: Main menu → Help / About Q2PRO-X → Cvar Browser

Cvar Browser

TypeSectionRowVariable or targetWhat it does
SliderOpacitycl_cvar_browser_alphaOpacity of the cvar browser overlay background. Applies immediately.
SliderText scalecl_cvar_browser_scaleFont / UI scale of the cvar browser overlay; 1.0 default. Applies immediately.
ToggleRemember last tabcl_cvar_browser_remember_tabRestore the last opened tab of the cvar browser on the next session. Applies immediately.
NavigationOpen cvar browser...cvar_helpOpen the modern cvar reference browser overlay.
KeyToggle keycvar_browser_toggleBind a key that opens/closes the cvar browser overlay.

6.2. Tabs

TabWhat it shows
AllEvery variable
FavoritesYour personal list of frequently used ones
CommandsThe registered console commands
DemoEverything relating to recordings
VisualVideo, renderer, effects
AudioThe sound subsystem and the volumes
InputMouse, keyboard, zoom
NetworkNetwork settings and tools
GameplayGame settings
HUD/UIThe interface and the on-screen elements
ServerServer settings
SystemSystem settings
DebugDiagnostic variables, kept apart from user settings

The Debug tab exists precisely so diagnostics never mix with ordinary settings and never end up in a config by accident.

6.3. What the window can do

search by name, by description and by accepted values;
Russian or English text following the interface language;
a column with the current live value;
a detail pane with the description and the accepted values;
mouse selection and copying;
resetting a value to its default;
a favourites list;
resizing, dragging and a fullscreen mode;
remembering the last tab.

6.4. Favourites

Favourites is a local list of frequently used variables. Its state is kept in a separate file:

baseq2\q2pro-x\cvar_browser_state.txt

Useful candidates for it: vid_driver, sensitivity, cl_zoom_fov, cl_vis_enable, cl_avfx, cl_it, cl_network_god_mode.

6.5. The Commands tab

The Commands tab is a fast way to find and run an action: open a menu page, execute a command, open an overlay or run a helper command. When a command needs input, the window opens the console over itself and then returns to its previous state.

6.6. Search

Search works on more than the name. It also searches descriptions, categories and command metadata, and it supports Cyrillic input in the Russian interface.

Practical queries:

QueryWhat it finds
demoEverything about recordings
voiceVoice chat
mouse, zoomControls
avfxThe visual layer
timerItem timers
portNetwork tools



7. The browser's language and appearance

The browser follows the general interface localization mode. The old separate browser-language variable is kept for compatibility only and no longer has any effect:

VariableAccepted valuesDescription
cl_cvar_browser_lang(legacy, no effect; see cl_console_utf8_ru)LEGACY. The cvar browser now follows the unified Russian display-localization mode (cl_console_utf8_ru) so Russian mode -> Russian UI, English mode -> English UI coherently across console, menu hints, voice picker, and the cvar browser. This cvar is still registered so existing user configs don't error, but its value is no longer read. Use cl_console_utf8_ru instead.

The related appearance settings:

VariableAccepted valuesDescription
cl_browser_font_mode0=legacy / 1=Iskra Cyrillic (default)Q2PRO-X browser/UI chrome typography. 0 = legacy 8x8 conchars + q2prox_cvar_font (cvar browser). 1 = Iskra Cyrillic Regular fixed-cell (default). Wired surfaces: server browser chrome, cvar browser cell draw (12x16), demo browser cell draw (8x8 base × user zoom), demo player overlay button/popup/timeline labels, modhelp local UI (title, search prompt, badges, scroll arrows, Cancel/Execute/Confirm). Cell stride is preserved per surface so selection / copy / column math / hitboxes are unchanged. Untrusted/raw byte streams stay on the legacy raw-byte path on every surface — server names, demo filenames, demo-recorded player names, configstring-derived chat etc. are intentionally NOT routed through Iskra. If the Iskra atlas fails to register, every wired surface falls back to its legacy renderer; failure is logged once.
cl_cvar_browser_alpha0..1 (default 0.92)Opacity of the in-game Cvar Reference Overlay window background. Independent from scr_alpha: the browser keeps its own background opacity policy. When OLED UI breathing is enabled, the final alpha is modulated only by SCR_OledGetUiAlpha().
cl_cvar_browser_scale0.1..4.0 (default 1.0)Browser-local text and chrome scale multiplier for the in-game Cvar Reference Overlay. Controls browser readability independently from scr_scale: higher values make the browser font, row heights, header/search bar, and text-driven button chrome larger, without scaling the whole window as one widget.
cl_cvar_browser_remember_tab0=always start on All / 1=restore last tab (default)Restore the last opened cvar browser tab (All / Favorites / Demo / Visual / Audio / Input / Network / Gameplay / HUD/UI / Server / System) on next session. When off, the browser always starts on All. The current tab is recorded in cl_cvar_browser_last_tab whenever you switch tabs.
cl_cvar_browser_last_taball / favorites / demo / visual / audio / input / network / gameplay / ui / server / system (default "all")Internal archived cvar that holds the last opened cvar browser tab as a stable string name ("all", "favorites", "demo", "visual", "audio", "input", "network", "gameplay", "ui", "server", "system"). Read on browser open when cl_cvar_browser_remember_tab is on, written on every tab switch. Unknown stored values fall back to "all".


8. Short recipes

Save everything before quitting

q2prox_cfg_save

Reset the demo visuals only

q2prox_cfg_defaults_demo_visual

q2prox_cfg_save_demo_visual

Find every demo variable

Open the browser and go to the Demo tab, or type demo into the search box.

Work out why a value is not saved

1. Make sure autosave is enabled.

2. Check that you are not changing a diagnostic variable: those act for the current session only and are never written to a config.

3. Check the scope: global, local or the demo profile.

4. Run an explicit save for that scope.


9. The printed reference

The complete printed list of every variable, with descriptions and accepted values, is in a separate document — the cvar and command reference. It is generated from the same description tables as the in-game window, so the two cannot disagree.


Command and menu help in Beta 5

All client variables and console commands have Russian and English help. Entering a variable name shows its value, description and accepted values. Entering a command without arguments prints its description and syntax below the input line; the command still executes normally. Commands from binds and configuration files do not print hints. Menu-button and key-binding technical hints explain what a command does rather than merely naming it.

The Commands tab adds groups for visual effects and presets; gameplay, HUD and timers; music and voice; network tools; menus, browsers and editors; local server and play; and commands for the separate OpenTDM-X mod. The current browser catalogue contains 519 commands: 78 previous and 441 added. Each has a description, syntax and an indication of its effects. Selecting one only inserts it into the console; it does not execute it. Internal commands are hidden from the browser but retain console and menu help. OpenTDM-X help does not mean the mod or a bot menu is included in the public client.