Q2PRO-X

Q2PRO-X 1.6 Beta 5 by ly — Q2PRO-X 1.6 Beta 5 Live Item Timers 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 Live Item Timers Guide

Q2PRO-X document image

Project author: ly

Tracking item respawn in live play: authorization, the panel and audio

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: OpenTDM-X and timeouts

Automatic timer position in beta 2

1. What the system is for

2. A two-minute start

3. Why this is not a cheat

4. How an automatic timer starts

5. Where automatic timers are permitted

5.1. Local play

5.2. A remote server with an explicit decision

5.3. A remote server with no key

5.4. Manual timers

6. The complete decision order

7. The timer menu pages

7.1. Main page

7.2. The HUD strip

7.3. Audio warning

7.4. Tracked items

7.5. Respawn intervals

7.6. Instances and locations

7.7. Per-item settings

7.8. Manual timers and binds

8. The item catalog and its defaults

9. Where an interval comes from

10. The special Mega Health logic

11. Manual commands

11.1. Starting

11.2. Cancelling

11.3. Reset and information

11.4. Example binds

12. World observation and identical items

13. Spectator behaviour

14. The main console variables

15. Configuring a game server

16. Managing the permitting list through the API

17. How the API answer is protected

18. Diagnostics

19. Common situations

Automatic timers do not start, manual ones do

A dropped weapon I picked up made no timer

The HUD is not visible

There is no sound

Mega did not start counting immediately

Everything cleared after I changed the spectated player

The site is unreachable

20. Suggested profiles

Ordinary online play

A manual stopwatch with no automation

Spectating a match with separate instances

21. Summary

Picking up a dropped quad


Beta4: OpenTDM-X and timeouts

Live client timers support OpenTDM-X under OpenTDM rules; the mod itself is not bundled. Server authorization for automatic timers remains required. Automatic placement keeps timers below the mod HUD. OpenTDM/OpenTDM-X timeouts and resume countdown freeze manual/automatic timers, audio cues, ready display, interval learning and Mega Health waiting. Remaining time resumes with gameplay.


Automatic timer position in beta 2

With automatic vertical placement (-1), the starting Y position is 80 in HUD coordinates, below the OpenFFA/OpenTDM upper-right status block. This changes automatic placement only; explicit user coordinates are not overwritten.


1. What the system is for

Q2PRO-X live item timers count down to the expected respawn of an item in the game you are playing right now. The system is designed for ordinary play, local practice, spectating a match and manual timing by hand.

There are two kinds of timer:

manual: you start the countdown yourself, with a command or a bound key;
automatic: the client starts a countdown only after a confirmed pickup of your own at a permanent map spawn point.

The master switch cl_it is off by default. Until you enable live timers yourself, the system starts no countdowns and contacts no authorization service.

A separate subject. Item timers inside demo recordings are a different system with their own settings. They are covered in the demo browser and player guide.


2. A two-minute start

1. Open Main menu → Online Play Setup → Live Item Timers.

2. Enable Live item timers.

3. Leave Auto-start on own pickup enabled if you want it.

4. Set up the HUD, the sounds and the list of tracked items in the child pages.

5. Connect to a server and check the authorization result with it_info.

In the simplified multiplayer menu profile, the Item timers link sits directly among the network settings.

For a quick manual test:

cl_it 1; it_start rl 30; it_info active

A 30-second rocket-launcher timer appears on the HUD. A manual timer works on every server and does not depend on automatic-timer authorization.



3. Why this is not a cheat

The system is deliberately limited to data an ordinary client already legitimately holds during play.

The client receives no hidden server-side item state.
The client does not see items through walls and builds no hidden markers.
No future demo events are pre-read.
World observation uses only the ordinary snapshot/PVS of the current POV: only the entities the server has already sent to that player or spectator.
Map BSP data is used only as a static catalog of permanent spawn points and their stable ordinals. Matching uses the item's real resting point after its normal drop to the surface, and once an item is visible its position from the ordinary snapshot refines that point. The mere presence of a point in the BSP starts no timer and says nothing about whether an item is lying there now.
An item simply appearing in or disappearing from PVS never starts an automatic countdown.
Auto-start requires a confirmed pickup by the current POV next to a permanent BSP spawn of that exact item.
Weapons a player dropped and items that fell from a dead player are ignored unless they coincide with a permanent map spawn.
A server, or the signed Q2PRO-X policy, may forbid automatic starts.

A manual timer is an ordinary local stopwatch: you decide what to time and when. That is why server and site policy restrict only automatic starts, and never block it_start, manual binds, the HUD or the sounds of timers you started by hand.

It is worth understanding the boundary of this protection: a modified third-party client can remove any client-side check. The Q2PRO-X mechanism exists to give the official client a transparent fair-play policy; it does not replace server-side anti-cheat.


4. How an automatic timer starts

For an automatic start, every one of these conditions must hold at the same time:

1. cl_it is 1.

2. cl_it_auto_own is 1.

3. The item is permitted by its own cl_it_<id>_show.

4. Automatic timers are authorized for the current connection.

5. The client received confirmation of your own pickup.

6. A permanent BSP spawn of the same item type was found nearby.

If no permanent spawn is found, no automatic timer is created. That is deliberate safe behaviour for a weapon a player dropped by hand and for items that fell from a dead player.

