Skip to content

Movement ​

Q3-style core with Warsow extensions. All defaults below come from simulation/MovementProfile.ts and run identically on client (predicted) and server (authoritative).

Core Numbers ​

ValueDefaultNotes
Max ground speed280 u/smaxSpeed; the soft cap, before air-strafe gains
Run speed400 u/srunSpeed; only moving straight forward (strafing, backpedalling and diagonals use the 280 walking speed), and not while firing, aiming or crouching. With Always run on (the default) you run without holding anything and Shift walks instead
Ground acceleration10groundAcceleration
Air acceleration1airAcceleration; this is what makes air strafing work
Max added air speed per tick30 u/smaxAirSpeed; the per-tick cap
Friction6friction; ground deceleration
Stop speed100stopSpeed; below this, friction maxes out
Gravity1000 u/s²gravity
Falling-gravity multiplier1.25×fallingGravityMultiplier — pulls harder during downward arc
Jump velocity320 u/sjumpVelocity
Crouch speed multiplier0.5×crouchMultiplier
Step height18 ustepHeight; auto-climb threshold
Air-control angle150° / secairControl; how fast you can re-aim mid-air without losing speed

Strafe Jumping (Air Strafing) ​

The classic Q3 technique. Mid-air, hold the strafe key (A or D) in the direction you want to turn and move your mouse the same way. The air-acceleration math gains you a small velocity vector in the new direction without subtracting the existing one — so over several mid-air corrections you accumulate net speed.

Rules of thumb:

  • Keep your crosshair direction and your velocity direction slightly different. Strafe input bridges the gap.
  • Holding W while strafing actually hurts your gains — it makes the math project velocity onto your forward axis.
  • The per-tick gain is capped (maxAirSpeed: 30), so jamming the mouse won't get you anywhere faster than smooth, steady turns.

Bunny Hopping ​

Chain jumps to keep your accumulated air-strafe speed. The key is timing:

  • Hit Space the instant you touch the ground — friction only applies between landing and next jump.
  • Don't release directional keys; you'll bleed speed even in one ground frame.
  • Many players bind Space to mousewheel-down for easier timing.

Wall Jump ​

A Warsow-style mechanic. You can kick off a wall to gain height and a momentum boost.

ValueDefaultNotes
Wall-jump height280 u/swallJumpHeight; vertical impulse
Bounce factor1.2×wallJumpBounce; reflected horizontal velocity
Reach20 uwallJumpReach; how close you need to be
Cooldown1.0 swallJumpCooldown
Minimum height above floor32 uwallJumpMinHeight; can't wall-jump while standing
Charge time0.2 swallJumpChargeTime; hold jump near a wall to charge
Charge boost1.5×wallJumpBoost; multiplier when jumping out of a charged state

Practical: approach a wall, hold Space as you get close, the screen tilts slightly while charging, then release Space to launch with the boost. Look in the direction you want to go before releasing.

Ledge Grab ​

Auto-grab + pull-up on ledges within reach during a fall.

ValueDefaultNotes
Reach32 uledgeReach
Maximum grabable ledge height64 uledgeHeight
Minimum fall velocity to trigger-50 u/sledgeMinFall; need to actually be falling
Grab timeout2.0 sledgeTimeout; how long you can hang
Pull-up duration0.5 sledgePullTime

Practical: jump or fall toward a ledge with a grabable lip. The game grabs automatically; the camera tilts and your view rises during the pull-up. You can cancel the grab early by jumping.

Crouchslide ​

Run into a crouch to slide along the ground with a temporary speed bonus.

ValueDefaultNotes
Duration800 msslideDuration; ends when this elapses or you cancel
Speed multiplier (entry)1.4×slideSpeedMultiplier; instant boost on slide-start
Decay0.5 per tickslideDecay; how fast the bonus fades
Jump-out boost1.3×slideJumpBoost; multiplied to launch velocity if you jump during slide
Minimum entry speed375 u/sslideMinSpeed; below this you just crouch normally
Friction while sliding0.1slideFriction; much lower than normal ground friction
Cooldown between slides1.5 sslideCooldown

Practical: build speed (run + strafe jumps), tap Ctrl while at full run to enter slide, then either ride it out for the speed boost or jump out to chain into more strafe gains. The camera tilts in the slide direction. Standing up from a slide/crouch is a deliberate ~260 ms rise (crouching down is snappier at ~140 ms) — both are sim-clock anchored, so they never "flick" during reconciliation.

Teleporters ​

