Scripting in Counter-Strike 1.6: Alias, Bind, Wait

Table of Contents

Introduction

Counter-Strike 1.6 scripting is simple but powerful: everything relies on three console commands - alias, bind, and wait. These tools were part of the GoldSrc engine from the very beginning, and in CS 1.6 they became the building blocks players used to create scripts of any complexity.

In my CS2 scripting guide I explained how modern helpers like toggle, bindtoggle, and incrementvar make configs cleaner and easier to manage. None of these commands existed in CS 1.6 when it released in 2003, but that never stopped players. With clever use of alias, the community learned to replicate the same behavior and achieve similar results.

In this guide I will explain how CS 1.6 scripting actually works and how you can write your own scripts step by step. Understanding how alias, bind, and wait interact allows you to automate repetitive actions, organize your config more cleanly, and build scripts tailored to your own playstyle - from simple binds to things like a High-Jump, Double-Duck, or Burst-Fire scripts, and many other automation tricks.

The Three Core Commands

Counter-Strike 1.6 illustration showing core scripting commands Bind, Alias, and Wait in a circular flow with neon green glow

Scripting in Counter-Strike 1.6 appears complex at first, but the underlying system is actually quite simple. Most scripts are built by combining a few core console commands with the standard commands already available in the GoldSrc engine. Whether it’s weapon switching, automated actions, or movement tricks, all of it comes down to how these commands are structured and executed together.

Bind - Assigning Actions to Keys

The bind command is the simplest and most familiar. It tells the game to connect a key on your keyboard or mouse to a specific action. The syntax looks like this:

bind "key" "command1"
bind "key" "command1; command2; command3"
For example:
bind "MWHEELUP" "+jump"
bind "F1" "buy awp; buy vesthelm; buy defuser"

The first bind makes you jump with the mouse wheel. The second creates a buy bind that instantly purchases an AWP, armor with helmet, and a defuse kit when you press F1.

While any command or alias can be executed directly from the console, the bind command is what makes scripting practical. It connects your scripts to specific keys, so they can be used instantly during gameplay without opening the console. In other words, bind is what transforms a script from a line of text into an actual control input. For a deeper look at how binds work, check out Counter-Strike 2 Useful Binds - Full Guide 2026 - despite the title, everything explained there also applies to Counter-Strike 1.6.

Alias - Creating Custom Commands

The alias command is where scripting truly begins. Alias lets you create your own command name and assign it to one or more actions or sequences of commands. You can execute an alias directly from the console, but in practice aliases are almost always combined with bind so they can be triggered instantly during gameplay.

Once you define an alias, you can bind it to a key just like any other command. Syntax:

alias alias_name "command1"
alias alias_name "command1; command2; command3"
For example:
alias "dd" "disconnect"
alias "awp" "buy awp; buy vesthelm; buy defuser"
bind "z" "dd"
bind "c" "awp"

The first simple and useful alias allows you to disconnect from the server without entering the entire "disconnect" command. The second one creates an alias that buys an AWP, armor with a helmet, and a defuse kit.

Syntax Tips

  • Quotation marks are required if you use a chain of commands.
  • For a single command, quotes are optional but preferred.
  • In command chains, each command with its value is separated by a semicolon.
alias "awp" buy awp; buy vesthelm; buy defuser   Incorrect
alias awp "buy awp; buy vesthelm; buy defuser"   Correct
alias qq quit                                    Correct
alias qq "quit"                                  Correct
alias "qq" quit                                  Correct
alias "qq" "quit"                                Correct and Preferred

It is generally recommended to always use quotes. This way your scripts stay clear and easy to read, especially when they become large and complex.

Alias is also how players in CS 1.6 recreated functionality that later appeared as built-in commands in CS:GO and CS2. For example, there is no toggle in 1.6, but you can write an alias loop that simulates a toggle. This will be demonstrated later in the Types of Scripts section.

Wait - Timing Between Commands

The wait command is the most unique part of scripting in CS 1.6. Each wait pauses the execution of a script for one frame. Since the length of a frame depends on your FPS (fps_max), the duration of the pause changes with performance. At 100 FPS, one wait equals about 10 milliseconds; at 20 FPS, it is five times longer.

Example:

alias +qs "+attack2; wait; +attack; wait; -attack; -attack2"
alias -qs ""
bind "mouse3" "+qs"

This is a simple quick-scope script for the AWP. It scopes in with +attack2, waits one frame, fires with +attack, and then instantly unscopes. Without wait, all of these commands would trigger at the same time and nothing would work.

Because wait is frame-based, scripts behave differently at different FPS values. That’s why some players carefully tested their scripts with fps_max to make them consistent. Despite this limitation, wait is what makes timing-based scripts possible in CS 1.6.