The entity coordinate in the BSP is the map editor's original point: some items legitimately fall from it to the floor while the level starts. Q2PRO-X repeats that standard calculation and matches the pickup against the actual resting point instead. When the item has been visible in a snapshot, its last server position refines that point further. The trust radius is not widened by this, so the refinement does not permit automatic timers for ordinary dropped weapons.

Every automatic timer records the source AUTO. A manual timer records MANUAL. The manual timer has priority: an authorization refusal removes automatic timers only, and can never erase or overwrite a manual one.



5. Where automatic timers are permitted

5.1. Local play

On a local server, including a loopback connection, automatic timers are permitted immediately, both at deathmatch 0 and at deathmatch 1. No site request is made.

5.2. A remote server with an explicit decision

The client first reads sv_allow_timers from the remote server's serverinfo:

sv_allow_timers 1 permits automatic timers conclusively;
sv_allow_timers 0 forbids automatic timers conclusively;
any other value is treated as an error and forbids automatic starts;
an absent key hands the decision to the signed site policy.

An explicit server refusal cannot be overridden by the site list. An explicit server permission is likewise not overridden by the site's global mode.

5.3. A remote server with no key

If the server sent no sv_allow_timers, the client asynchronously contacts:

https://q2pro-x.com/api/q2prox/v1/live-item-timers/authorization

https://quake2.pro/api/q2prox/v1/live-item-timers/authorization

The second address is a mirror, used when the first one is unreachable. Connecting to the game server continues meanwhile, without waiting for the HTTP answer. Until a valid permission arrives, automatic starts stay off.

5.4. Manual timers

Manual timers work in every case:

with sv_allow_timers 0;
with force:-1 on the site;
while an answer is pending;
with the API unreachable;
on a network timeout;
with an invalid signature or an expired answer;
on a server that is not in the permitting list.


6. The complete decision order

PriorityConditionAutomatic start
1cl_it 0Disabled by the user
2cl_it_auto_own 0Not requested; the network is not used
3Local serverPermitted
4sv_allow_timers 1Permitted conclusively
5sv_allow_timers 0Forbidden conclusively
6Invalid sv_allow_timers valueForbidden
7The key is absentThe site policy is consulted
8Policy force:-1Forbidden
9Policy force:1Permitted
10force:0, the IP:port is in the listPermitted
11force:0, no matchForbidden
12No valid signed answerForbidden, safely

The check is repeated for every new connection and reconnection. A decision from the previous server is never carried over to the next one.



7. The timer menu pages

7.1. Main page

Live Item Timers

TypeSectionRowVariable or targetWhat it does
SectionGeneralGeneral
ToggleGeneralLive item timerscl_itMaster switch for live item respawn timers (manual + own-pickup). Applies immediately.
ToggleGeneralAuto-start on own pickupcl_it_auto_ownAuto-start only for your pickups at permanent BSP map spawns. Dropped/corpse items are ignored (no wallhack / hidden state); a dropped quad uses the time left that the server shows you: its spawn counts from the original take, or no timer. Applies immediately.
ToggleGeneralShow HUD stripcl_it_hudDraw the on-screen countdown strip. Applies immediately.
ToggleGeneralReset on POV changecl_it_reset_on_pov_changeWhen spectating, clear all timers after switching to another player's POV, entering free observer, or returning to play. Applies immediately.
SectionSectionsSections
NavigationSectionsHUD strip...q2prox_lit_hudHUD strip position, scale, opacity, warning window, unknown-item policy.
NavigationSectionsWarning sound...q2prox_lit_soundOptional local warning sound (code path only; silent if the asset is missing).
NavigationSectionsTracked items...q2prox_lit_itemsChoose which items are tracked and shown.
NavigationSectionsRespawn intervals...q2prox_lit_intervalsPer-item fallback respawn intervals + global defaults.
NavigationSectionsInstances & locations...q2prox_lit_worldPer-instance timers by BSP spawn location: ordinals + world observation (PVS-only).
NavigationSectionsPer-item HUD/sound/color...q2prox_lit_advancedPer-item HUD window, sound and color, by class.
NavigationSectionsManual timers & binds...q2prox_lit_bindsBind keys for manual timers (it_start / it_cancel / modifier).
NavigationSectionsPrint timer infoit_infoPrint the catalog + active timers to the console.

Reset on POV change deserves a separate note: it clears timers when the spectated player changes, when you move to free-look spectating, and when you return to play. It is on by default.

7.2. The HUD strip

Live Timers — HUD

