NexQuake / Documentation

Controls

NexQuake supports three input methods: mouse + keyboard, touch (mobile), and gamepad. The active input method is detected automatically and the in-game Options menu updates its labels to match.

Mouse and Keyboard

Standard Quake mouse and keyboard input. Pointer lock is acquired on click and released when the settings overlay is opened. Mouse sensitivity is set via the global sensitivity cvar (also m_yaw, m_pitch).

Touch Input

Touch controls activate automatically on coarse-pointer (touch) screens with no setup required.

Layout

Zone / Element Location Purpose
Joystick zone Left 40% of the screen Virtual thumbstick — drag from any starting point to move. Re-centers on release.
Look zone Right 60% of the screen Swipe to turn and look.
Touch slots 1–9 Edge buttons (configurable positions) Bindable action buttons.
Back button (Q) Top-left (fixed) Tap: menu back / escape. Long-press (400 ms): open console.
Gear button Top-right (fixed) Opens the settings panel.

Slots default to common actions (fire, jump, weapon cycle, team chat, rocket launcher, and lightning gun). Each button shows an SVG glyph matching its bound command. The overlay auto-hides after 2.5 seconds of inactivity and reappears on the next touch.

Touch Text Entry

When Quake enters a text mode on touch (console input, say/messagemode, or a menu text field), a text bar appears at the top:

  • Tap the bar to focus and use the mobile keyboard; press enter/send to submit to the game.
  • Tap outside the bar to hide it. Esc/back also dismisses it (and cancels message entry).
  • Console text stays synced with the engine buffer while the bar is focused.

Flip Mode

touch_flip 1 mirrors the layout horizontally for left-handed play — the joystick moves to the right side and the look zone to the left. Set it in the console or config.cfg.

Repositioning Slots

Touch slots can be dragged to any position on the screen. Layout is saved to localStorage (nexquake.touch.layout.v1) and restored on reload. To reset to the default, clear localStorage or delete the key.

Touch Buttons

Nine slots (touch1touch9) can be rebound with the standard bind command:

bind touch1 +attack
bind touch2 +jump
bind touch3 impulse 10

Default bindings:

Slot Default Action
touch1 +jump Jump
touch2 impulse 12 Previous weapon
touch3 +attack Fire
touch4 impulse 10 Next weapon
touch5 messagemode2 Team chat
touch6 Unbound
touch7 Unbound
touch8 impulse 7 Rocket launcher
touch9 impulse 8 Lightning gun

Touch Tap Zones

Quick taps (within touch_tap_ms ms and touch_tap_px px of movement) on the left zone fire touch_tap1 and on the right zone fire touch_tap2. These are bindable the same way:

bind touch_tap1 +attack
bind touch_tap2 +jump

Touch Cvars

Cvar Default Description
touch_sensitivity 3 Look sensitivity for swipe-look. Equivalent of sensitivity for touch. Archived (saved in config.cfg).
touch_lookspring 0 If 1, look returns to center when swipe is released.
touch_lookstrafe 0 If 1, horizontal swipe strafes instead of turning.
touch_invertpitch 0 If 1, inverts vertical look direction for swipe.
touch_flip 0 If 1, mirrors the touch layout horizontally (left-handed mode).
touch_tap_ms 220 Maximum contact duration in milliseconds for a look-zone touch to register as a tap (touch_tap1/touch_tap2) rather than a swipe.
touch_tap_px 40 Maximum finger movement in pixels for a look-zone touch to register as a tap rather than a swipe.

Gamepad Input

Gamepad input uses the browser Gamepad API with the W3C standard mapping. Connecting a gamepad is enough — no browser extension is needed on modern browsers. The right stick controls look; the left stick moves. Buttons are dispatched as Quake key events and can be rebound with bind.

Gamepad input is detected when any gamepad axis or button is used. Once detected, Options menu labels switch to gamepad equivalents.

Gamepad Key Names

Use these names in bind commands:

Key name Standard controller button
joy_a A (bottom face button)
joy_b B (right face button)
joy_x X (left face button)
joy_y Y (top face button)
joy_lb Left bumper (LB / L1)
joy_rb Right bumper (RB / R1)
joy_lt Left trigger (LT / L2)
joy_rt Right trigger (RT / R2)
joy_back Back / Select / View
joy_start Start / Menu
joy_dpad_up D-pad up
joy_dpad_down D-pad down
joy_dpad_left D-pad left
joy_dpad_right D-pad right
joy_ls Left stick click (L3)
joy_rs Right stick click (R3)

Example bindings:

bind joy_a +jump
bind joy_rt +attack
bind joy_lb impulse 12
bind joy_rb impulse 10
bind joy_start togglemenu

Gamepad Cvars

Cvar Default Description
joy_sensitivity 3 Look sensitivity for right-stick look. Archived.
joy_lookspring 0 If 1, look returns to center when the stick is released.
joy_lookstrafe 0 If 1, right stick X axis strafes instead of turning.
joy_invertpitch 0 If 1, inverts vertical look direction for stick.

Shared Analog Cvar

Cvar Default Description
analog_speed 400 Maximum look turn rate in degrees per second for both touch and gamepad analog inputs.

Video Modes

vid_mode selects the render resolution. Set it in the console or Options → Video Modes menu.

vid_mode 0

The mode list is split into two sections:

Classic Modes — fixed 4:3 aspect ratio, independent of window size:

vid_mode Resolution Notes
0 320×240 Low-res Quake look.
1 640×480 Default. Classic res.
2 1280×960 Full-resolution 4:3.

Fullscreen Modes — match the current browser viewport aspect ratio, scaled at 25%, 50%, and 100% of the maximum render dimension. Exact resolutions depend on the viewport at startup.

FOV scales automatically when switching modes to preserve the vertical field of view. Switching from 4:3 to a widescreen mode widens the horizontal view; the vertical play area stays the same.

A widescreen warning appears in the Video Modes menu when the selected mode hides the weapon model (standard Quake behavior for FOV above 90).

All New Cvars at a Glance

Cvar Default Archived Category
touch_sensitivity 3 yes Touch look
touch_lookspring 0 yes Touch look
touch_lookstrafe 0 yes Touch look
touch_invertpitch 0 yes Touch look
touch_flip 0 no Touch layout
touch_tap_ms 220 no Touch tap
touch_tap_px 20 no Touch tap
joy_sensitivity 3 yes Gamepad look
joy_lookspring 0 yes Gamepad look
joy_lookstrafe 0 yes Gamepad look
joy_invertpitch 0 yes Gamepad look
analog_speed 400 no Analog shared
vid_mode 0 yes Video

Archived cvars are written to config.cfg automatically and restored on next load. Non-archived cvars reset to their defaults on each startup unless set explicitly in autoexec.cfg.