WAIT vs FPS_MAX

wait = delay for one frame.

The actual duration of that frame depends on the fps_max setting:

  • fps_max 20 == 50 ms per frame
  • fps_max 100 == 10 ms per frame
  • fps_max 500 == 2 ms per frame

A script with the same number of wait commands will run at different speeds depending on the player’s FPS. To stabilize a script, you either adjust the number of waits or change the fps_max value.

Example test script (20-frames delay with w20):

alias "w2"  "wait; wait"
alias "w4"  "w2; w2"
alias "w8"  "w4; w4"
alias "w20" "w8; w8; w4"

alias "hello_20"  "fps_max 20;  w20; echo this message will appear in ~1000 ms"
alias "hello_100" "fps_max 100; w20; echo this message will appear in ~200 ms"
alias "hello_500" "fps_max 500; w20; echo this message will appear in ~40 ms"

bind "z" "hello_20"
bind "x" "hello_100"
bind "c" "hello_500"

This demonstrates that with the same delay of 20-frames, the message appears at completely different time intervals depending on fps_max.

The same principle is used for anti-recoil scripts. A basic logic looks like this:

+attack; wait; wait; wait; +lookdown; wait; -lookdown; -attack

By combining waits with +lookdown, +lookup, or horizontal view control, you can build a recoil pattern that compensates for your rifle’s spray.

Types of Scripts

Counter-Strike 1.6 illustration of script types - Alias Scripts, Press & Release Scripts, and Cycle Scripts - with CT and T agents beside a retro PC on a Dust2 - style background

Not all scripts in Counter-Strike 1.6 work the same way. Some are simple one-liners, others are layered chains that affect multiple parts of the game. Understanding the main types of scripts helps you recognize what is useful, how to structure them, and where they can be applied.

Alias Scripts

Alias scripts are the foundation of CS 1.6 scripting. They let you package several commands under a custom name and then call them with a single key. Unlike a plain bind, which just executes one sequence, aliases can be chained together and reused inside other aliases.

alias "com1" "cl_showfps 1; sensitivity 2; fps_max 499"
alias "com2" "echo FPS counter is activated; bind x fps_max 0"
alias "com3" "com1; com2"
bind "c" "com3"

How this script works: com1 enables the FPS counter, changes sensitivity to 2, and sets the FPS cap to 499. com2 prints a console message and rebinds the X key to remove the FPS cap. com3 calls both com1 and com2 in sequence.

Pressing C now executes all of the above at once. This is a small combo where one alias triggers others, and one of them even rebinds another key on the fly.

Press & Release Scripts

These scripts activate when you press a key and stop when you release it. They use the standard +action and -action structure, but with alias you can define what happens on press and on release.

alias "+graph" "net_graph 1"
alias "-graph" "net_graph 0"
bind "c" "+graph"

When you press and hold C, the net_graph is enabled. When you release the key, it disappears again. This style of scripting is useful for temporary overlays or quick checks that you don’t want on your screen all the time.

Cycle Scripts

Cycle scripts rotate through multiple values each time you press the same key. In CS 1.6 this is often used to toggle net_graph modes or different HUD states.

alias "graph1" "net_graph 1; bind v graph2"
alias "graph2" "net_graph 2; bind v graph3"
alias "graph3" "net_graph 3; bind v graph0"
alias "graph0" "net_graph 0; bind v graph1"
bind "v" "graph1"

Every press of V switches to the next net_graph mode: 1 -> 2 -> 3 -> off -> back to 1. This approach is handy for rotating through multiple display settings with a single key.

Meta Scripts

Meta scripts are more advanced systems that combine multiple aliases, binds, and cycles into larger structures. For example, you can build a toggle that temporarily replaces a key’s function with a cycle script and then restores it.

alias "next" "graph1"
alias "graph1" "net_graph 1; alias next graph2"
alias "graph2" "net_graph 2; alias next graph3"
alias "graph3" "net_graph 3; alias next graph0"
alias "graph0" "net_graph 0; alias next graph1"
alias "toggle_on"  "bind mouse2 next; echo Net_graph cycle ON; alias toggle toggle_off"
alias "toggle_off" "bind mouse2 +attack2; echo Net_graph cycle OFF; alias toggle toggle_on"
bind "c" "toggle_on"

Here, C acts as a toggle. On the first press, it rebinds mouse2 to cycle through net_graph values. On the next press, it restores mouse2 to its normal function (+attack2). The echo commands give console feedback so you always know which state you are in.

Scripting Reference - Movement & Basic Inputs