TypeSectionRowVariable or targetWhat it does
SectionStripStrip
ToggleStripShow HUD stripcl_it_hudDraw the on-screen countdown strip. Applies immediately.
ToggleStripShow under menucl_it_hud_in_menuKeep timer HUDs visible underneath an open menu. Menu opacity still applies; a fully opaque menu covers them. Applies immediately.
SliderStripStrip scalecl_it_hud_scaleHUD strip size multiplier. Applies immediately.
SliderStripStrip opacitycl_it_hud_alphaHUD strip opacity. Applies immediately.
SliderStripMax cellscl_it_hud_maxMaximum number of timer cells shown at once (per strip). Applies immediately.
ToggleStripLabels under iconscl_it_hud_labelsShow the short English item code (RL, RG, RA, Q...) under each icon. Applies immediately.
SectionPosition (single strip)Position (single strip)
SliderPosition (single strip)Position X (-1 = auto)cl_it_hud_xHorizontal position in HUD pixels; -1 = auto (right-aligned). Applies immediately.
SliderPosition (single strip)Position Y (-1 = auto)cl_it_hud_yVertical position in HUD pixels; -1 = auto (Y=80, below the server Frags/Rank/Time block). Applies immediately.
SectionSplit by classSplit by class
ToggleSplit by classSplit by classcl_it_hud_splitSplit the strip into four separate HUDs by class (Armor / Powerups / Weapons / Other). Off = one combined strip (default). Scale, opacity and max cells stay common. Applies immediately.
SliderSplit by classArmor X (-1 = auto)cl_it_hud_armor_xArmor HUD X (-1 = auto: stacks top-right below the panel above it). Applies immediately.
SliderSplit by classArmor Y (-1 = auto)cl_it_hud_armor_yArmor HUD Y (-1 = auto stack). Applies immediately.
SliderSplit by classPowerups X (-1 = auto)cl_it_hud_pow_xPowerups HUD X (-1 = auto stack). Applies immediately.
SliderSplit by classPowerups Y (-1 = auto)cl_it_hud_pow_yPowerups HUD Y (-1 = auto stack). Applies immediately.
SliderSplit by classWeapons X (-1 = auto)cl_it_hud_wpn_xWeapons HUD X (-1 = auto stack). Applies immediately.
SliderSplit by classWeapons Y (-1 = auto)cl_it_hud_wpn_yWeapons HUD Y (-1 = auto stack). Applies immediately.
SliderSplit by classOther X (-1 = auto)cl_it_hud_misc_xOther HUD X (-1 = auto stack). Applies immediately.
SliderSplit by classOther Y (-1 = auto)cl_it_hud_misc_yOther HUD Y (-1 = auto stack). Applies immediately.
SectionBehaviorBehavior
SliderBehaviorWarning window, scl_it_warn_sWarning window: seconds before respawn when the cell turns red (and sound fires). Applies immediately.
ToggleBehaviorShow all timerscl_it_hud_show_allShow every tracked timer from the start, ignoring per-item HUD windows. Off = a cell appears only within its item HUD window. Applies immediately.
ToggleBehaviorBorder blinkcl_it_hud_blinkSmoothly pulse the tile border (dimmer-style) inside the warning window, faster as respawn nears (5 Hz when ready), with a bloom glow. Common to all tiles. Applies immediately.
ToggleBehaviorIcon pulsecl_it_hud_icon_pulseIndependent: smoothly pulse the item icon (dimmer-style) with a bloom glow inside the warning window. Common to all tiles. Applies immediately.
ToggleBehaviorRunning bordercl_it_hud_border_runIndependent: a bright comet runs clockwise around the tile border inside the warning window, faster as respawn nears. Common to all tiles. Applies immediately.
ListBehaviorUnknown intervalcl_it_unknown_policyWhat to do with an item that has no known respawn interval. Dynamic automatic Mega timing is handled separately. Applies immediately. [hide / show ?]

cl_it_hud_in_menu 1, the default, keeps timers visible under an open menu. Menu opacity still applies: a fully opaque menu naturally covers the HUD.

The HUD can stay one combined strip or be split into four: armor, powerups, weapons and other items. Each strip has its own coordinates, while scale, opacity, the warning window and the cell limit stay common to all of them.

The extra warning effects are independent of each other:

a smooth border blink;
an icon pulse;
a bright segment travelling around the border.

7.3. Audio warning

Live Timers — Sound

TypeSectionRowVariable or targetWhat it does
SectionWarningWarning
ToggleWarningWarning soundcl_it_soundPlay a local warning sound when a timer enters the warning window. Optional asset (sound/q2prox/it/warn.wav); silent if missing. Applies immediately.
SliderWarningVolumecl_it_sound_volWarning sound volume. Applies immediately.
SectionMode & eventsMode & events
ListMode & eventsSound modecl_it_sound_modeSound mode: off / generic cues / rich per-item voice with fallback. All sound files are optional; missing files silently skip. Applies immediately. [off / generic / rich]
ToggleMode & eventsCountdown numberscl_it_sound_countdownPer-second countdown number cues inside the sound window (optional assets). Applies immediately.
ToggleMode & eventsItem-up soundcl_it_sound_upPlay the item-up cue when a timer reaches respawn (optional asset). Applies immediately.

A general warning sound, a per-second countdown and a separate item-respawn cue are supported. In rich mode, phrases for specific items may be used. Every WAV file is optional: a missing file is silently skipped and never breaks the game.

7.4. Tracked items

This page decides which item types take part in the system at all. A disabled type creates no automatic timer and is not shown on the HUD.

7.5. Respawn intervals

Live Timers — Intervals

