Q2PRO-X

Q2PRO-X 1.6 Beta 5 by ly — Q2PRO-X 1.6 Beta 5 Network Play 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 Network Play Guide

Q2PRO-X document image

Project author: ly

Connecting, the server browser, prediction, LagHax and Ping Adaptation

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.

Beta4: weapon prediction fixes

Server history in beta 2

Q2PRO-X network play

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 Predicts and Player Predict

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

Personal frag messages


Beta4: weapon prediction fixes

Predicted and server-confirmed rocket/hyperblaster impacts no longer produce duplicate audio, including server-first arrival. Rocket/rail sound sequences and stale projectile-to-server-entity bindings that could hide later flight visuals were fixed. Damage and confirmed hits remain server-authoritative. Optional rocketdiag start|mark|stop diagnostics are disabled by default and unnecessary for normal play.


Server history in beta 2

The modern browser now has History 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.


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.


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
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 & 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 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 Beta 5 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 Predicts and Player Predict

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 Beta 5 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.
SliderPackets & syncServer updates / seccl_updateratecl_updaterate: requested server updates per second (10..30 typical). Some servers cap it. Applies immediately.
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.

The scanner briefly owns the connection while it runs, and Ping Adaptation stands down for its duration. That is deliberate: two mechanisms must not govern sending at the same time.


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).
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.


Personal frag messages

Open Frag Messages in Network Play settings. All controls in this section are global (G). They change only your client, not your nickname colour on other players' clients. Opponent-name highlighting in the console is enabled by default. Personal kill and death notifications beneath the crosshair are off by default and enabled independently. Select a named palette colour for the opponent: it matches in the console and notification. Other text has a separate colour. Chat formatting is unaffected.

Messages use the console font with a bold nickname; Russian and English text have matching proportions. Kill notices fade away, while the killer's name remains until actual respawn. A weapon is shown only when the server message identifies it reliably. At most three lines are displayed together.

Adjust position, scale, kill-display time, line count, text colour and background opacity. fragfeed_preview previews the look without a gameplay event; fragfeed_reset restores this section's factory values. Known Quake II, OpenFFA, OpenTDM and OpenTDM-X message formats are supported. Other players' events while spectating or watching demos are not attributed to you. Ambiguous messages do not become invented personal kills.

Q2PRO-X document image

Frag Messages settings in English.

Q2PRO-X document image

Example notification and highlighted opponent name in the console.

The screenshots show a user's choices: mint nickname, red text, scale 1.20, offset 184 and 9.10 seconds. These are examples, not factory defaults.

Online / Frag messages

TypeSectionRowVariable or targetWhat it does
ToggleHighlight opponentcl_fragfeed_highlightOnly the opponent in your confirmed kills/deaths. Chat keeps its current style. Applies immediately.
ListOpponent colorcl_fragfeed_name_colorNamed color palette. Applies immediately. [Light green / Light / Dark / Grey / Brown / Dark red / Red / Orange / Gold / Yellow / Green-yellow / Green / Lime / Pure green / Mint / Cyan / Sky / Aqua / Blue / Azure / Magenta / Violet / White]
ToggleMy kill notificationscl_fragfeed_killsShow your confirmed kills below the crosshair. Off by default. Applies immediately.
ToggleMy death notificationcl_fragfeed_deathsShow who killed you until actual respawn. Off by default. Applies immediately.
ToggleShow weaponcl_fragfeed_weaponOnly if the server message identifies it reliably. Applies immediately.
SliderHorizontal offsetcl_fragfeed_xHUD-scaled horizontal offset from screen center. Applies immediately.
SliderBelow crosshaircl_fragfeed_yDistance below the crosshair in HUD units. Applies immediately.
SliderText scalecl_fragfeed_scaleNotification scale, multiplied by your HUD scale. Applies immediately.
SliderKill display timecl_fragfeed_timeSeconds including the final 0.4 second fade. Death stays until respawn. Applies immediately.
SliderMaximum linescl_fragfeed_linesAt most three recent events; no long queue. Applies immediately.
ListNotification colorcl_fragfeed_colorNamed color palette. Applies immediately. [Light green / Light / Dark / Grey / Brown / Dark red / Red / Orange / Gold / Yellow / Green-yellow / Green / Lime / Pure green / Mint / Cyan / Sky / Aqua / Blue / Azure / Magenta / Violet / White]
ToggleText backgroundcl_fragfeed_backgroundCompact neutral gray background like chat. Applies immediately.
SliderBackground opacitycl_fragfeed_background_alphaOpacity also follows HUD opacity. Applies immediately.
NavigationPreviewfragfeed_previewShow sample names for six seconds. Does not create frags or affect stats.
NavigationRestore defaultsfragfeed_resetReset only these presentation settings.