You can create custom radio wheels to execute any CS2 commands through the radio wheel interface. This is useful for practice commands, utility binds, or quick access to frequently used settings.
Basic Concept
Custom radio wheels work by:
- Binding a key to open the radio wheel with custom labels
- Releasing the key to switch to command mode
- Pressing the key again to execute the selected command
- Releasing the key to return to label mode
This creates a two-phase toggle system where labels display first, then commands execute.
Minimal Setup
You can find the most basic set of configs to create custom radio wheels in the CS AFAP Discord Server (pinned messages in the #auto-lineup-config channel).
Discord link: discord.gg/cs-as-fast-as-possible-992407294866370681
Creating a Custom Radio Wheel
Create the keybind
In your autoexec or custom config, create a two-phase bind:bind J +wheel_1 // Keybind to custom wheel_1
alias +wheel_1 "exec CustomRadio/radio_labels" // Call custom text
alias -wheel_1 "+radialradio; bind J +wheel_2"
alias +wheel_2 "exec CustomRadio/radio_cmd" // Call custom commands
alias -wheel_2 "-radialradio; bind J +wheel_1"
Create label file
Create a new config file: CustomRadio/radio_labels.cfgThis file defines what text appears on each radio tile.
Create command file
Create a new config file: CustomRadio/radio_cmd.cfgThis file defines what commands execute when you select each tile.
Create language labels
Add text labels to csgo/resource/platform_english.txtThese define the actual text that appears on radio tiles.
Step 1: The Keybind Structure
The two-phase bind switches between showing labels and executing commands:
bind J +wheel_1 // Initial bind
alias +wheel_1 "exec CustomRadio/radio_labels" // Phase 1: Show labels
alias -wheel_1 "+radialradio; bind J +wheel_2" // Open wheel, switch to phase 2
alias +wheel_2 "exec CustomRadio/radio_cmd" // Phase 2: Execute commands
alias -wheel_2 "-radialradio; bind J +wheel_1" // Close wheel, back to phase 1
How It Works
- Press J: Executes
+wheel_1 → loads label config
- Release J: Executes
-wheel_1 → opens radio wheel, rebinds J to phase 2
- Press J again: Executes
+wheel_2 → loads command config, executes selected tile
- Release J: Executes
-wheel_2 → closes radio wheel, rebinds J back to phase 1
Step 2: Create Label Config
Create CustomRadio/radio_labels.cfg to define radio tile labels:
// CustomRadio/radio_labels.cfg
cl_radial_radio_tab_0_text_1 "#CFG_NOCLIP"
cl_radial_radio_tab_0_text_2 "#CFG_GOD_MODE"
cl_radial_radio_tab_0_text_3 "#CFG_GIVE_SMOKES"
cl_radial_radio_tab_0_text_4 ""
cl_radial_radio_tab_0_text_5 ""
cl_radial_radio_tab_0_text_6 ""
cl_radial_radio_tab_0_text_7 "#CFG_RESTART_ROUND"
cl_radial_radio_tab_0_text_8 "#CFG_INFINITE_AMMO"
Radio Tile Numbers
Tiles are numbered 1-8 in a circular pattern:
Tab Numbers
tab_0: Primary wheel (default)
tab_1: Secondary wheel (accessible via scroll wheel)
tab_2: Tertiary wheel (accessible via scroll wheel)
Step 3: Create Command Config
Create CustomRadio/radio_cmd.cfg to define what each tile executes:
// CustomRadio/radio_cmd.cfg
cl_radial_radio_tab_0_text_1 cmd";toggle_noclip;
cl_radial_radio_tab_0_text_2 cmd";god;
cl_radial_radio_tab_0_text_3 cmd";give weapon_smokegrenade;
cl_radial_radio_tab_0_text_4 ""
cl_radial_radio_tab_0_text_5 ""
cl_radial_radio_tab_0_text_6 ""
cl_radial_radio_tab_0_text_7 cmd";mp_restartgame 1;
cl_radial_radio_tab_0_text_8 cmd";toggle_infinite_ammo;
Command Syntax
cl_radial_radio_tab_X_text_Y cmd";[commands];
Important rules:
- Must start with
cmd";
- Must end with
;
- Commands are separated by
;
- Cannot contain
" characters after cmd";
- Tile numbers must match between label and command files
The command line MUST end with a semicolon ; or it will not work.
Step 4: Create Language Labels
Add labels to csgo/resource/platform_english.txt:
"CFG_NOCLIP" "NOCLIP\n without HUD\n \n \n \n \n "
"CFG_GOD_MODE" "God Mode\n Toggle\n \n \n \n \n "
"CFG_GIVE_SMOKES" "Give\n Smoke Grenade\n \n \n \n \n "
"CFG_RESTART_ROUND" "Restart\n Round\n \n \n \n \n "
"CFG_INFINITE_AMMO" "Infinite\n Ammo\n \n \n \n \n "
- Use
\n for line breaks
- Add extra
\n lines to fill the radio tile (usually 6-7 total lines)
- Add a trailing space on the last line
- Reference labels in config with
# prefix: "#CFG_NOCLIP"
Changes to platform_english.txt require a full game restart to take effect.
Complete Example: Practice Mode Wheel
Here’s a complete example for a practice mode radio wheel:
In your autoexec.cfg
// Practice wheel keybind
bind P +practice_wheel
alias +practice_wheel "exec CustomRadio/practice_labels"
alias -practice_wheel "+radialradio; bind P +practice_wheel_2"
alias +practice_wheel_2 "exec CustomRadio/practice_cmd"
alias -practice_wheel_2 "-radialradio; bind P +practice_wheel"
CustomRadio/practice_labels.cfg
cl_radial_radio_tab_0_text_1 "#CFG_NOCLIP"
cl_radial_radio_tab_0_text_2 "#CFG_GIVE_UTIL"
cl_radial_radio_tab_0_text_3 "#CFG_RESTART"
cl_radial_radio_tab_0_text_4 "#CFG_BOT_PLACE"
cl_radial_radio_tab_0_text_5 "#CFG_SHOW_IMPACTS"
cl_radial_radio_tab_0_text_6 "#CFG_RETHROW"
cl_radial_radio_tab_0_text_7 "#CFG_SAVE_POS"
cl_radial_radio_tab_0_text_8 "#CFG_LOAD_POS"
CustomRadio/practice_cmd.cfg
cl_radial_radio_tab_0_text_1 cmd";noclip;toggle cl_drawhud 0 1;toggle r_drawviewmodel 0 1;
cl_radial_radio_tab_0_text_2 cmd";give_full_utility;
cl_radial_radio_tab_0_text_3 cmd";mp_restartgame 1;
cl_radial_radio_tab_0_text_4 cmd";bot_place;
cl_radial_radio_tab_0_text_5 cmd";toggle sv_showimpacts 1 0;
cl_radial_radio_tab_0_text_6 cmd";rethrow_last_nade;
cl_radial_radio_tab_0_text_7 cmd";save_current_position;
cl_radial_radio_tab_0_text_8 cmd";load_saved_position;
"CFG_NOCLIP" "NOCLIP\n Toggle\n \n \n \n \n "
"CFG_GIVE_UTIL" "Give\n Full Utility\n \n \n \n \n "
"CFG_RESTART" "Restart\n Game\n \n \n \n \n "
"CFG_BOT_PLACE" "Place\n Bot Here\n \n \n \n \n "
"CFG_SHOW_IMPACTS" "Show\n Impacts\n \n \n \n \n "
"CFG_RETHROW" "Rethrow\n Last Nade\n \n \n \n \n "
"CFG_SAVE_POS" "Save\n Position\n \n \n \n \n "
"CFG_LOAD_POS" "Load\n Position\n \n \n \n \n "
Using Aliases for Complex Commands
If you need to use " characters in your commands, create an alias in your autoexec:
In autoexec.cfg
alias give_full_utility "give weapon_smokegrenade; give weapon_flashbang; give weapon_hegrenade; give weapon_molotov; give weapon_flashbang"
alias rethrow_last_nade "sv_rethrow_last_grenade"
alias save_current_position "exec practice/save_pos"
alias load_saved_position "exec practice/load_pos"
In CustomRadio/practice_cmd.cfg
cl_radial_radio_tab_0_text_2 cmd";give_full_utility;
cl_radial_radio_tab_0_text_6 cmd";rethrow_last_nade;
cl_radial_radio_tab_0_text_7 cmd";save_current_position;
cl_radial_radio_tab_0_text_8 cmd";load_saved_position;
This allows you to call complex commands with quotes without breaking the radio wheel syntax.
Advanced: Multiple Wheels
You can create multiple independent radio wheels on different keys:
// Practice wheel on P
bind P +practice_wheel
alias +practice_wheel "exec CustomRadio/practice_labels"
alias -practice_wheel "+radialradio; bind P +practice_wheel_2"
alias +practice_wheel_2 "exec CustomRadio/practice_cmd"
alias -practice_wheel_2 "-radialradio; bind P +practice_wheel"
// Utility wheel on U
bind U +utility_wheel
alias +utility_wheel "exec CustomRadio/utility_labels"
alias -utility_wheel "+radialradio; bind U +utility_wheel_2"
alias +utility_wheel_2 "exec CustomRadio/utility_cmd"
alias -utility_wheel_2 "-radialradio; bind U +utility_wheel"
Each wheel has its own label and command configs.
Troubleshooting
Radio tiles are blank
Problem: No text appears on radio tiles.
Solution:
- Check that labels exist in
platform_english.txt
- Verify label names match (with
# prefix in label config)
- Restart the game (required for language file changes)
Commands don’t execute
Problem: Selecting a tile does nothing.
Solution:
- Verify command syntax ends with
;
- Check for
" characters after cmd"; (not allowed)
- Use aliases in autoexec for complex commands with quotes
- Ensure tile numbers match between labels and commands
Radio wheel doesn’t open
Problem: Pressing the key doesn’t show the radio wheel.
Solution:
- Check the bind syntax in your autoexec
- Verify
+radialradio and -radialradio are in the correct aliases
- Make sure config files exist in the correct paths
Wrong tile executes
Problem: Clicking on one tile executes a different command.
Solution:
- Verify tile numbers match in both label and command configs
- Check for windowed mode cursor displacement issues
- Make sure you’re using the same tab number (
tab_0, tab_1, etc.)
See Also