TypeSectionRowVariable or targetWhat it does
SectionGlobalGlobal
SliderGlobalDefault interval, scl_it_default_sGlobal fallback respawn seconds when a per-item interval is 0 (Mega excluded). Applies immediately.
SliderGlobalFixed Mega fallback, scl_it_mh_fb_sFixed Mega override. 0 = Automatic stock behavior: wait at least 5 s until health reaches 100, then use the post-decay delay below. Applies immediately.
SliderGlobalMega after decay, scl_it_mh_post_decay_sAutomatic stock Mega countdown after excess health reaches 100. Baseq2 uses 20 seconds. Applies immediately.
SliderGlobalREADY hold, scl_it_ready_hold_sKeep a READY cell on screen this many seconds after the countdown ends. Applies immediately.
SectionArmorArmor
SliderArmorGreen Armor, scl_it_ga_sGreen Armor fallback respawn seconds. Applies immediately.
SliderArmorYellow Armor, scl_it_ya_sYellow Armor fallback respawn seconds. Applies immediately.
SliderArmorRed Armor, scl_it_ra_sRed Armor fallback respawn seconds. Applies immediately.
SliderArmorPower Screen, scl_it_pws_sPower Screen fallback respawn seconds. Applies immediately.
SliderArmorPower Shield, scl_it_pwh_sPower Shield fallback respawn seconds. Applies immediately.
SectionPowerupsPowerups
SliderPowerupsQuad Damage, scl_it_quad_sQuad fallback respawn seconds. Applies immediately.
SliderPowerupsInvulnerability, scl_it_inv_sInvulnerability (Pentagram) fallback respawn seconds. Applies immediately.
SectionWeaponsWeapons
SliderWeaponsRocket Launcher, scl_it_rl_sRocket Launcher fallback respawn seconds. Applies immediately.
SliderWeaponsRailgun, scl_it_rail_sRailgun fallback respawn seconds. Applies immediately.
SliderWeaponsBFG10K, scl_it_bfg_sBFG10K fallback respawn seconds. Applies immediately.
SliderWeaponsGrenade Launcher, scl_it_gl_sGrenade Launcher fallback respawn seconds. Applies immediately.
SliderWeaponsHyperBlaster, scl_it_hb_sHyperBlaster fallback respawn seconds. Applies immediately.
SliderWeaponsChaingun, scl_it_cg_sChaingun fallback respawn seconds. Applies immediately.
SliderWeaponsShotgun, scl_it_sg_sShotgun fallback respawn seconds. Applies immediately.
SliderWeaponsSuper Shotgun, scl_it_ssg_sSuper Shotgun fallback respawn seconds. Applies immediately.
SliderWeaponsMachinegun, scl_it_mg_sMachinegun fallback respawn seconds. Applies immediately.
SliderWeaponsHand Grenades, scl_it_hg_sHand Grenades fallback respawn seconds. Applies immediately.
SectionOtherOther
SliderOtherMega: fixed, scl_it_mh_sPer-item fixed Mega override. 0 = Fixed fallback above, then dynamic health-decay timing when both are 0. Applies immediately.

This page sets the fallback intervals per item type, the general fallback and the special Mega Health logic. A specific mod or server may use different rules, so the values can be changed independently in each local Q2PRO-X profile.

7.6. Instances and locations

Live Timers — Instances

TypeSectionRowVariable or targetWhat it does
SectionHow it works — no hidden dataHow it works — no hidden data
SectionWorld observation (PVS)World observation (PVS)
ToggleWorld observation (PVS)World observationcl_it_world_observeUse only item entities already received in the current POV's normal snapshot/PVS plus static BSP map spawns. It never reveals hidden items or starts a timer from PVS churn alone. Automatic start requires a confirmed current-POV pickup at a permanent map spawn. Applies immediately.
ToggleWorld observation (PVS)Instance ordinalscl_it_ordinalsShow the BSP ordinal (1,2,...) on the HUD when a map has more than one of that item. Applies immediately.
SectionLearning & radiiLearning & radii
ToggleLearning & radiiPer-instance learningcl_it_learnLearn a session-only interval from the SAME BSP spawn disappearing/reappearing. Dynamic Mega is excluded unless it has a fixed override. Applies immediately.
SliderLearning & radiiBSP match radiuscl_it_bsp_match_radiusMatch radius between a visible item and its BSP spawn record. Applies immediately.
SliderLearning & radiiCluster radiuscl_it_instance_cluster_radiusMerge radius for near-duplicate BSP spawn origins of the same item. Applies immediately.
SliderLearning & radiiOwn pickup radiuscl_it_own_touch_radiusHow close a vanishing item must be to count as YOUR pickup of that exact instance (makes two identical items time separately). Applies immediately.
SliderLearning & radiiManual attach radiuscl_it_pickup_attach_radiusManual it_start <id> <seconds>: how close a BSP spawn must be to attach that manual timer to the nearest instance. Applies immediately.
SectionDiagnosticsDiagnostics
ToggleDiagnosticsWorld debugcl_it_world_debugVerbose world-observation logging to the console (BSP parse, ignored candidates). Applies immediately.
NavigationDiagnosticsPrint world infoit_infoPrint the BSP spawn catalog + observed instances to the console.

Here you enable PVS observation, ordinals for identical instances, interval learning and the matching radii against BSP points. The mode reveals no hidden data: it only helps to tell, for example, two different rocket launchers apart.

7.7. Per-item settings

For every type, five things are set separately:

whether it is drawn on the HUD;
how long before the respawn its cell appears;
whether it gets an audio warning;
when that sound starts;
its accent colour.

Weapon settings are split across three child pages so the long list stays usable:

Per-item — Heavy Weapons: rocket launcher, railgun, BFG10K and grenade launcher;
Per-item — Rapid-fire Weapons: hyperblaster, chaingun and machinegun;
Per-item — Shotguns & Grenades: shotgun, super shotgun and hand grenades.

