All guides   ·   Download DOCX

Q2PRO-X 1.6 Final by ly

Network play

Q2PRO-X document image

Project author: ly

Server rate, ping, prediction and movement smoothing.

English edition • Q2PRO-X 1.6 Final by ly • November 7, 2026


Contents

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

Q2PRO-X network play

Weapon prediction and confirmed effects

Server history

1. Where to find the settings

The single online-play setup page

2. Server Browser

3. Advanced Network: client UDP port autoprobe

RTT mode

XQ3A mode

4. Laghax

5. Weapon and player prediction

6. Weapon Parts Visibility

7. OpenTDM Team HUD

8. Visibility Highlights in live play

9. Weapon and player volumes

10. Practical profiles

Clean competitive baseline

High ping test

Problem route diagnostics

11. Russian input, transliteration, and /en translation

Practical workflow

Troubleshooting

12. Ping Adaptation

12.1. Why it exists

12.2. Where it lives

12.3. Three modes

12.4. Two automatic sources

12.5. When adaptation stays out of the way

12.6. How often the target is recomputed

12.7. Observing and verifying

12.8. Returning to ordinary play

12.9. How it relates to the other systems

12.10. Mod and server boundaries

12.11. The complete setting list

13. Advanced network and the port scanner

14. The server browser

15. Mod-dependent settings and skin override

Kill and death messages

Chat translation through the API

Hit feedback sound

Cvar Browser: complete lists and keyboard layouts

System-key behavior

Server address and Tab

External demo playback

Cached server list

Architectural visual simplification

Item animation

Independent OpenTDM-X bots

Server update rate

Connecting without freezing the interface

Command sending and player movement

Connection diagnostics


Q2PRO-X network play

This guide covers everything that belongs to online play: connecting and the server browser, the advanced network settings, Ping Adaptation, LagHax, player and weapon prediction, weapon-part visibility, volumes and highlights.

Connection diagnosis — what is wrong, what to do about it and how to verify the result — has a guide of its own: Network God. Start there if the game feels bad and you do not know why.


Weapon prediction and confirmed effects

Weapon prediction gives immediate local firing feedback, then matches it to events confirmed by the server so that an impact does not play twice. The server still decides damage and successful hits. The optional rocketdiag start|mark|stop diagnostics are off by default and are not needed for normal play.


Server history

The modern browser has a History tab immediately after Favorites. It is shared across mods and stores address, time and mod in baseq2/q2pro-x/reconnect_history.json. The default is 10 unique servers; the range is 0–100, with 0 disabling history. Rejoining the already latest server does not change its record.

After a fresh launch, reconnect can use the last stored server. Optional automatic connection is off by default: it applies after remote online play, skips the intro/menu and yields to explicit startup commands. Single-player, a locally hosted server and demo playback retain normal startup.

VariableAccepted valuesDescription
cl_reconnect_history_limit0=disabled and cleared / 1=last server only / 2..100=MRU history (default 10)Global across all mods: maximum number of unique successfully played remote servers retained for manual reconnect and the History browser tab. Changing it applies immediately. 0 clears and disables disk history; 1 keeps only the last server; 10 is the default; 100 is the hard maximum.
cl_reconnect_last_server_auto0=normal startup (default) / 1=auto-connect eligible last remote serverOn an otherwise idle cold start, automatically connect to the newest successfully played remote server only when the previous play context was remote multiplayer. Default off. Any explicit +map, +connect, demo, URL or alias startup action takes priority.


1. Where to find the settings

What you are settingMenu path
Online play setup (the single entry point)Main menu → Online Play Setup
Network GodMain menu → Online Play Setup → Network God
Ping AdaptationMain menu → Online Play Setup → Ping Adaptation
LagHaxMain menu → Online Play Setup → Laghax
Advanced network and the port scannerMain menu → Online Play Setup → Advanced Network
Movement and view bobMain menu → Online Play Setup → Movement
Weapon predictionMain menu → Online Play Setup → Weapon Predicts
Weapon-part visibilityMain menu → Options → Advanced Q2PRO-X → Weapon Parts Visibility
Server browserMain menu → Options → Advanced Q2PRO-X → Server Browser
Item timersMain menu → Online Play Setup → Live Item Timers
Mod command overlayMain menu → Online Play Setup → Mod Command Overlay

The single online-play setup page

Online Play Setup

