Skip to main content

Overview

The movement configuration system provides multiple movement styles including standard WASD, null binds for counter-strafing, and desubtick binds for better movement timing.

File Location

csafap/movement/

Movement Modes

Default Movement

Standard WASD movement binds with no modifications.
csafap/movement/default.cfg
file
Basic WASD movement configuration.Configuration:
bind w +forward;
bind a +left;
bind s +back;
bind d +right;
bind mouse_x yaw;
bind mouse_y pitch;
rightleft 0 0 0;
forwardback 0 0 0;
Activation:
exec csafap/movement/default

Null Binds (WASD)

Null binds automatically cancel opposite direction inputs for perfect counter-strafing. Requires launch option: -testscript "../../csgo/cfg/csafap/addons/.vtest"
csafap/movement/nullWASD.cfg
file
Advanced null movement binds using ticker technology.How It Works:
  • Pressing W while holding S automatically cancels S input
  • Pressing A while holding D automatically cancels D input
  • Creates instant counter-strafing without manual input timing
Implementation:
// W Key (Forward/Back null)
alias +nullW alias W! W+1
alias -nullW alias W! W-1
alias W+1 "W<; alias W! W+2"
alias W+2 "alias W!; alias S< forward -9999 f u; alias S> +forward; +forward"
alias W-1 "forward -9999 f u; alias W! W-2"
alias W-2 "alias W!; alias S< +back; alias S>; W>"

bind W +nullW
Similar logic applies to A, S, and D keys.Activation:
exec csafap/movement/nullWASD
Or in MAIN.cfg:
alias load_movement load_null

Desubtick Binds (WASD)

Desubtick binds optimize movement timing for better responsiveness. Requires launch option: -testscript "../../csgo/cfg/csafap/addons/.vtest"
csafap/movement/desubtickWASD.cfg
file
Optimized movement binds that work with CS2’s subtick system.Implementation:
// W Key
alias +desubW "alias W! W+1"
alias -desubW "alias W! W-1"
alias W! ""
alias W+1 "alias W! W+2"
alias W+2 "alias W!; forward -9999 f u; +forward"
alias W-1 "forward -9999 f u; alias W! W-2"
alias W-2 "alias W!; -forward"

bind W +desubW
Activation:
exec csafap/movement/desubtickWASD
Or in MAIN.cfg:
alias load_movement load_desub

Viewmodel Toggle System

Dynamically toggle viewmodel visibility during gameplay.

Viewmodel ON

csafap/movement/viewmodel_on.cfg
file
Configuration for viewmodel enabled state.
alias viewmodel_labels "exec csafap/movement/viewmodel_off_labels"
alias viewmodel_cmd "exec csafap/movement/viewmodel_off_cmd"
alias vm ""

Viewmodel OFF

csafap/movement/viewmodel_off.cfg
file
Configuration for viewmodel disabled state.Allows you to hide your weapon viewmodel for cleaner screen visibility.

Advanced Movement Commands

Null Bind Command Structure

Each null bind uses a state machine pattern:
alias +nullW alias W! W+1    // Key pressed
alias -nullW alias W! W-1    // Key released
alias W! ""                  // Current state (empty by default)

Desubtick Command Structure

alias +desubW "alias W! W+1"
alias -desubW "alias W! W-1"
alias W+1 "alias W! W+2"
alias W+2 "alias W!; forward -9999 f u; +forward"
alias W-1 "forward -9999 f u; alias W! W-2"
alias W-2 "alias W!; -forward"

Movement Labels and Commands

The system uses label and command pairs for radio wheel integration:
null_labels
alias
Controls the displayed text for null bind status.
alias null_labels exec_null_on_labels  // Shows "NULL: ON"
alias null_labels exec_null_off_labels // Shows "NULL: OFF"
null_cmd
alias
Controls the executable command for null bind toggle.
alias null_cmd exec_null_on_cmd   // Enables null binds
alias null_cmd exec_null_off_cmd  // Disables null binds

Radio Wheel Integration

Movement modes can be toggled via the radio wheel interface:
// Null binds radio tile
cl_radial_radio_tab_1_text_4 cmd";exec csafap/movement/desubtickWASD;

Usage Examples

Example 1: Enable Null Binds at Launch

In MAIN.cfg:
alias load_movement load_null

Example 2: Enable Desubtick Binds at Launch

In MAIN.cfg:
alias load_movement load_desub

Example 3: Switch to Default Movement

In console or via keybind:
exec csafap/movement/default

Example 4: Manual Null Bind Toggle

// Bind a key to toggle null binds
bind "F1" "exec csafap/movement/nullWASD"
bind "F2" "exec csafap/movement/default"

Technical Details

Ticker Technology

Null and desubtick binds require the -testscript launch option to access ticker functionality.
The ticker system uses the f u flags with negative values to create frame-perfect input timing:
forward -9999 f u  // Cancels forward movement at frame-perfect timing
left -9999 f u     // Cancels left movement at frame-perfect timing

Movement Command Priority

When opposite keys are pressed:
  1. New key press triggers state change
  2. Opposite direction is cancelled via -9999 f u
  3. New direction is activated
  4. State machine updates for next input

Mouse Bindings

bind mouse_x yaw    // Horizontal mouse movement
bind mouse_y pitch  // Vertical mouse movement

Movement Zeroing

rightleft 0 0 0    // Zeros horizontal strafe movement
forwardback 0 0 0  // Zeros forward/backward movement

File Structure

csafap/movement/
├── default.cfg                   # Standard WASD
├── nullWASD.cfg                  # Null binds (ticker)
├── nullWASD_noticker.cfg         # Null binds (no ticker)
├── desubtickWASD.cfg             # Desubtick binds
├── null_on_cmd.cfg               # Null enable command
├── null_on_labels.cfg            # Null ON labels
├── null_off_cmd.cfg              # Null disable command
├── null_off_labels.cfg           # Null OFF labels
├── desubtick_on_cmd.cfg          # Desubtick enable command
├── desubtick_on_labels.cfg       # Desubtick ON labels
├── viewmodel_on.cfg              # Viewmodel visible
├── viewmodel_on_cmd.cfg          # Viewmodel ON command
├── viewmodel_on_labels.cfg       # Viewmodel ON labels
├── viewmodel_off.cfg             # Viewmodel hidden
├── viewmodel_off_cmd.cfg         # Viewmodel OFF command
├── viewmodel_off_labels.cfg      # Viewmodel OFF labels
├── movement_cmd.cfg              # Movement commands
└── movement_labels.cfg           # Movement labels

Build docs developers (and LLMs) love