Maps place trigger_teleport brush volumes linked to a misc_teleporter_dest exit point. Walk into one and you're instantly relocated to the exit, facing the exit's authored direction.

  • Momentum carries. Your full 3D speed is redirected along the exit yaw (Warsow-style) — so falling into a drop-in teleporter converts your fall speed into exit speed. Dive in with speed and you rocket out the other side.
  • Predicted, no snap. Teleport is evaluated in the shared movement code, so the client predicts it — you don't rubber-band, and your view snaps cleanly to the exit direction the instant you cross the trigger.
  • Telefrag. If someone is standing on the exit when you come through, they die instantly and you get the frag (Q3 rule). Camping a teleporter exit is dangerous.
  • A washoi afterimage "ghost" is left at both the entry and the exit — a readable tell that a teleport just happened (and where you went).

Jumppads ​

trigger_push brushes launch you at a fixed target (a target_position) — the classic accelerator pad. The launch is solved so your arc lands on the pad's target, and it's client-predicted like everything else. Velocity is replaced, not added, so you can't "pre-load" a pad by jumping into it — step on, get launched, and aim your air-strafe on the way up.

Ladders ​

Brushes tagged SURF_LADDER are climbable. A ladder is a volume, not a wall: you climb whenever your body overlaps it, so you don't need to face it or press into it.

ValueDefaultNotes
Climb speed168 u/sclimbSpeed; up or down, well under run speed
Acceleration / friction30 / 20releasing the keys stops you on the rung within a few units
Sideways speed0.4×lateralScale; shuffle along a ladder
Jump-off speed270 u/sdetachUp; jump to leave a ladder
Re-grab cooldown400 msdetachCooldownMs; after you let go
  • Walking past the foot of a ladder doesn't grab you. On the ground you only attach when you actively move up into it; in the air, touching it is enough.
  • Climbing is part of the shared movement code, so it is predicted on the client like everything else.

Water and Other Liquids ​

Water, slime and lava are volumes with four depth levels: 0 dry, 1 feet wet (you still walk, with drag), 2 waist deep (you swim), 3 fully submerged (you swim and the air clock runs).

ValueDefaultNotes
Swim speed0.5×swimScale; wading scales smoothly between walking and this
Water acceleration4waterAcceleration
Idle sink60 u/sidleSinkSpeed; you drift down with no input
Water-jump (climb out)200 forward, 350 upwaterJumpForward / waterJumpUp; assisted climb onto a ledge, 2 s of reduced control

Swim in the direction you are looking: look up and hold forward to rise. Jump and crouch swim straight up and down regardless of where you look. While swimming you lie flat, so your hitbox is shorter (28 u instead of 56 u) and slides into low gaps.

HazardDamage
Drowning12 s of air once your head goes under; then 2 damage, rising by 2 each second, capped at 15 per second
Slime10 per second per depth level
Lava30 per second per depth level, roughly a two-second death at full health

Air refills as soon as your head is clear. Water also has splash effects and sound; these are presentation only and don't change gameplay.

Lifts, Doors and Movers ​

Moving brush models (func_plat, doors and similar) are simulated on the server, predicted on the client, so standing on an elevator feels the same online as offline.

  • You ride them. Players, corpses and dropped weapons all travel with the floor.
  • Crushing. A mover that is blocked by a player damages them (20 hits per second, using the mover's own dmg value; 0 disables it). Most movers reverse when blocked; ones with the crusher flag keep pushing. Crush damage counts as world damage, like drowning, and is never credited to another player.
  • Activation, wait times and sounds are authored in the map.

Fall Damage ​

Falling too far hurts. Distance is measured floor-to-floor in map units (a normal jump arc never counts — only the height you actually drop between surfaces):

DropEffect
< 256uSafe (about five jump-heights)
256–384uRamps 0→100 damage, absorbed by armor like a normal hit
384–512uDrains all armor and leaves you at exactly 1 HP
≥ 512uFatal — a self-frag

Hold crouch as you land to soften the effective drop (sv_falldamage_crouchsoften, default 64u). Servers can retune the bands or disable fall damage entirely (sv_falldamage 0); the values above are the defaults (sv_falldamage_min / _full / _fatal). Post-spawn drops and mid-fall teleports never count.

Tips & Common Mistakes ​

  • Don't hold W during strafe jumps. The air-strafe gain comes from your mouse + side keys, not forward.
  • Pre-jump before charging a wall-jump. Your wall-jump uses the velocity you arrive with as the base.
  • Crouchslide is for chaining, not braking. The speed boost is your reward; if you slide into a wall you lose it instantly.
  • Bunny-hop landing windows are tighter than they feel. Practice on aerowalk_b1 or similar parkour maps before competitive servers.
  • Movement is identical on client and server. If something feels off, it's network jitter or packet loss, not your inputs being ignored — check NetGraph (see HUD).

Built on the SHAG Engine.