TypeSectionRowVariable or targetWhat it does
NavigationHit feedback...q2prox_hitsoundEnable hit feedback, choose its sound and volume.
SectionNetwork & PredictNetwork & Predict
NavigationNetwork & PredictQ2PRO-X Network God...q2prox_network_godOne place for the whole network: what is wrong, what to do about it, protection, reports and every network module.
NavigationNetwork & PredictLaghax...q2prox_laghaxAdaptive prediction-error smoothing (laghax), HUD, weights.
NavigationNetwork & PredictPing adaptation...q2prox_ping_adaptationHold an absolute target ping, manually or following the opposing players.
NavigationNetwork & PredictNetwork & port scanner...q2prox_advanced_networkBandwidth, packet rates and the client UDP port scanner. The scanner briefly owns the connection while it runs, and ping adaptation stands down for its duration.
NavigationNetwork & PredictServer update rate...q2prox_server_rateHow often the server sends you the world: classic 10 updates per second, or up to 60 on a server that supports it. Not your rendering FPS.
NavigationNetwork & PredictMovement & player...q2prox_movementFPS-independent movement timing + local player prediction.
SliderNetwork & PredictMovement view bobcl_viewbobHow much of the walking movement stays in your view: 1.00 = normal, 0.00 = neither the up-and-down bounce nor the tilt when running and strafing. Works on any server, including someone else's. A server that sends no movement effect is left alone. Applies immediately.
NavigationNetwork & PredictWeapon predicts...q2prox_predictWeapon predict toggles (ghost rockets, rail, shotgun, HB, etc.).
SectionVisibility & SoundVisibility & Sound
NavigationVisibility & SoundVisibility & highlights...q2prox_visItem / player highlighting for readability.
NavigationVisibility & SoundItem animation...q2prox_item_jellyPickups on the map hop softly like jelly. Off by default; a pickup behind cover never moves.
NavigationVisibility & SoundVisual simplification...q2prox_world_styleSimpler walls, floors and doors for a clearer picture; players, monsters, weapons and items keep their settings.
NavigationVisibility & SoundItem respawn timers...q2prox_live_item_timersLive respawn timers for strategic items: manual + own-pickup countdowns on a HUD strip.
NavigationVisibility & SoundSound...g_soundOpenAL profile, HRTF, reverb, weapon / player volumes.
NavigationVisibility & SoundFrag messages...q2prox_fragfeedHighlight your opponent in confirmed frag messages; optional kill and death HUD notifications.
SectionPlayer & FilesPlayer & Files
NavigationPlayer & FilesSkins & models...g_skinsPlayer identity, both player-setup pages, skin restrictions, local per-mod overrides, model settings and downloads.
NavigationPlayer & FilesDownloads...g_downloadsPer-type download permissions (maps, skins, models, sounds) and HTTP downloads.
NavigationPlayer & FilesMod config profiles...q2prox_modcfgChoose per-mod config profiles. A profile changes the live controls and settings without overwriting Q2PRO-X managed configs.
NavigationPlayer & FilesMod command overlay...q2prox_modhelpMod command overlay (OpenTDM/OpenFFA).
NavigationPlayer & FilesDemosdemosBuilt-in demo browser: pick and play back recorded .dm2/.mvd2 demo files.


2. Server Browser

The modern server browser is an overlay for finding and joining servers.

Main settings:

cl_serverbrowser_ui - modern / legacy;
cl_serverbrowser_alpha;
cl_serverbrowser_scale;
cl_serverbrowser_compact;
cl_serverbrowser_fullscreen;
cl_serverbrowser_show_details;
cl_serverbrowser_show_badges;
cl_serverbrowser_row_colors;
cl_serverbrowser_hide_empty;
cl_serverbrowser_hide_full;
cl_serverbrowser_only_players;
cl_serverbrowser_max_ping;
cl_serverbrowser_show_passworded;
cl_serverbrowser_show_down;
cl_serverbrowser_default_source;
cl_serverbrowser_custom_source;
cl_serverbrowser_pillarbox_workspace.

Sources:

q2servers.com;
favorites;
LAN;
custom source.

Practical baseline:

modern browser enabled;
details and row colors enabled;
hide empty to taste;
max ping 0 if you do not want filtering;
fullscreen on small screens or very long server lists.


3. Advanced Network: client UDP port autoprobe

Some routes/providers/servers can behave differently depending on the client's UDP source port. Q2PRO-X 1.6 Final by ly includes an experimental client-port autoprobe.

Main cvar:

cl_net_clientport_autoprobe

Modes:

off - do nothing;
RTT - fast pre-connect challenge-RTT probe;
XQ3A - live-session scan over 20 slots, an xq3e-like adaptation.

Related cvars:

cl_net_clientport_autoprobe_time - safety watchdog;
cl_net_clientport_autoprobe_ports - candidate count for RTT mode;
cl_net_clientport_autoprobe_indicator - on-screen XQ3A scan indicator;
cl_net_clientport_autoprobe_verbose - detailed console log;
cl_net_clientport_autoprobe_settle_ms - pre-scan grace for XQ3A.

RTT mode

RTT mode opens independent probe sockets, sends challenges, and selects the candidate by reply RTT. It is fast and safe, but its metric is not identical to the gameplay ping shown in the HUD.

XQ3A mode

XQ3A mode is intentionally intrusive: during an active session, the socket may rebind up to 20 times. While the scan runs, the player can feel jitter. Treat it as a diagnostic tool, not a default for every match.

Recommendation:

normal players should keep it off;
use RTT for one-off connection tests;
use XQ3A only when you accept temporary scan jitter.


4. Laghax

cl_laghax controls network-feel smoothing.

Modes:

0 - off;
1 - fixed window;
2 - adaptive smoothing.

Related settings:

cl_laghax_hud;
cl_laghax_hud_alpha;
cl_laghax_hud_show_predict_params;
cl_laghax_hud_show_physics_params;
cl_laghax_hud_show_predict_runtime;
cl_laghax_hud_hide_deathmatch0;
cl_laghax_hud_hide_demo;
cl_laghax_maxms;
cl_laghax_maxwindow;
cl_laghax_minerror;
cl_laghax_ping_weight;
cl_laghax_jitter_weight;
cl_laghax_loss_weight;
cl_laghax_debt_weight;
cl_laghax_gap_weight.

Laghax does not move the server closer and does not change server authority.

It changes local presentation of networked movement so some micro-jitter feels smoother.

For testing, enable the HUD, use adaptive mode, play for a few minutes, and compare against off. If it feels too soft, lower the window/weights or use fixed/off.


5. Weapon and player prediction

Weapon predict draws part of the local firing feedback before server confirmation arrives. This matters on high ping: you press fire, and the client immediately shows local feedback.

Master:

cl_predict_weapons_enable.

Per-weapon toggles:

cl_predict_rockets;
cl_predict_rockets_explosion;
cl_predict_railgun;
cl_predict_shotgun;
cl_predict_super_shotgun;
cl_predict_machinegun;
cl_predict_chaingun;
cl_predict_blaster;
cl_predict_grenades;
cl_predict_hand_grenades;
cl_predict_hyperblaster.

Player predict:

cl_predict_player;
cl_predict_move_mode.

Adaptive ping gate:

cl_predict_ping_min_ms;
cl_predict_ping_dwell_sec.

When cl_predict_ping_min_ms is above 0, predicts are gated by ping and dwell time. This avoids keeping the extra predicted layer active on low ping where it may be unnecessary.


6. Weapon Parts Visibility

This page controls visibility of weapon FX parts, separately from prediction.

Master:

cl_weaponfx_vis_enable.

Groups:

cl_weaponfx_vis_own_predicted;
cl_weaponfx_vis_own_server;
cl_weaponfx_vis_other;
cl_weaponfx_vis_muzzle;
cl_weaponfx_vis_muzzle_light;
cl_weaponfx_vis_hitscan;
cl_weaponfx_vis_projectiles;
cl_weaponfx_vis_trails;
cl_weaponfx_vis_impact_wall;
cl_weaponfx_vis_impact_flesh;
cl_weaponfx_vis_explosion_visual;
cl_weaponfx_vis_explosion_particles;
cl_weaponfx_vis_explosion_light;
cl_weaponfx_vis_hit_markers.

This is useful when you want gameplay feedback but less visual noise, for example disabling explosion particles while keeping hit markers.

Command:

weaponfx_info.


7. OpenTDM Team HUD

OpenTDM Team HUD is a passive teammate-state HUD for OpenTDM. It does not require teammates to run active commands: the client decodes already-visible information and presents it in a separate HUD.

Main settings:

cl_opentdm_team_hud;
cl_opentdm_team_hud_alpha;
cl_opentdm_team_hud_scale;
cl_opentdm_team_hud_width;
cl_opentdm_team_hud_show_weapon;
cl_opentdm_team_hud_show_powerarmor;
cl_opentdm_team_hud_show_freshness;
cl_opentdm_team_hud_show_teamchat;
cl_opentdm_team_hud_fresh_sec;
cl_opentdm_team_hud_stale_sec;
cl_opentdm_team_hud_pillarbox_workspace.

Position can be edited through drag mode:

opentdm_team_hud_edit;
opentdm_team_hud_reset.


8. Visibility Highlights in live play

For online play, the important player highlight modes are:

team - friendly/enemy colors;
duel - primary/secondary duel colors;
auto - attempt to select a sensible mode;
model - more of a demo/FFA use case, but still available live.

Related cvars:

cl_vis_players_team_source;
cl_vis_players_team_friendly_color;
cl_vis_players_team_enemy_color;
cl_vis_players_team_fallback;
cl_vis_players_team_hold_ms;
cl_vis_players_duel_hold_ms;
cl_vis_players_auto_fallback.

For TDM, start with team, friendly cyan, enemy red. For duel, use duel.

For FFA, use random FFA or model.


9. Weapon and player volumes

The sound volumes page lets you tune groups independently:

weapons;
player sounds;
voice / pain;
pickup;
environment;
monster;
announcer;
interface;
ambient;
other.

For network play this matters as much as graphics: explosions that are too loud can hide footsteps, and pickups that are too quiet hurt map control.

Detailed sound theory is in:

Q2PRO-X_1.6_Sound_Guide_EN.docx


10. Practical profiles

Clean competitive baseline

modern server browser;
cl_laghax 0 or 2 after personal testing;
cl_predict_weapons_enable 1;
cl_predict_ping_min_ms 20;
cl_predict_ping_dwell_sec 5;
weapon FX visibility defaults;
cl_vis_players_mode team for TDM;
cl_net_clientport_autoprobe off.

High ping test

enable weapon predict;
enable player predict;
raise cl_predict_ping_min_ms only if the predicted layer is distracting at

low ping;

enable laghax HUD;
compare cl_laghax 0, 1, and 2 on the same server.

Problem route diagnostics

enable cl_net_clientport_autoprobe RTT;
try connect_autoport <server>;
if deeper testing is needed, use XQ3A with indicator and verbose log, but

not during an important match.


11. Russian input, transliteration, and /en translation

Q2PRO-X 1.6 Final by ly covers two separate chat problems: safe Russian input/transliteration for Quake II console/chat, and a separate /en command that translates Russian text to English before you send it.

Setting / commandMeaning
cl_console_utf8_ruRussian display localization. It affects UI/hints rendering, but it is not the Russian-input switch.
cl_translit_x_style 0Transliterate Russian х as kh. Default.
cl_translit_x_style 1Transliterate Russian х as h if that style is preferred.
/en <text>Asynchronously translates Russian text to English through the active provider and replaces the current prompt. You still press Enter manually.
/en -team <text>Same workflow, prepared for team chat.
translate_statusPrints provider, URL, timeout, and key availability.
translate_reloadReloads the local translation secret/config file.
Transliteration preserves a leading / or \ and the command token, so say/say_team commands do not become plain chat text.
/en never sends automatically. The player sees the English result and decides whether to send it.
The default provider is q2prox, the hosted Q2PRO-X endpoint. It does not require a client API key.
Related provider cvars: cl_translate_provider, cl_translate_q2prox_url, cl_translate_google_url, cl_translate_deepl_url, cl_translate_azure_url, cl_translate_libre_url, cl_translate_custom_url, cl_translate_timeout_ms.
Secrets for third-party providers live in baseq2/q2pro-x/translate.local. This file is not archived, not echoed, and must not be shipped in public packages.
Text translated through /en is sent to the configured provider. Do not use it for private keys, passwords, or other secrets.
Only one translation request is in flight at a time. On timeout or failure, the prompt remains unchanged so the message is not lost.

Practical workflow

1. Type /en привет, идём на railgun.

1. Wait for the prompt to be replaced with the English result.

1. Review the text and press Enter if you want to send it.

1. For team chat, use /en -team ... or your usual say_team workflow if it is already in the prompt.

Troubleshooting

