Skip to main content
Jumpthrow binds allow you to execute perfect jumpthrows just like in CS:GO, using a ticker-based system that works on official servers.

How Jumpthrow Works

CSAFAP uses a ticker mechanic (via -testscript launch option) to execute frame-perfect jumpthrows:
// Jumpthrow logic (from csafap/addons/multi/JT.cfg)
alias +JumpThrow alias JT! JT+1
alias -JumpThrow alias JT! JT-1
alias JT! ""

alias JT+1 "M1>; alias JT! JT+2"
alias JT+2 "M2>; alias JT! JT+3"
alias JT+3 "alias JT!; +jump"
alias JT-1 "jump -9999 f u; alias JT!"
This creates a sequence that:
  1. Releases left-click (M1)
  2. Releases right-click (M2)
  3. Executes jump
  4. Resets all actions

Requirements

Jumpthrow binds REQUIRE the ticker launch option:
-testscript "../../csgo/cfg/csafap/addons/.vtest"
Without this, jumpthrows will not work.
You must also use special mouse binds:
bind mouse1 +M1
bind mouse2 +M2
These are automatically configured when you exec csafap/main.cfg.

Jumpthrow Types

Standard Jumpthrow (JT)

Executes jump + release simultaneously:
  • Hold left-click (or right-click) to prepare grenade
  • Press jumpthrow bind
  • Grenade releases at peak of jump
// Bind example (set in csafap/main.cfg)
bind "space" "+JumpThrow"

W-Jumpthrow (WJT)

Adds forward movement for extra distance:
  • Hold left-click (or right-click) to prepare grenade
  • Press W-jumpthrow bind
  • Character moves forward + jumps + releases grenade
// W-Jumpthrow logic (from csafap/addons/multi/WJT.cfg)
alias +WJumpThrow alias JT! WT+1
alias -WJumpThrow alias JT! WT-1

alias WT+1 "+forward; alias JT! WT+2"
alias WT+2 "M1>; alias JT! WT+3"
alias WT+3 "M2>;alias JT! WT+4"
alias WT+4 "alias JT!;+jump"
alias WT-1 "forward -9999 f u; alias JT! WT-2"
alias WT-2 "alias JT!; jump -9999 f u"
Bind W-jumpthrow to a separate key from standard jumpthrow for quick access to both.

Setting Up Jumpthrow Binds

1

Add Launch Option

Add to Steam launch options:
-testscript "../../csgo/cfg/csafap/addons/.vtest"
2

Configure Main Config

In csafap/main.cfg, set your jumpthrow binds:
// Jumpthrow binds (ticker version)
bind "space" "+JumpThrow"     // Standard jumpthrow
bind "v" "+WJumpThrow"        // W-jumpthrow
3

Load Ticker System

The ticker is automatically loaded when you exec csafap/main.cfg with the launch option active
4

Test In-Game

  • Equip a grenade
  • Hold left-click or right-click
  • Press your jumpthrow bind
  • Grenade should release at jump peak

Radio Wheel Method (Alternative)

You can also use jumpthrows via radio wheel without ticker:
// Radio wheel jumpthrow (from JT.cfg)
cl_radial_radio_tab_2_text_1 "#CFG_JT"
cl_radial_radio_tab_2_text_2 cmd";+jump;-attack;-attack2;-attack;-attack2;-jump;-jump;
This method:
  • Works without ticker launch option
  • Less convenient (requires radio wheel)
  • Good for occasional jumpthrows

Ticker System Explanation

The ticker uses .vtest file execution to create frame-by-frame alias updates:
// Ticker initialization (from csafap/addons/AveYo.cfg)
// Credit: AveYo for Gaming

// Frame ticker runs aliases every frame
alias W! ""   // Movement ticker
alias A! ""
alias S! ""
alias D! ""
alias M1! "" // Mouse ticker
alias M2! ""
alias JT! "" // Jumpthrow ticker
The .vtest file contains:
exec csafap/addons/loader
And loader.cfg calls all ticker aliases every frame, enabling frame-perfect inputs.

Mouse Bind Integration

bind mouse1 +attack
bind mouse2 +attack2
The ticker mouse binds allow aliases to hook into click events, enabling:
  • Jumpthrow release on bind press
  • Rapid fire pistol mechanics
  • Follow-recoil crosshair integration

Movement Reset After W-Jumpthrow

W-jumpthrow uses delayed -forward to maintain forward velocity:
// Reset movement stuck issue fix
alias reset_JTmovement "forward -9999 f u"

bind 3 +reset_JTmovement  // Knife switch resets
bind mouse_x reset_JTmouse_x  // Mouse movement resets
bind mouse_y reset_JTmouse_y
If you’re stuck moving forward after W-jumpthrow:
  1. Switch to knife (press 3)
  2. Move your mouse
  3. Or type forward -9999 0 0 in console
Moving forward after W-jumpthrow is intentional to maintain grenade velocity. The config automatically resets when you switch weapons or move your mouse.

Compatibility with Movement Configs

Null Binds (Snap-Tap)

Jumpthrow works with null binds, but W-jumpthrow may conflict:
// If using nullWASD, W-bind might prevent jumpthrow movement
// Solution: Use default movement for jumpthrows, or bind WJT separately
bind W +forward  // Change this in nullWASD.cfg for WJT compatibility

De-subtick Binds

Fully compatible with de-subtick movement:
// De-subtick jump bind (from desubtickWASD.cfg)
alias +desubJump "alias J! J+1"
alias -desubJump "alias J! J-1"
alias J! ""

alias J+1 "alias J! J+2"
alias J+2 "alias J!; jump -9999 f u; +jump"
alias J-1 "jump -9999 f u; alias J! J-2"
alias J-2 "alias J!; -jump"

Troubleshooting

You’re using an outdated bind. Valve patched multi-input binds on October 28, 2024. Update to CSAFAP v1.9+ which uses the ticker method.Temporary fix: Type -jump in console (or jump -9999 0 0)
Check:
  1. Launch option -testscript "../../csgo/cfg/csafap/addons/.vtest" is set
  2. You’re using bind mouse1 +M1 and bind mouse2 +M2
  3. Config loaded without errors (check console on launch)
  4. Not using commands longer than allowed (breaks exec queue)
This is normal. The bind uses delayed -forward to maintain velocity. Reset by:
  • Pressing 3 (knife)
  • Moving your mouse
  • Typing forward -9999 0 0 in console
The ticker aliases aren’t loading. This means:
  1. Launch option is missing or incorrect
  2. A command in csafap/main.cfg is too long (breaks exec)
  3. Config file path is wrong (case-sensitive on Linux)
Check console output immediately after game launch for errors.
Use this command:
cl_scoreboard_mouse_enable_binding +M2
This is automatically set in csafap/main.cfg.

Alternative: Macro-Based Jumpthrow

If you prefer not to use ticker system:
  1. Use a keyboard/mouse macro for standard jumpthrow
  2. Use the radio wheel method for occasional jumpthrows
  3. Use in-game bind for standard jump: bind space +jump
See this video tutorial for macro setup.
The ticker method is recommended as it’s more reliable and works for both JT and WJT binds.

Build docs developers (and LLMs) love