Inside each group, all five settings above are available for every item.

7.8. Manual timers and binds

Live Timers — Binds

TypeSectionRowVariable or targetWhat it does
SectionModifierModifier
KeyModifierCancel modifier (hold)+it_modHold this key so that a manual it_start acts as it_cancel for the same item.
SectionManual timer startManual timer start
KeyManual timer startStart: Red Armorit_startStart / refresh the Red Armor timer (hold the modifier to cancel).
KeyManual timer startStart: Yellow Armorit_startStart / refresh the Yellow Armor timer (hold the modifier to cancel).
KeyManual timer startStart: Green Armorit_startStart / refresh the Green Armor timer (hold the modifier to cancel).
KeyManual timer startStart: Megait_startStart / refresh the Mega timer (needs a fallback interval; see Intervals).
KeyManual timer startStart: Quadit_startStart / refresh the Quad timer (hold the modifier to cancel).
KeyManual timer startStart: Pentagramit_startStart / refresh the Pentagram timer (hold the modifier to cancel).
KeyManual timer startStart: Power Shieldit_startStart / refresh the Power Shield timer (hold the modifier to cancel).
KeyManual timer startStart: Rocket Launcherit_startStart / refresh the Rocket Launcher timer (hold the modifier to cancel).
KeyManual timer startStart: Railgunit_startStart / refresh the Railgun timer (hold the modifier to cancel).
KeyManual timer startStart: BFG10Kit_startStart / refresh the BFG10K timer (hold the modifier to cancel).
SectionOtherOther
KeyOtherOpen timers menuit_menuOpen this Live Item Timers menu.
NavigationOtherReset timersit_resetClear all active timers and session-learned per-instance intervals.

This page binds keys to it_start, it_cancel and the +it_mod modifier. Manual binds pass through no server or site authorization.



8. The item catalog and its defaults

IDItemFallback intervalTracked by default
gaGreen armor20 sYes
yaYellow armor20 sYes
raRed armor20 sYes
mhMega HealthDynamicYes
quadQuad Damage60 sYes
invInvulnerability300 sYes
pwsPower Screen60 sYes
pwhPower Shield60 sYes
rlRocket launcher30 sYes
railRailgun30 sYes
bfgBFG10K30 sYes
silSilencer60 sNo
rebRebreather60 sNo
envEnvironment suit60 sNo
adrAdrenaline60 sNo
glGrenade launcher30 sNo
hbHyperblaster30 sNo
cgChaingun30 sNo
bandBandolier60 sNo
packAmmo pack180 sNo
sgShotgun30 sNo
ssgSuper shotgun30 sNo
mgMachinegun30 sNo
hgHand grenades30 sNo

These values are honest fallbacks, not a promise about any mod's rules. An administrator or user should correct the intervals if the server uses different ones.


9. Where an interval comes from

For an ordinary item, the interval is chosen in this order:

1. The number of seconds passed explicitly to the manual command.

2. The interval learned this session for that specific BSP point, if learning is enabled.

3. The cl_it_<id>_s value for that item type.

4. The general fallback cl_it_default_s.

Every interval is safely clamped to at most 3600 seconds, so a mistaken huge variable cannot overflow the time.

Mega Health does not inherit the general fallback. It has its own logic, described next.


10. The special Mega Health logic

Stock Mega Health in baseq2 has no simple fixed interval measured from the pickup. After a pickup the game waits at least five seconds, then decays the excess health back towards 100, and only then schedules the item's return.

So the normal automatic mode of Q2PRO-X works like this:

1. Your own Mega pickup at a permanent BSP spawn is confirmed.

2. The client waits at least five seconds.

3. Once the current POV's health is no greater than 100, the cl_it_mh_post_decay_s countdown starts — 20 seconds by default.

cl_it_mh_fb_s 0 keeps this dynamic mode. A non-zero value sets a fixed fallback for servers or mods with different rules. You can also set cl_it_mh_s explicitly, or pass the seconds to a manual it_start.



11. Manual commands

11.1. Starting

it_start <id> [seconds|ordinal|nearest]

Examples:

it_start rl

it_start quad 60

it_start rail nearest

it_start ra 2

With no second argument, the item's configured interval is used.
An explicit number can be an interval in seconds.
With observation enabled, a number inside the range of existing BSP ordinals means one specific instance.
nearest binds the timer to the closest trusted BSP point of that type.

11.2. Cancelling

it_cancel <id|all> [ordinal]

Examples:

it_cancel rl

it_cancel rl 2

it_cancel all

While the bound +it_mod modifier is held, it_start cancels the timer it would have started instead of starting it.

11.3. Reset and information

it_reset

it_info

it_info active

it_info world

it_menu

it_reset clears active timers and the intervals learned this session.
it_info prints the catalog, the settings and the authorization state.
it_info active shows active timers, their manual/auto source, their BSP binding and the time left.
it_info world shows the catalog of BSP points and the instance ordinals.
it_menu opens the live-timer menu.

11.4. Example binds

bind F5 "it_start rl 30"

bind F6 "it_start rail 30"

bind F7 "it_start quad 60"

bind F8 "it_cancel all"

bind ALT "+it_mod"


12. World observation and identical items