translate_status reports an invalid provider: check cl_translate_provider.
Translation does not arrive: check cl_translate_timeout_ms, the hosted endpoint, or your third-party provider.
The prompt was not replaced: you may have edited it after starting /en; the client does not overwrite new user input.
Need ASCII immediately without an online provider: use Russian input/transliteration rather than /en.



12. Ping Adaptation

12.1. Why it exists

Ping Adaptation deliberately adds delay to outgoing game data so that your final ping stays near a chosen value.

It exists for exactly two things:

to level the conditions against an opponent whose ping is noticeably higher;
to practise under conditions you want to get used to.
It does not reduce ping. The value sets the final ping, not the addition. With a real 10 ms and a target of 30 ms, about 20 ms is added; if the real ping is already above the target, nothing is added.

The layer creates no packet loss and is compatible with LagHax, prediction, fixed movement and the existing movement-feel modes.

12.2. Where it lives

Menu path: Main menu → Online Play Setup → Ping Adaptation

Ping Adaptation

TypeSectionRowVariable or targetWhat it does
SectionModeMode
ListModeAdaptation modecl_ping_adapt_modeHold an absolute target ping. Off adds nothing. Manual holds your own target; Automatic takes it from the source below. The value is the FINAL ping, not an addition: real 10 with a target of 30 adds about 20, and a real ping already above the target adds nothing. Applies immediately. [Off / Manual / Automatic]
ListModeAutomatic sourcecl_ping_adapt_auto_sourceWhere Automatic takes its target: a configured range, or the active opposing players (OpenTDM: the other team; OpenFFA: the other active players). Spectators and you are always excluded. Applies immediately. [Range / Players]
SectionManualManual
SliderManualTarget pingcl_ping_adapt_manual_msAbsolute target ping for Manual mode. A target below your real ping simply adds nothing. Applies immediately.
SectionAutomatic rangeAutomatic range
SliderAutomatic rangeMinimumcl_ping_adapt_range_min_msLower bound of the band. Adaptation runs only while your real ping is below this value; one target is then chosen inside the band and held stable. Applies immediately.
SliderAutomatic rangeMaximumcl_ping_adapt_range_max_msUpper bound of the band. Both bounds are additionally limited by the maximum final ping below. Applies immediately.
SectionPlayersPlayers
SliderPlayersCheck intervalcl_ping_adapt_check_interval_msHow often the target and the opposing roster are recomputed. Server requests are combined and never sent more than once per second. Applies immediately.
SliderPlayersOffsetcl_ping_adapt_offset_msSigned offset from the opponents' ping. Target = opponent ping + offset. Example: opponent 40 with offset -10 gives a target of 30. Applies immediately.
SliderPlayersMinimum differencecl_ping_adapt_min_difference_msAdaptation starts only when your real ping is below the opponents' ping by at least this much. Example: opponent 40 and 15 here leaves a real ping of 30 alone. Applies immediately.
SliderPlayersMaximum final pingcl_ping_adapt_max_msHard ceiling for the final target in Automatic mode. Applies to both automatic sources and never to Manual. Applies immediately.
SectionServiceService
ToggleServiceEvent logcl_ping_adapt_debugLog adaptation events to the console: mode changes, target changes, roster updates. Never prints per packet. Applies immediately.
NavigationServicePrint informationping_adapt_infoPrint the full current state: real and adapted ping, target, added delay, opposing players and queue.
NavigationServiceReset controllerping_adapt_resetRestart measurement and roster tracking without changing any setting. Packets already waiting are sent in order first.

12.3. Three modes

ModeWhat it does
OffNothing is added; this is the default
ManualHolds your own target
AutomaticTakes the target from the selected source

12.4. Two automatic sources

Range. You set a lower and an upper bound. Adaptation works only while the real ping is below the lower bound; one target is then chosen inside the band and held steadily.

Players. The target is taken from the active opponents:

in team play the other team is used;
in free-for-all play the other active players are used;
spectators and you yourself are always excluded.

The target is computed as "the opponent's ping plus the offset". The offset is signed: with an opponent at 40 ms and an offset of −10 ms, the target is 30 ms.

12.5. When adaptation stays out of the way

The Minimum difference setting protects you from needless intervention: adaptation engages only when your real ping is lower than the opponents' by at least that much. With an opponent at 40 ms and a minimum difference of 15 ms, your real ping of 30 ms is left as it is.

Maximum final ping is a hard ceiling on the target in automatic mode. It applies to both automatic sources and never to manual mode: you set a manual target yourself and you own it.

12.6. How often the target is recomputed

The check interval decides how often the target and the opponent roster are recomputed. Requests to the server are coalesced and never sent more than once per second: adaptation does not create a storm of queries.

12.7. Observing and verifying

CommandWhat it shows
ping_adapt_infoThe complete current state: the real and adapted ping, the target, the added delay, the opponents and the queue
ping_adapt_resetRestarts the measurement and roster tracking without changing settings; packets already queued are sent in order first

A separate switch logs adaptation events to the console — mode changes, target changes, roster updates — and never prints per packet:

VariableAccepted valuesDescription
cl_ping_adapt_debug0=off (default) / 1=log ping adaptation events to consoleEvent-based diagnostic logging for Ping adaptation: mode transitions, target changes, roster invalidations, capacity fail-open and connection-generation resets. Never prints per packet. 0 = off (default) and costs nothing; the full current state is always available on demand through the ping_adapt_info command.

12.8. Returning to ordinary play

Returning is simply switching the mode off. No rollback of settings is needed: adaptation changes none of your other network parameters, it only delays sending. Once it is off, no delay is added any more.

Changing servers restarts the measurement and roster tracking: a decision from the previous server is never carried over to the next one.

12.9. How it relates to the other systems