These are the basic game actions you can use inside aliases and scripts. Commands with a + prefix mean something you press and hold (like +jump), and they usually need to be released with the matching - command (-jump). Plain commands without + are instant actions that trigger once when called.

  • +forward / -forward - move forward
  • +back / -back - move backward
  • +moveleft / -moveleft - strafe left
  • +moveright / -moveright - strafe right
  • +left / -left - turn left (used in some scripts)
  • +right / -right - turn right
  • +jump / -jump - jump / release jump
  • +duck / -duck - crouch / release crouch
  • +use / -use - interact with objects (doors, hostages, bombs)
  • +attack / -attack - primary fire (or knife attack)
  • +attack2 / -attack2 - secondary fire (scope, alt-fire)
  • +reload / -reload - reload weapon

Action & Combat Helpers

These are commands and utility actions used frequently in combat scripts and quick macros.

  • drop - drop current weapon
  • lastinv - switch to last used weapon
  • invprev - previous weapon in the inventory
  • invnext - next weapon in the inventory
  • cancelselect - cancel weapon selection
  • +showscores - show scoreboard while held
  • say - chat
  • say_team - team chat
  • radio1, radio2, radio3 - radio command groups for quick audio calls

Slot / Inventory Shortcuts

Slots map to inventory positions and make scripts that change gear predictable.

  • slot1 - primary weapon (M4A1, AK-47, AWP, etc)
  • slot2 - secondary / pistol (Deagle, Glock, USP, etc)
  • slot3 - knife
  • slot4 - grenades (cycles grenades)
  • slot5 - bomb/C4 or special
  • slot6slot10 - additional slots present in some setups
  • buy, buyammo1, buyammo2, buyequip - buy-menu shortcuts

Weapon & Item Names

Use these exact names when equipping weapons in scripts.

Pistols: weapon_p228, weapon_glock18, weapon_deagle, weapon_usp, weapon_fiveseven, weapon_elite, weapon_fiveseven

Rifles: weapon_ak47, weapon_m4a1, weapon_sg552, weapon_sg550, weapon_g3sg1, weapon_galil, weapon_famas, weapon_aug, weapon_scout, weapon_awp

SMGs: weapon_mac10, weapon_tmp, weapon_mp5navy, weapon_p90, weapon_ump45

Shotguns: weapon_xm1014, weapon_m3, weapon_m249

Knife / special: weapon_knife, weapon_shield

Grenades / utilities: weapon_hegrenade, weapon_flashbang, weapon_smokegrenade, weapon_c4

Items / gear: item_kevlar (vest), item_assaultsuit (vest + helmet), item_thighpack (defuse kit), item_nvg (nightvision)

Tip: many scripters prefer weapon_flashbang (short form) since it’s less verbose than use weapon_flashbang (long form), though both work.

Conclusion

Scripting in Counter-Strike 1.6 comes down to three commands: bind, alias, and wait. With just these, players can build anything from simple buy binds to complex systems that control timing and behavior. Unlike newer versions of Counter-Strike, CS 1.6 has no built-in helpers like toggle or incrementvar, but careful use of alias and wait can recreate the same functionality.

The key is clarity and consistency. Always use quotes for readability, keep your configs organized, and test how wait behaves under different fps_max values. Good scripts reduce routine inputs and let you focus on decision-making, aim, and strategy rather than typing commands.

Alias, Bind, Wait in CS 1.6 FAQ

A glowing 'FAQ' displayed on a futuristic holographic panel, surrounded by floating question marks and digital circuitry within a cosmic, sci-fi environment
Does scripting in CS 1.6 count as cheating?

No. Scripts in CS 1.6 use only built-in console commands. They automate routine inputs but do not give abilities outside the game’s rules.

What is the difference between bind and alias?

bind connects an action to a key, while alias lets you create custom commands or chains of actions. In practice, alias is usually combined with bind to make complex scripts usable in matches.

Does fps_max affect wait?

Yes. Each wait equals one frame, so the actual delay depends on your FPS. At fps_max 100 one wait is ~10 ms, while at fps_max 20 it is ~50 ms.

Why does my script not work the same on another PC?

If the other PC has different FPS, resolution, or config files, timing-sensitive scripts will behave differently. Always check your fps_max and test waits before using.

Can I chain multiple aliases together?

Yes. An alias can call another alias, and this is how cycle scripts and meta scripts are built. Just be careful to avoid infinite loops.

Continue Reading

Counter-Strike 1.6 scoreboard with a player using an invisible nickname highlighted in the TAB menu
Invisible Nick in Counter-Strike 1.6 – Full Guide

Invisible Nick in Counter-Strike 1.6 – Full Guide Table of Contents Introduction Nicknames in Counter-Strike 1.6 appear everywhere during a game: in the scoreboard, in chat, in the killfeed, and above the player model. It’s the main way other players recognize you on a server. But CS 1.6 is an

Read More
Leave a Reply

Your email address will not be published. Required fields are marked *