cl_it_world_observe is off by default. Once enabled, the system matches visible entities from the current snapshot/PVS against the map's static BSP points.

That gives three capabilities:

stable ordinals #1, #2 and so on for identical items;
binding a manual or automatic timer to one specific instance;
with learning enabled separately, refining the return interval of that same point.

Observation never starts a timer merely because an object vanished. A disappearance can mean the item left PVS, a door closed, or the camera turned, so that event is not reliable enough.

A learned interval lives only until the end of the session and is never written to a config. It is accepted only within a sensible range around the configured fallback. For the dynamic Mega, learning is disabled until a fixed interval is set.


13. Spectator behaviour

With cl_it_reset_on_pov_change 1, which is the default, every timer is cleared when:

you switch from one player to another;
you move from a player POV to free-look spectating;
you return from spectating to ordinary play.

Even if you disable the timer reset, the internal pickup and PVS detectors still rebase on a POV change. That prevents a false automatic start from an event that belonged to the previously spectated player.



14. The main console variables

VariableAccepted valuesDescription
cl_it0=off (default) / 1=onMaster switch for Q2PRO-X live multiplayer item respawn timers (manual + own-pickup countdowns on a HUD strip). Honest by design: no wallhack, no hidden server state, no demo pre-scan. Manual it_start/bind timers work on EVERY server; only AUTOMATIC own-pickup starts are authorized (see cl_it_auto_own). Mod-local.
cl_it_auto_own0=off / 1=on (default)Auto-start a timer when the current local/observed POV picks up a PERMANENT map item. A type-only STAT_PICKUP_STRING must resolve within cl_it_own_touch_radius of a same-type BSP spawn; confirmed world touches use that same catalog. Dropped/corpse items without a nearby map spawn are ignored. A dropped quad (used at once, with its remaining life in STAT_TIMER) never restarts the quad countdown: the spawn near you, or the map's only quad spawn, counts from the original take (30 s minus the time left); otherwise no timer. Automatic starts are authorized per connection: local server always allows; a remote server's serverinfo sv_allow_timers 1/0 is final; otherwise the signed q2pro-x.com/quake2.pro site policy decides. This NEVER gates manual it_start/bind timers.
cl_it_hud0=off / 1=on (default)Draw the on-screen live-timer countdown strip. Respects scr_draw2d, HUD scale and common alpha. Menu-time visibility is controlled separately by cl_it_hud_in_menu.
cl_it_hud_in_menu0=hide in menu / 1=show under menu (default)Keep live-timer HUD strips rendered underneath an open menu. The timer layer is composited before the menu, so cl_menu_alpha still applies naturally and a fully opaque menu covers it.
cl_it_reset_on_pov_change0=keep timers / 1=reset (default)Clear all live item timers when the spectator view identity changes: another chase target, chase to free observer, observer back to play, or the reverse. Pickup/PVS edge detectors are always rebased on a POV change even when this option is off, so another player's stale pickup message cannot create a false timer.
cl_it_hud_x-1=auto (default) / 0..hud_widthHorizontal HUD position of the timer strip, in HUD pixels. -1 = auto (right-aligned, 8 px horizontal margin), clamped to the visible HUD rect.
cl_it_hud_y-1=auto (default) / 0..hud_heightVertical HUD position of the timer strip, in HUD pixels. -1 = auto (Y=80, below the OpenFFA/OpenTDM Frags/Rank/Time block), clamped to the visible HUD rect.
cl_it_hud_scale0.3..4.0 / default 1.0Live-timer strip size multiplier.
cl_it_hud_alpha0..1 / default 1.0Live-timer strip opacity.
cl_it_hud_max1..20 / default 8Maximum number of timer cells drawn at once (soonest-first).
cl_it_hud_labels0=off (default) / 1=onDraw a short English item code (RL, RG, RA, Q, MH, ...) under each HUD icon.
cl_it_hud_split0=combined (default) / 1=split by classSplit the timer HUD into four separate strips by class: Armor, Powerups, Weapons, Other. Off = one combined strip (default). Scale, opacity, warning window and max cells stay common to all strips; each strip has its own position cvars (auto or fixed).
cl_it_hud_show_all0=window only / 1=show all (default)Show every tracked timer on the HUD from the moment it starts, ignoring each item's HUD show window. Off = a cell appears only once its remaining time is within that item's cl_it_<id>_hud_s window.
cl_it_hud_blink0=off (default) / 1=onSmoothly pulse (dimmer-style) each tile's colored border once its timer enters the warning window, speeding up as respawn nears (1 Hz at the window edge up to 5 Hz when ready), with a bloom glow that grows as the border dims. Common to all tiles.
cl_it_hud_icon_pulse0=off (default) / 1=onIndependent of the border blink: smoothly pulse the item icon (dimmer-style, up to 5 Hz near respawn) with a bloom glow behind it that grows as the icon dims. Common to all tiles.
cl_it_hud_border_run0=off (default) / 1=onIndependent of the blink: a bright comet of blocks runs clockwise around each tile's border inside the warning window, faster as respawn nears. Common to all tiles.
cl_it_warn_s0..60 seconds / default 3Warning window: seconds before respawn when a cell turns red and the optional warning sound fires.
cl_it_ready_hold_s0..60 seconds / default 5Keep a READY cell on screen this many seconds after the countdown reaches zero.
cl_it_unknown_policy0=hide (default) / 1=show '?'What to do with an item that has no known respawn interval: 0 hide it, 1 show a '?' cell. A default automatic Mega Health pickup is pending on its health-decay transition instead and does not create a fake unknown cell.
cl_it_default_s0=none / 1..300 seconds / default 30Global fallback respawn seconds used when a per-item interval is 0. Mega Health is excluded so it never fabricates a fixed countdown.
cl_it_mh_fb_s0=dynamic stock timing (default) / 1..300 seconds fixedFixed Mega Health fallback interval. 0 keeps the stock dynamic automatic path: after a trusted Mega pickup, wait at least five seconds and until POV health reaches 100, then start cl_it_mh_post_decay_s. A positive value overrides that behavior for mods with a fixed Mega interval.
cl_it_mh_post_decay_s1..300 seconds / default 20Automatic Mega Health respawn countdown after excess health has decayed/reached 100. Stock baseq2 schedules the hidden Mega 20 seconds after this transition. Used only by the dynamic automatic path; fixed per-item/fallback values and manual it_start remain fixed timers.
cl_it_sound0=off (default) / 1=onPlay an optional local warning sound when a timer enters the warning window. Code path only: the asset (sound/q2prox/it/warn.wav) is optional and playback silently skips if it is missing.
cl_it_sound_vol0..1 / default 1.0Warning sound volume.
cl_it_sound_mode0=off / 1=generic (default) / 2=richSound mode: 0 off, 1 generic (shared soon/up/number cues), 2 rich (per-item voice files with fallback to generic). All sound assets are optional external WAVs under sound/q2x/tm/; missing files silently skip.
cl_it_sound_countdown0=off / 1=on (default)Play a per-second number cue (q2x/tm/num/<n>.wav) for each remaining second inside an item's sound window. Optional assets; silent if missing.
cl_it_sound_up0=off / 1=on (default)Play the 'item is up' cue (q2x/tm/sys/up.wav) when a timer reaches respawn. Optional asset; silent if missing.
cl_it_world_observe0=off (default) / 1=onUse only item entities already received in the current POV's normal snapshot/PVS plus the static BSP map-spawn catalog, so identical map instances can be timed separately. This does not search for items, reveal anything through walls, read hidden server state, or pre-scan future/demo data. An item merely appearing or disappearing never starts a timer: automatic start still requires a confirmed pickup by the current POV at a permanent map spawn and normal automatic-timer authorization. Per-instance learning, when enabled separately, may refine the interval only after that same confirmed spawn is seen returning. Opt-in.
cl_it_ordinals0=off / 1=on (default)Draw the BSP ordinal (1, 2, ...) on the HUD when the map has more than one instance of that item, so identical items are distinguishable.
cl_it_learn0=off (default) / 1=on (needs cl_it_world_observe)Use per-instance respawn intervals learned from world observation: watching the SAME BSP spawn go hidden then visible again gives its real respawn time (session only, bounded 5-300 s). Requires cl_it_world_observe. Never learns from type-only own pickups. Dynamic Mega Health is excluded unless a fixed Mega override supplies a valid reference. Default off.
cl_it_bsp_match_radius8..512 / default 64Match radius (world units) between a visible item entity and its BSP spawn record. A visible item must be within this distance of a BSP spawn of the same type to become a trusted instance; unmatched items (dropped/corpse) are ignored.
cl_it_instance_cluster_radius8..512 / default 64Merge radius (world units) for near-duplicate BSP spawn origins of the same item type when building the spawn catalog. The catalog is built per map; changing this value takes effect after a map/reload.
cl_it_pickup_attach_radius16..2048 / default 200For the manual 'it_start <id> <seconds>' override: how close a BSP spawn must be to you for that manual timer to bind to the nearest concrete instance. Beyond it, the manual timer is class-level (no ordinal).
cl_it_own_touch_radius16..128 / default 64Trust radius for an automatic own pickup. A type-only STAT_PICKUP_STRING must occur this close to a same-type BSP map spawn, which rejects ordinary dropped/corpse items. With cl_it_world_observe, the same radius decides whether a vanishing visible instance was taken by your current POV. This also lets identical map items time separately.