SystemHow it relates
Network GodShows and accounts for adaptation, but never enables it, changes its target or adjusts its mode
LagHaxWorks independently; adaptation neither cancels nor replaces it
PredictionWorks independently; the server remains authoritative
Jitter ShieldA different job: it smooths the display of other players rather than delaying your sending
Network LabAlso spoils the network deliberately, but for practice and tests; the two never delay the same packet twice

In the Network God overview the real ping stays a separate figure, the added delay is shown separately, and the final ping reflects the sum the client works with.

12.10. Mod and server boundaries

The Players source relies on the server and the mod actually reporting the roster and the participants' pings. Team and free-for-all play are recognised from the mod's data. If a mod does not supply enough information, the Players source simply cannot name a target — use the Range source or manual mode in that case.

Adaptation is entirely client-side: it changes no protocol, requires no server support and affects no other player.

12.11. The complete setting list

VariableAccepted valuesDescription
cl_ping_adapt_mode0=off (default) / 1=manual / 2=automaticPing adaptation master. 0 = off (default): no send adapter, no queue, no probes, no roster scans and no added latency at all. 1 = Manual: hold an absolute target ping of cl_ping_adapt_manual_ms. 2 = Automatic: pick the target from cl_ping_adapt_auto_source (a configured range, or the active opposing players on OpenTDM / OpenFFA). The target is ABSOLUTE, never added on top of your real ping: with a real 10 ms and a target of 30 the client injects about 20 ms, and if your real ping is already 40 nothing is added. Latency is produced by FIFO-delaying complete outgoing datagrams, so no packet is dropped, reordered or rewritten.
cl_ping_adapt_auto_source0=range (default) / 1=playersWhere Automatic mode gets its target. 0 = Range: if your real ping is below cl_ping_adapt_range_min_ms, one target is chosen at random inside the configured band and then held stable for the whole session — it is not rerolled per packet or per evaluation. 1 = Players: follow the active opposing roster (OpenTDM: the other team, one player in duel and the mean in TDM; OpenFFA: the mean of all other active players). Spectators and you are always excluded. Range works on any mod; Players needs an exact roster adapter and otherwise adds nothing.
cl_ping_adapt_manual_ms0 .. 1000 ms, default 30Absolute target ping for Manual mode, in milliseconds. The client injects max(0, target - real RTT); it can never make a link faster, so a target below your real ping simply adds nothing and the state reads baseline limited. The automatic cap cl_ping_adapt_max_ms deliberately does NOT apply here — a manual target is your explicit instruction.
cl_ping_adapt_range_min_ms0 .. 1000 ms, default 20Lower bound of the Automatic/Range band, in milliseconds. Range adapts only while your real ping is BELOW this value; at or above it nothing is added, because latency cannot be removed. If minimum and maximum are entered reversed they are normalized (swapped) deterministically and ping_adapt_info shows the effective pair.
cl_ping_adapt_range_max_ms0 .. 1000 ms, default 30Upper bound of the Automatic/Range band, in milliseconds. Both bounds are additionally capped by cl_ping_adapt_max_ms; if that cap is below the configured minimum, the effective choice collapses to the cap.
cl_ping_adapt_check_interval_ms250 .. 10000 ms, default 1000How often Automatic mode recomputes its target and refreshes the opposing roster, in milliseconds. Server status probes are coalesced and never sent faster than once per second, so a shorter interval simply reuses the newest sample instead of adding traffic. Peer pings older than max(5000, 3 x interval) are treated as stale and adaptation falls back to zero added delay.
cl_ping_adapt_offset_ms-200 .. 200 ms, default 0Signed offset applied to the opposing players' reference ping in Automatic/Players mode: the target is (opponent ping + offset), then capped by cl_ping_adapt_max_ms. Negative values aim below the opponent, positive values above. Example: opponent 40, offset -10 gives a target of 30.
cl_ping_adapt_min_difference_ms0 .. 500 ms, default 15Minimum gap that must exist between your real ping and the opposing reference ping before Automatic/Players adapts at all. Adaptation runs only while real < (opponent - this value); otherwise nothing is added. Example: opponent 40 and a minimum difference of 15 means a real ping of 30 is left alone, while a real ping of 10 is adapted.
cl_ping_adapt_max_ms1 .. 1000 ms, default 200Hard ceiling on the final target ping in Automatic mode, in milliseconds. It applies to both automatic sources (Range and Players) and never to Manual. If the computed target exceeds it the target is clamped and ping_adapt_info reports it as capped.



13. Advanced network and the port scanner

Advanced Network

TypeSectionRowVariable or targetWhat it does
SectionBandwidthBandwidth
SliderBandwidthBandwidth rateraterate: bandwidth your client requests from the server, bytes/sec. Server may cap it. Typical modern broadband: 25000..100000. Server-visible userinfo cvar. Applies immediately.
SliderBandwidthMessage sizemsgmsg: server message size hint. 0 = small, 1 = normal (default), 2 = large. Some servers reject high values. Applies immediately.
SectionFramerateFramerate
SliderFramerateClient FPS limitcl_maxfpscl_maxfps: client framerate cap. 0 = uncapped. The renderer can still produce more frames if cl_async 1 is set. Applies immediately.
SliderFramerateRenderer FPS limitr_maxfpsr_maxfps: renderer-only framerate cap. Applies when cl_async 1; otherwise cl_maxfps is the gate. Applies immediately.
SectionRecent serversRecent servers
ToggleRecent serversAuto-connect last servercl_reconnect_last_server_autoAutomatically connect to the newest successfully played remote server on an otherwise idle cold start. Disabled by default; explicit +map, +connect, demo, URL or alias startup always wins. Applies immediately.
SliderRecent serversRecent server historycl_reconnect_history_limitNumber of unique successfully played remote servers retained globally across all mods: 0 disables and clears history, 1 keeps only the last server, the default is 10, and 100 is the maximum. Applies immediately.
NavigationRecent serversReconnect nowreconnectReconnect to the current process endpoint, or to the newest successfully played remote server when this is a fresh process.
SectionPackets & syncPackets & sync
SliderPackets & syncClient packets / seccl_maxpacketscl_maxpackets: max user-command packets per second sent to the server (10..125). Higher = more responsive but more upload bandwidth. Applies immediately.
NavigationPackets & syncServer update rate...q2prox_server_rateHow often the server sends you the world: classic 10 updates per second, or up to 60 on a server that supports it. Not your rendering FPS.
ListPackets & syncAsync modecl_asynccl_async: 0 = synchronous client/render loop; 1 = asynchronous render loop (default). 2 = Asynchronous render loop with GPU sync fence where supported. Applies immediately. [Sync / Async / Async + GPU sync]
TogglePackets & syncInstant packetcl_instantpacketcl_instantpacket: send a usercmd packet immediately after a button press instead of waiting for the next tick. Reduces input latency by up to one packet interval. Applies immediately.
SectionUDP port autoprobeUDP port autoprobe
ListUDP port autoprobeAuto-select client UDP portcl_net_clientport_autoprobeAuto-select the client UDP port: off, RTT (fast pre-connect challenge-RTT probe), or Full scan (live-session scan over 20 candidate ports). Applies immediately. [off / RTT / Full scan]
SliderUDP port autoprobeAuto-port safety watchdogcl_net_clientport_autoprobe_timeSafety watchdog (0.1..180 s) that aborts probing if it runs too long. RTT finishes early; a full-scan run wants 60..180 s, below ~30 s warns. Applies immediately.
SliderUDP port autoprobeRTT candidate countcl_net_clientport_autoprobe_portsRTT candidate port count (2..60). Does not apply to Full scan (fixed 20 slots). Wider sweeps don't slow RTT. Default 6. Applies immediately.
ToggleUDP port autoprobeFull-scan indicatorcl_net_clientport_autoprobe_indicatorShow a blinking AUTO-PORT SCAN indicator while the full scan runs (no effect on RTT). Applies immediately.
ToggleUDP port autoprobeAutoport console logcl_net_clientport_autoprobe_verbosePrint autoport progress to the console (slot switches, samples, winner, abort). Off = runs silently. Applies immediately.
SliderUDP port autoprobeFull-scan pre-scan gracecl_net_clientport_autoprobe_settle_msOptional grace window (0..10000 ms) before the full scan applies its first slot. Raise only on slow-precache mods. Counts inside the watchdog. Applies immediately.

Ping Adaptation pauses while the port scanner runs, so its added delay does not interfere with the scan.


14. The server browser

Server Browser