For every ID in the catalog, a family of variables is created automatically:

PatternPurpose
cl_it_<id>_showWhether the item type takes part in the system
cl_it_<id>_sThe fallback interval of that type
cl_it_<id>_hudWhether the type is drawn on the HUD
cl_it_<id>_hud_sHow many seconds ahead its cell appears
cl_it_<id>_sndWhether the type gets a sound
cl_it_<id>_snd_sHow many seconds ahead the sound starts
cl_it_<id>_colorThe accent colour of the cell

Two variables, cl_it_debug and cl_it_world_debug, are diagnostics and act for the current session only: they are not written to a config and are back at zero on the next launch.



15. Configuring a game server

For R1Q2 and Q2PRO, the decision is best published in serverinfo. The s flag is mandatory, otherwise the client cannot see the key through a standard status request.

Permit automatic timers:

set sv_allow_timers "1" s

Forbid automatic timers:

set sv_allow_timers "0" s

If the key is absent, the official Q2PRO-X client consults the site policy. If the server hides the standard status reply, the key cannot be read either, and the site policy is used.

This variable does not disable a user's manual stopwatch.


16. Managing the permitting list through the API

The site re-reads the text policy file on every request, so changing the list does not require restarting the Node process.

Format:

force:0

q2.playground.ru:27910;PG DM