TypeSectionRowVariable or targetWhat it does
SectionMode & scaleMode & scale
ListMode & scaleBrowser modecl_serverbrowser_uiServer browser style: classic (legacy menu) or modern (overlay). Applies immediately. [legacy / modern]
SliderMode & scaleOpacitycl_serverbrowser_alphaOpacity of the modern server browser overlay background. Applies immediately.
SliderMode & scaleText scalecl_serverbrowser_scaleFont / UI scale of the browser overlay; match to display DPI. 1.0 default. Applies immediately.
SectionView & layoutView & layout
ToggleView & layoutCompact modecl_serverbrowser_compactCompact row layout so more servers fit on screen at once. Applies immediately.
ToggleView & layoutFullscreencl_serverbrowser_fullscreenExpand the browser to full screen instead of the centred window. Applies immediately.
ToggleView & layoutPillarbox free areacl_serverbrowser_pillarbox_workspaceAllow dragging the browser into the pillarbox side bars (aspect-fit free area). Applies immediately.
ToggleView & layoutShow detailscl_serverbrowser_show_detailsShow the right-side detail panel (player list, rules, mod info); off = list only. Applies immediately.
ToggleView & layoutShow badgescl_serverbrowser_show_badgesShow game-mode / mod badges next to each server (CTF, DM, OpenTDM...). Applies immediately.
ToggleView & layoutRow colorscl_serverbrowser_row_colorsZebra-stripe alternate row colors for easier scanning of long lists. Applies immediately.
SectionFiltersFilters
ToggleFiltersHide emptycl_serverbrowser_hide_emptyHide servers with zero human players (bots don't count). Applies immediately.
ToggleFiltersHide fullcl_serverbrowser_hide_fullHide servers that are at capacity (players >= max slots). Applies immediately.
ToggleFiltersOnly with playerscl_serverbrowser_only_playersShow only servers with at least one human player (hides empty and bot-only). Applies immediately.
SliderFiltersMax pingcl_serverbrowser_max_pingHide servers whose ping exceeds this many ms. 0 = no limit. Applies immediately.
ToggleFiltersShow passwordedcl_serverbrowser_show_passwordedShow password-protected servers (you can still join if you know the password). Applies immediately.
ToggleFiltersShow downcl_serverbrowser_show_downShow unreachable / down servers greyed out instead of hiding them. Applies immediately.
SectionSourcesSources
ListSourcesDefault sourcecl_serverbrowser_default_sourceSource tab opened by default: q2servers.com, Favorites, LAN, or Custom. Applies immediately. [q2servers.com / favorites / LAN / custom]
FieldSourcesCustom sourcecl_serverbrowser_custom_sourceURL for the Custom source tab (supports composite favorites:// file:// broadcast:// syntax).
SliderSourcesCache fallback delay, scl_serverbrowser_master_timeoutWait for q2servers.com before using its last valid cached address list. Server status is always queried live. Without a cache, the normal HTTP timeout applies. Applies immediately.
SectionServiceService
NavigationServiceOpen server browser...serverbrowser_open_modernOpen the modern server browser overlay.
NavigationServiceOpen legacy browser...serverbrowser_open_legacyOpen the classic (legacy) server browser menu.
KeyServiceToggle keyserverbrowser_toggleBind a key that opens/closes the server browser overlay.

Favourite servers are global across all mods. Scanning shows live tabs and stops with the same button that starts it. The selected tab is remembered between launches.


15. Mod-dependent settings and skin override

Settings that depend on the current mod are stored separately from the global configuration file. Where each thing is written is explained in the cvars and cvar browser guide.
The skin override lets you locally view yourself and other players with preferred models and skins, without changing server logic.
That matters in team and free-for-all play, where you may want one skin for yourself and a different common look for everyone else.
Configuration profiles are available for baseq2, OpenTDM and OpenFFA: a profile changes the live controls and settings without overwriting the managed Q2PRO-X configs, and it is removed on a mod change.

Kill and death messages

The online-game settings include Kill Messages. It highlights the opponent's name in messages about your kills and death. Name color, text color and notices below the crosshair are configurable. Chat is unchanged. Console highlighting is on by default; kill and death notices are separate and off by default. The killer's name stays until respawn; kill notices fade out. Preview and reset are available. Settings are shared between mods.

Q2PRO-X document image

Notice settings. The screenshot shows user choices, not factory defaults.

Q2PRO-X document image

Name highlighting and a kill notice in play.

Chat translation through the API

Incoming translation starts only on the player's button press. The client sends one batch of visible player-message bodies through the Q2PRO-X API, excluding nicknames and system output. An unchanged successful batch is not sent again. The game protocol and game server do not participate.

Hit feedback sound

A short hit sound can confirm a hit on an opponent. Enable it in the online-game or sound settings and adjust its volume there or in the volume hub. The settings are shared across mods; English and Russian help is available in the menus, console and Cvar Browser.

The hit sound is off by default (s_hitsound 0). Updating the client preserves your saved choice.

s_hitsound: 0 off, 1 on.
s_hitsound_style: 0 single tone; 1 four damage tones when the server supplies the exact damage amount. Ordinary servers use the single tone.
s_hitsound_volume: 0–100, default 50. At 50 the original amplitude is used; at 100 it is doubled. Master volume still applies.

Audio is independent of the visual hit marker, blood and AVFX switches. It can also follow a received victim pain or death event after the shooter moves behind cover. Blood and voice evidence for the same tracked shot do not create two feedback sounds.

Cvar Browser: complete lists and keyboard layouts

Open the browser with cvar_browser or its settings menu entry. All includes variables, native console commands and quick menu commands. Commands remains a separate view. Selecting a native command prefills the console; press Enter to execute. Category tabs and Favorites retain their filters.

Search checks the original text and English key positions for installed Windows keyboard layouts. Standard Russian is also supported for pasted text after a layout switch. For example, цкшеу finds writeconfig and пд_сщдщкувдшпреьфзы finds gl_coloredlightmaps. Matching is case-insensitive. The original text is kept in the search field. This maps keyboard positions; it does not transliterate words.

Russian search still works: Конф finds /конфиг and matching descriptions. Mixed input such as cl_avfx_сщтефсе_вуигп is supported. Unknown characters are not removed from the query.

System-key behavior

Open Settings → System → System key behavior, immediately after Menu settings. Settings are global across mods; all default to No and take effect immediately.

Menu itemVariableWhat Yes blocks
Win and Win combinationswin_block_windows_keyWindows keys and their combinations
Alt+Tabwin_block_alt_tabWindow switching
Alt+Escwin_block_alt_escCycling windows with Alt+Esc
Alt+F4win_block_alt_f4Closing the window with Alt+F4
Alt+Enterwin_block_alt_enterWindowed/fullscreen switching
Alt+Spacewin_block_alt_spaceThe window system menu
Ctrl+Escwin_block_ctrl_escOpening Start
Ctrl+Shift+Escwin_block_ctrl_shift_escOpening Task Manager with the shortcut
Print Screenwin_block_printscreenPrint Screen key handling

Blocking applies only while the game window is active, with either WGL or EGL. Other foreground applications keep their keyboard behavior. Ctrl+Alt+Delete is not intercepted. If Alt+F4 is blocked, the normal game menu can still be used to quit.

Server address and Tab

Type or paste only an address into an empty console prompt and press Tab.

InputResult
q2.playground.ruconnect q2.playground.ru:27910
q2.playground.ru:27915connect q2.playground.ru:27915
157.22.241.24connect 157.22.241.24:27910
[::1]:27915connect [::1]:27915

A leading backslash may appear before connect: it is the normal console command prefix. Edit the result if needed, then press Enter. Tab itself performs no connection or DNS lookup. Ports must be 1..65535; omitted ports become 27910. Existing command, variable and alias names retain priority. Completing a command name with Tab also adds the space before its arguments.

External demo playback

Use demo with an absolute path to an existing file:

demo "O:\Demos\match.mvd2"

Quotes are needed for spaces. Far's filename-only quoting is also accepted:

demo O:\Demos\"match.mvd2"

From the Windows command line, pass the same path through +demo:

Q2PRO-X.exe +demo O:\Demos\"match.mvd2"

DM2, MVD2 and their .gz variants are supported, with Windows drive or UNC paths. The file is opened read-only and is not copied into the game directory. Required maps, models and other game resources must be available to the installed game. Missing or invalid files produce a console error.

Cached server list

The browser saves a valid non-empty q2servers.com response to baseq2/q2pro-x/cache/q2servers.json. The browser's q2servers.com wait control (cl_serverbrowser_master_timeout) ranges from 1 to 60 seconds, default 4. A delayed list falls back to cached addresses when available and marks the source. Without a cache, normal request waiting continues. Servers are queried again for current ping, map and players; a cached address is not evidence that a server is online. Failed, empty or incomplete responses do not replace the saved list.

Architectural visual simplification

Online game settings and Renderer settings share a Visual simplification page. Six styles change level architecture with adjustable colors, pattern, strength, brightness and contrast while models and independent AVFX effects retain their settings. Off by default. See Visual Simplification Guide.

Item animation

Online game settings → Item animation controls a small hop, squash/stretch, fall and settling for 22 pickup categories. Master and all categories default to off. Rotation remains; shadows, highlighting, bloom and reflections follow the pose. Players and held weapons are unaffected. Demo playback is supported. See Item Animation Guide for all controls.

Independent OpenTDM-X bots

OpenTDM-X bots opens the installed package's local game, gameplay, roster, supported maps, factory/user presets and updater. The client package includes OpenTDM-X: its Windows server, game module, bot data, five maps, menus, settings catalog and seven factory presets. If bots are not yet installed, the client installs this bundled package on first startup without downloading. Open OpenTDM-X bots → Play with bots, choose a map and start the game. An existing installation and your settings are preserved. Further bot updates are available through the bot menu.

Server update rate

Open Settings → Online game settings → Server update rate. This controls how frequently the client receives the world state, not rendering FPS. Higher server update rates deliver opponent positions and events more frequently. Game speed, movement physics and weapon firing rates remain unchanged.

Adapt to server rate (cl_serverfps_adapt) defaults to off: the client requests the classic 10 world updates per second. Enabling it allows negotiation of a higher rate and an exact time scale with compatible servers that support higher update rates. Ordinary servers retain their previous mode. Changing the setting during play sends a new request without reconnecting.

Preferred rate (cl_updaterate) defaults to Server maximum (0). The other choices are 10, 20, 30, 40, 50 and 60. Servers supply divisors of their own rate: requesting 40 on a 60 Hz server yields 20 Hz; requesting 50 yields 10 Hz. With adaptation disabled, the saved preference is ignored but preserved. Both settings are global across mods.

Show connection state opens the console and runs protocol_info. Startup reports the saved client mode. Toggling adaptation immediately reports the client preference, followed by the actual connection rate after the server reply. A requested frequency is not reported as established before acknowledgement.

After connecting, the console prints one line with the endpoint and actual rate: [188.225.33.164:27912] Connection rate: 60 Hz. A standard connection shows 10 Hz. A requested higher rate is not considered active before server acknowledgement. Detailed information remains available through protocol_info; additional notices explain pending or unconfirmed changes. Startup and setting changes explicitly report whether support for server rates above 10 Hz is enabled or disabled.

Network God, LagHax, the port scanner and view smoothing use the negotiated time scale. Demo recordings retain the standard 10 Hz format and normal playback speed. Network God remains inactive during DM2 and MVD2 playback.

An unsupported server-assigned rate triggers a request for 10 Hz and holds world time until confirmation. No reply within two seconds ends the connection with an explanation. If an ordinary preference change is ignored, the console reports that the requested connection-rate change was not confirmed.

cl_serverfps_debug enables detailed negotiation diagnostics at 1 and disables them at 0. It is session-only and defaults to off. Normal mode and connection summaries do not require this diagnostic setting.

Connecting without freezing the interface

The connect and connect_autoport commands resolve server addresses in the background. Slow replies and unreachable addresses leave the console, menus and music responsive. Use disconnect to cancel; a new connect replaces the previous attempt. A reply to a cancelled request cannot connect you to the old address. A malformed connect connect address command is rejected immediately.

Voice-room connections, reconnections and disconnections run in the background, so waiting for the voice server leaves the game and console responsive.

Command sending and player movement

Online game settings → Server update rate → “Adapt command sending” (cl_serverfps_send_adapt). This global option defaults to on. It only operates with server-rate adaptation enabled, the Q2PRO protocol and an acknowledged rate above 10 Hz. The cl_serverfps_adapt master setting still defaults to off.

The effective outgoing cap rises to at least the nominal command cadence and snapshot rate. Fixed-step movement normally produces up to 100 new commands per second. The saved cl_maxpackets value is preserved; 0 remains unlimited. Disable the option to retain a manual cap. Scheduling and network conditions still affect the actual packet rate; this does not guarantee a constant 100 packets/s. Fresh fixedmove commands bypass this limiter on the non-batched path, which protocol_info reports separately. Physics and command generation cadence are unchanged.

cl_updaterate only accepts decimal 0, 10, 20, 30, 40, 50 and 60. Invalid input keeps the last valid value; an invalid initial configuration uses 0. “Server maximum” (0) is recommended. The server selects a divisor of its own rate: requesting 60 on a 50 Hz server gives 10 Hz. Disabling cl_serverfps_adapt requests 10 Hz without overwriting the saved cl_updaterate. The console still prints one concise line with the actual connection rate.

Other players at rates above 10 Hz are smoothed using a history of received positions. This works during active play and while following another player. Repeated positions in adjacent snapshots no longer produce alternating freezes and jumps. There is a small presentation delay: normally 50–67 ms at 60 Hz with a 30-packet/s sender, capped at 100 ms. Positions are never extrapolated beyond received data. Local movement, authoritative server positions and collision are unchanged; standard 10 Hz and demo playback keep their existing behavior. No separate switch is needed.

Connection diagnostics

Enter protocol_info for the actual protocol and rate, timing source, and saved/effective packet caps. The frame clock offset is the connection clock origin; a negative value alone does not mean packet loss. Transition counts cover rate and clock-mode changes. DM2/MVD demos and live GTV are labelled separately.

Both AutoPort modes apply the selected client UDP port and verify the actual socket binding. If Windows uses a different fallback port, it is not reported as the selected port. This verifies the local port; the external NAT port may differ.

Q2PRO-X document image

The console reports the actual connection rate: 60 Hz.