203.0.113.10:27910;IPv4 example

[2001:db8::10]:27910;IPv6 example

Rules of the file:

the first meaningful line must be force:-1, force:0 or force:1;
blank lines and lines beginning with # are ignored;
each further line has the form host:port;description;
the first semicolon separates the address; further semicolons may belong to the description;
the port is mandatory;
a DNS name is resolved on the API side, after which the client compares the exact numeric IP and port of the actual connection;
mask matches, name-only matches and portless matches are not accepted.

The force modes:

force:0 permits only the listed IP:port pairs;
force:1 permits any server that reached the site check;
force:-1 forbids any server that reached the site check.

force never overrides an explicit sv_allow_timers decision made by the game server.

In the accepted production layout, the configuration and the private key live outside the site's public directory. The recommended environment variables are:

Q2PROX_TIMER_AUTH_PRIVATE_KEY_FILE=C:/nodejs/Q2PRO-X-private/timer-auth-private-key-1.pem

Q2PROX_TIMER_AUTH_CONFIG=C:/nodejs/Q2PRO-X-private/timer-authorization-servers.txt

The private key must never be placed in a repository, a public directory, a client archive or a log.


17. How the API answer is protected

The protocol uses several independent layers:

HTTPS/TLS with strict host-name and certificate validation;
unsafe redirects are refused;
an ECDSA P-256/SHA-256 signature;
a fresh cryptographically random nonce for every request;
the signature is bound to the request hash, the nonce, the exact IP:port and the time;
a short answer lifetime, no more than 30 seconds;
a public key embedded in the client, with no private secret.

Consequently two permitting answers are never byte-identical, and an intercepted old answer cannot legitimately be applied to a new request or a different server.

On any signature, nonce, address, port, time, format or TLS error, automatic starts are forbidden. The game connection and manual timers keep working.



18. Diagnostics

Start with one command:

it_info

It shows:

the state of cl_it, auto-start, the HUD and observation;
the item catalog and the fallback intervals;
the source of the authorization decision;
the address of the checked server;
the description of the matching site entry;
the generation of the current connection;
a reminder that manual timers are available.

Further commands:

it_info active; it_info world

For a verbose log you can temporarily enable cl_it_debug 1 and cl_it_world_debug 1. Both act only until the end of the session and are never written to a config; to stop the output earlier, return them to 0.


19. Common situations

Automatic timers do not start, manual ones do

That is the normal sign of missing authorization, an unconfirmed permanent BSP point, or a disabled item type. Run it_info and check the decision source, cl_it_auto_own and cl_it_<id>_show.

A dropped weapon I picked up made no timer

That is by design. Automatic mode accepts only a pickup at a permanent map spawn. For a dropped weapon, use a manual it_start if you want a countdown.

The HUD is not visible

Check cl_it 1, cl_it_hud 1, the cell limit, the coordinates and the item's own cl_it_<id>_hud. With the menu open you also need cl_it_hud_in_menu 1 and a sufficiently transparent menu.

There is no sound

Check the mode, the volume and the item's own switch. Every sound file is optional; a missing file is a legitimate silent mode.

Mega did not start counting immediately

In dynamic mode that is correct. After your own pickup the client waits for the health to fall back to 100 and only then starts the 20-second stage.

Everything cleared after I changed the spectated player

That is the default cl_it_reset_on_pov_change 1, which protects you from mixing events belonging to different POVs. It can be disabled in the menu if you need that.

The site is unreachable

The game connection is never blocked. Automatic starts stay forbidden, manual timers keep working. An administrator can remove the dependency on the site entirely with an explicit sv_allow_timers 1 or 0 in serverinfo.


20. Suggested profiles

Ordinary online play

cl_it 1

cl_it_auto_own 1

cl_it_hud 1

cl_it_reset_on_pov_change 1

cl_it_world_observe 0

A manual stopwatch with no automation

cl_it 1

cl_it_auto_own 0

cl_it_hud 1

Spectating a match with separate instances

cl_it 1

cl_it_auto_own 1

cl_it_world_observe 1

cl_it_ordinals 1

cl_it_reset_on_pov_change 1


21. Summary

Q2PRO-X live timers combine a convenient HUD and a manual stopwatch with strict limits on automation. Manual mode stays available everywhere; automatic mode works only from your own confirmed pickup, and only after permission from the local server, from serverinfo, or from the signed site policy.

For a player the main diagnostic tool is it_info; for an administrator the simplest and most unambiguous control remains set sv_allow_timers "1|0" s.


Picking up a dropped quad

A quad dropped by a killed player does not start a fresh full respawn timer. The client uses the server-reported remaining duration to infer the original pickup time and count from there. It associates the timer with a nearby quad spawn or the map's sole quad spawn. No timer is created if the spawn or interval is unknown, the quad has already respawned, or the remaining duration cannot be determined reliably. This includes the dropped quad's final second and a pickup on top of an active quad that adds no visible time.

Pickup text, disappearance at the player's feet and a duration jump are reconciled as one event. Consecutive pickups with identical text are still recognised separately. A fresh quad from its spawn, including one collected while quad is already active, starts the timer normally. cl_it_world_debug 1 prints pickup details in the console.