AssaultCube 1.2 Guide

AssaultCube is a free, open-source shooter based on the Cube engine and taking place in realistic environments. It includes single and multi-player, as well as various modes which can be played over a wide range of maps. The game is very lightweight and runs well on old hardware.

This guide starts by overviewing AssaultCube, and then proceeding to showing you how to configure it, make scripts and start your own dedicated server. Keep in mind that this is mostly a tutorial on how to configure and tweak AC to your liking, and merely an overview of the gameplay, not a guide on how to play it. Below is the table of contents, you can click on any link to jump to the respective section.

Useful Scripts
Starting a Dedicated Server

AssaultCube is a first-person shooter taking place over realistic environments. AC is completely free and open-source, and comes with an amazing size of only ~ 50MB. It is available for Linux, Windows and OS X.
AC comes with over 36 maps, from which 10 shipped in version 1.2, like ac_avenue, ac_stellar or ac_venison. Some popular maps include ac_desert, ac_shine, ac_gothic or ac_douze. More maps created by the community can be downloaded from http://ac-akimbo.net/.

Version 1.2 was released on October 9, 2013, after three years of development, landing some nice new features. There are still some issues with 1.2.0.x, a few crashes, a problem with the /showscores command, however these will hopefully get fixed in future incremental releases.
The gameplay approach is a classic one: you basically run around trying to kill enemies. When not a FFA mode, there are two teams, RVSF and CLA.

Trickjumps in AC are a little bit different, in that you will have to shoot the ground with your weapon in order to jump even farther away. All weapons give a small boost in speed if used properly, but most effective are the Assault Rifle and the Submachine Gun. There are some really skilled players out there, very good at doing this.
Single-player & Multi-player
AC features both single-player with bots and online multi-player.
Game Modes
There are several game modes available. Here is a brief description for each of them:

DM (Deathmatch) and TDM (Team Deathmatch)
You get weapons and grenades and have to kill any opponent (FFA). TDM is the same as DM, but with teams.

OSOK (One Shot One Kill) and TOSOK (Team One Shot One Kill)
This mode is similar to Instagib from other games. You start with 1 HP and a sniper rifle and have to kill any opponents by hitting them once. TOSOK is the same as OSOK, but with teams. TOSOK is probably the most popular mode for AssaultCube, simple, yet so addictive.

PF (Pistol Frenzy) and TPF (Team Pistol Frenzy)
You get a pistol, grenades and a knife and have to kill any opponent (FFA). TPF is the same as PF, but with teams.

LSS (Last Swiss Standing) and TLSS (Team Last Swiss Standing)
You get a knife and grenades and have to kill any opponent (FFA). TLSS is the same as LSS, but with teams.

TS (Team Survivor)
The team of the last player who survives the massacre wins the game.

The last player who survives wins the game.

CTF (Capture the Flag)
This is the popular Capture the Flag mode. There are two teams, and your team has to capture the enemy flag and bring it to your own flag to score. The team with most flags captured in the end wins.

KTF (Keep the Flag) and TKTF (Team Keep the Flag)
There is only one flag and everybody battles for it. Every 15 seconds that you keep the flag you will score.

HTF (Hunt the Flag)
There are two teams, each trying to kill the enemy flag bearer while your own flag is taken by your own team.
The settings menu allows you to configure pretty much any major aspect of AssaultCube, including resolution, graphics details, sound settings and player settings. I made a detailed section about scripting and configuring AC which you can read below (or click here).
Starting a New Game
You can play AC in single-player mode with bots, however the real fun is playing online. To get online, press Escape to go to the main menu, then select Multiplayer and hit Enter. A list of online games will be shown – the server browser. This shows you the name and IP of the available servers that you can join, the total amount of currently playing users and the number of maximum available slots. Navigate with the arrows to a server that is not empty and hit Enter to connect to it. Notice that servers which are listed in red are private and require a password to join.
The HUD (Heads Up Display) is located at the bottom side of the screen and shows information about remaining health, status of weapons ammo and grenades. On the top-right side of the screen there is the minimap, showing a preview of the current map and your location on it. You can also press ALT to see a bigger version of the minimap. The minimap also shows the location of your teammates.

The image below shows the HUD at the bottom, the minimap at the top-right side and the recent events status at the top-left side:
The recent events status show who killed who, chat messages, as well as a timely notification about the time remaining on the map.

Below is the semi-transparent minimap when pressing ALT:
Scoreboard Table
By default, you can open the scoreboard by pressing TAB. In 1.2 there seems to be a bug though on some systems where the scoreboard isn’t displayed, I provided a fix here. So, let’s have a look at what every column in the scoreboard means.
The first line lists the game mode (in this case TOSOK) as well as the current map and time left on the map.

The frags column tells us how many frags players have, that is, how many kills they did. For each kill you get a frag, with the exception of knife kills, which will give you two kills. The total number of frags per team is also displayed.

The deaths column shows how many times the respective player died. You can calculate the Kills/Deaths ratio by dividing the values of the frags and deaths columns.

The score column shows the player score. This is different from the number of frags for various reasons. For example, in CTF you get points for scoring with the flag.

The PJ/Ping column shows the player jump delay in milliseconds as well as the actual ping (lag) the player has relatively to the server.

The cn column lists the player client number. This is unique for each player and given when the player joins the server. You can use the client number to kick/ban players or to send private messages. Since it’s a unique ID, you can also use this in scripting.

Finally, the last column lists the nicknames of the players currently connected to the server.

The last line shows the IP, port and the name of the current server.
In AssaultCube, hitting any part of the body will drain the same amount of HP, no matter if it’s a headshot or a body shot. However, whenever you kill an enemy with a headshot, this is mentioned in the console. You can headshot your enemies only with the Sniper Rifle. Killing an enemy with the knife will give you 2 frags.

Below is an overview of the available weapons. I included screenshots and data about the damage they do, ammo and clip capacity, as well as general information about each weapon.

MTP-57 Assault Rifle
Damage (close range): 22
Damage (far range): 17
Ammo per clip: 20
Maximum clips: 4
Default bind: 1
The assault rifle (or AR for short) has a rather big recoil and good firepower. Since the recoil is very high, it is particularly useful in close-range combats. It’s the most used gun for jumping higher by aiming at the ground. It can also be used successfully to get a speed edge, for example in CTF modes, when running away with the enemy flag.

does more damage than the pistol


has a high recoil
not very good for far-range combats

A-ARD/10 Submachine Gun
Damage (close range): 16
Ammo per clip: 30
Maximum clips: 4
Default bind: 1
The SMG is similar to the Assault Rifle, but it deals less damage. It can also be used to get an edge in jumping and speed.
Precision Tech AD-81 Sniper Rifle
Damage: 82
Ammo per clip: 5
Maximum clips: 4
Default bind: 1
The Sniper Rifle (SR) provides a scope when you right-click, so you can see enemies far away. You can also shoot without a scope, and there are many good players out there who rarely use the scope, not even for far range. The sniper rifle is the gun used in the OSOK and TOSOK modes, where you kill your enemy with one shot.
V-19 Combat Shotgun
Damage (close range): 155
Ammo per clip: 7
Maximum clips: 4
Default bind: 1
The Combat Shotgun sprays about ten bullets each shot and it is extremely effective at close-range combat, being able to kill an enemy in one shot.
TMP-M&A Carbine
Damage (close range): 60
Ammo per clip: 10
Maximum clips: 4
Default bind: 1
The carbine can kill an enemy with two shots.
Damage (close range): 18
Ammo per clip: 10
Maximum clips: 11
Default bind: 2
The pistol can be used as a last resort when your SMG runs out of ammo or you need to reload it. It has a low damage rate at far range (only 8 HP), but at close range it will do 17 damage, so you will only need 6 shots to kill your opponent (if he’s not wearing a kevlar or helmet), just like the Assault SMG. The pistol clip capacity was increased in AC 1.2 from 8 to 10, making it a bit stronger since it will take longer to empty the clip.
Akimbo Pistols
Damage (close range): 18
Ammo per clip: 10
Maximum clips: 11
Default bind: 2
The Akimbo is available for pick-up and can’t be equipped at the start of the round. These are two pistols which fire at very great rate, depleting fast and dealing huge damage in a short amount of time. Since you will deplete your cartridge in about a second, aim carefully when using this weapon.
Damage (close range): 200
Maximum grenades: 3
Default bind: 3
Grenades can instantly kill an enemy if he is right near the grenade. Use them wisely, since they have a rather small area of effect.
Swiss Tech Combat Blade DR-88
Damage: 50
Default bind: 4
Knives need two shots to kill an enemy in Deathmatch. So if you are skilled in sneaking around, you could do a good job with a knife. Killing an enemy with a knife counts as two frags. In OSOK or TOSOK, a knife hit will kill an enemy instantly (since all players have 1 HP in these modes). The splash sound and effect when knifing down an enemy is quite addictive 😉
Armor: 25
The helmet provides +25 Armor, reducing damage.
Armor: 50
The vest provides +50 Armor.
Default Key Bindings
The following screenshots shows the default key binds:
Here is the list of the most important shortcuts:

Forwards: W
Left: A
Backwards: S
Right: D

Binding New Keys
You can bind new keys to actions or even scripting aliases, or radio calls. To bind a new key, use the following command:


For example, to bind B to open the Voice Com menu, you can use bind B [showmenu voicecom]. Or, to bind new movement keys (like ESDF instead of the default WASD), you could use this:

bind E [forward]
bind S [left]
bind D [backward]
bind F [right]

Here is a key bound to an alias located in the autoexec.cfg file:

fps = 0
alias myfps [
if (= $fps 0) [
maxfps 28
fps = 1
echo “*** maxfps 28”
if (= $fps 1) [
maxfps 43
fps = 2
echo “*** maxfps 43”
maxfps 60
fps = 0
echo “*** maxfps 60”
bind O [myfps]

More about aliases and scripting is explained in a later section.
The complete list can be found here. I will only mention the commands which I find most important, as they come listed in the in-game help.

fov N
N – The FOV value (min 75/max 120/default 90)
Sets the field of view (fov).
fov 110
The fov sets how much of the environment you can see. The greater it is, the more you will be able to see, but things will also appear more distant. Take a look at the following two screenshots to see the difference of the same frame using fov 100 and fov 120:
fog N
N – The fog distance (64…1024, default is 180)
Sets the fog distance.
fog 512
The fog value sets at what distance things will start to appear foggy. The default value of 180 is OK for most maps, however this value may need to be increased for maps with wide areas in range. Notice that the default value of 180 is overriden on a per map basis by the map’s respective .cfg file. You can use the mapstartalways and checkinit mapstartalways to override the values specified in the .cfg file. Have a look at the following screenshots to see the difference between fog 180 and fog 1024 (maximum):
Take a “clean” screenshot with no HUD items.
This command can be used to take screenshots without the HUD, current weapon, crosshair, minimap or console messages. The result will be the current frame. See the following two screenshots to see the difference between a normal screenshot taken using the screenshot command and a cleanshot screenshot:
maxfps V
V – Maximum FPS (0 disables maxfps min 25 or 0/max 200/default 200)
Limits the FPS (frames per second) of the game.
fpsmax 43
You can use it to cap your fps to a lower value on a slow system so your FPS will not increase and drop suddenly making it harder to play and not pleasing to the eye.

fullconsize V
V – Number of text lines (min 0/max 100/default 40)
Sets the number of text lines on the F11 history display.
fullconsize 92
This commands sets the number of lines the console will display. See the difference between fullconsize 40 (the default) and fullconsize 92:
screenshotscale S
S – Scale (min 0.1/max 1.0/default 1.0)
Scales screenshots by a given factor before saving. 1 = original size, 0.5 = half size, etc.
screenshotscale 0.2
This is very useful if you want your screenshots to be automatically resized. Unfortunately there seems to be no command to scale screenshots by specifying pixel size.

CubeScript is the scripting language for AssaultCube, and it is almost like a complete programming language (obviously, created for different purposes than regular programming languages). CubeScript offers some powerful features which help configure AC in many ways and write some pretty neat scripts which may come in handy in-game. Here is a complete reference to CubeScript, but I will focus only on the important stuff here.

Writing scripts for AssaultCube involves just a bit of programming knowledge. However, if you find the following hard to understand you can copy/paste scripts inside your configuration files, just make sure the source is reliable. Scripting gives access to commands which can be harmful if not properly used.
The ALIAS Command
alias [name] [command(s)]

AC supports aliases as well. Aliases are shortcuts to commands created to ease your typing. You can create your custom aliases. For example:
alias hello [say “Hello there my fellow cubers!”]
Now all you have to do is type /hello and the message will be displayed, and you won’t have to type all that text every time you want to greet someone. Moreover, you can bind it to a key:
bind h [hello]
Now each time you press H, the hello alias will be executed, sending the greeting text to the other players.
The IF Instruction
if (cond) [true instruction(s)] [false instruction(s)]

This is the syntax of the if instruction. For example:
if ( 5 3) [echo “5 is bigger than 3”] [echo “5 is smaller than 3”]
Will output 5 is bigger than 3. Notice how the greater than operator comes first, followed by the left and right values. You can put these commands inside the autoexec.cfg file, or you can type them in-game when playing by pressing the forward slash (/) key, the default for typing commands.

Having the ability to use if instructions can be extremely useful. You can make practically whole scripts which will automatically change the behavior of the game depending on some factors. For example, you could change the brightness or the maximum fps cap depending on the currently loaded map.
The WHILE Instruction
while (cond) [instruction(s)]
You have to be careful and avoid the infinite loops, because AC freezes if the condition passed to the while conditional makes it execute forever.
Useful Scripts
Cycling Sensitivity Script
This script will cycle through four different sensitivity values when you press P, and it will echo the currently selected value.

sens = 1
alias “mysens” [ if ( = $sens 1 ) [ sensitivity 2.4; sens = 2; echo “*** sensitivity 2.4” ] [ if (= $sens 2) [ sensitivity 2.8; sens = 3; echo “*** sensitivity 2.8” ] [ if (= $sens 3) [ sensitivity 3.2; sens = 4; echo “*** sensitivity 3.2”] [ sensitivity 3.8; sens = 1; echo “*** sensitivity 3.8” ] ] ] ]
bind “P” [mysens]

Voice Radio Scripts
These are various scripts which will use the in-game audio chat messages, but custom text. For example, the following will say out loud “Nice shot”, but will print two custom messages to other players, cycling them:

ns = 1
alias “myns” [ if ( = $ns 1 ) [ voicecom niceshot “Nice shot!”; ns = 2 ] [ voicecom niceshot “Great shot!”; ns = 1 ] ]
bind KP_ENTER [myns]

So, the first time when you press KP_ENTER (Numeric Keyboard Enter), the message sent will be “Nice shot!”, and if you press it again the message will be “Great shot!”.
Sample Config File
As an example, the following is part of my configuration file:

// autoexec.cfg (AssaultCube 1.2) – Oct 19, 2013 v0.2.0 r1

bind “BACKQUOTE” [toggleconsole]

bind “E” [forward]
bind “S” [left]
bind “D” [backward]
bind “F” [right]

bind “T” [reload] // reload
bind “G” [primary] // smg
bind “W” [secondary] // pistol
bind “V” [melee] // knife
bind “A” [grenades] // grenade
bind “C” [grenades] // grenade

bind “Y” [saycommand] // global chat
bind “U” [saycommand %] // team chat

bind “B” [showmenu voicecom] // voice chat menu

bind “TAB” [showscores] // score board

bind “H” [dropflag]

bind “F9” [exec config/autoexec.cfg]
bind “KP_MULTIPLY” [ fullscreenscript; cr1366 ]
bind “F12” [screenshot]
//bind “C” [screenshot]

fullscreen 1
//maxfps 43
fpsrange 60 70
sensitivity 3.2
gamma 100.0
fov 100.0
hitsound 1
screenshottype 2

alias “cr1366” [ scr_w 1366; scr_h 768; echo “*** scr_w 1366; scr_h 768” ]
//alias “cr1024” [ scr_w 1024; scr_h 768; echo “*** scr_w 1024; scr_h 768” ]

hi = 1
alias “sayhi” [ if ( = $hi 1 ) [ hi = 2; say “Hi!” ] [ if ( = $hi 2 ) [ hi = 3; say “Hello!” ] [ hi = 1; say “Heya!” ] ] ]
bind “KP1” [sayhi]

bye = 1
alias “saybye” [ if ( = $bye 1 ) [ bye = 2; say “Bye!” ] [ if ( = $bye 2 ) [ bye = 3; say “Goodbye!” ] [ bye = 1; say “Cya!” ] ] ]
bind “KP2” [saybye]

fps = 1
alias “myfps” [ if ( = $fps 1 ) [ maxfps 28; fps = 2; echo “*** maxfps 28” ] [ if ( = $fps 2 ) [ maxfps 43; fps = 3; echo “*** maxfps 43” ] [ maxfps 60; fps = 1; echo “*** maxfps 60” ] ] ]
bind “O” [myfps]

sens = 1
alias “mysens” [ if ( = $sens 1 ) [ sensitivity 2.4; sens = 2; echo “*** sensitivity 2.4” ] [ if (= $sens 2) [ sensitivity 2.8; sens = 3; echo “*** sensitivity 2.8” ] [ if (= $sens 3) [ sensitivity 3.2; sens = 4; echo “*** sensitivity 3.2”] [ sensitivity 3.8; sens = 1; echo “*** sensitivity 3.8” ] ] ] ]
bind “P” [mysens]

bind KP_MINUS [exec config/autoexec.cfg]
bind KP0 [voicecom sorry “Sorry :(“]

gj = 1
alias “mygj” [ if ( = $gj 1 ) [ voicecom goodjobteam “Great job, team!”; gj = 2 ] [ voicecom goodjobteam “Nice work, team!”; gj = 1 ]]
bind KP_PERIOD [mygj]

ns = 1
alias “myns” [ if ( = $ns 1 ) [ voicecom niceshot “Nice shot!”; ns = 2 ] [ voicecom niceshot “Great shot!”; ns = 1 ] ]
bind KP_ENTER [myns]

bind UP [team cla]
bind DOWN [team rvsf]
bind RIGHT [team spectator; say “BRB! (I’m either smoking, drinking beer or both)”]

echo “*** exec config/autoexec.cfg”

Starting a Dedicated Server
Here is an example of how to start a dedicated server:

server.sh -x”ADMIN_PASSWORD” -n”SERVER_NAME” -o”MESSAGE_OF_THE_DAY” -c16 -r”$HOME/.assaultcube_v1.2/config/maprot.cfg” -B”$HOME/.assaultcube_v1.2/config/serverblacklist.cfg”

Replace ADMIN_PASSWORD with a password of your choosing, this will be used to have administration access to the server (by typing /setadmin 1 ADMIN_PASSWORD). Replace SERVER_NAME with the name you want your server to have, this will appear in the server browser. Change MESSAGE_OF_THE_DAY to an informative note about the server, like a greeting or a website link, this message will appear to every player who joins the server.

You can have a look at the official documentation section on starting your own AssaultCube server, as well as the command-line arguments that you can use.
Custom Maps
Custom maps can be downloaded and put inside the packages/maps/servermaps directory. Maps which are uploaded in-game by users using the sendmap command will be put inside the packages/maps/servermaps/incoming directory. Maps usually will consist of a compressed Gzip archive ending in the cgz extension, and an eventual config file ending in a cfg extension. The config file specifies variables to be used on that specific map by the client, overriding default settings. So for example if your fov variable is set to 400, but the cfg file for a specific map sets it at 280, then this value will be used, overriding your settings.

The packages/maps/servermaps directory is located inside the root installation directory, or you can create it manually inside the $HOME/.assaultcube_v1.2 folder.

There are hundreds of good community-created maps over at ac-akimbo.net, some of the more popular ones include ac_valencia, ac_duel, ac_favela, ac_savana, ac_casa2, ac_safari, bs_dust2, camper, TwinTowers.
Ubuntu 13.10 comes with AssaultCube, so to install the latest version you will have to download the archive from here, uncompress it and then run the assaultcube.sh script to start it.

CubeScript Reference

AC-AKIMBO.net – Maps, Mods, Scripts, Skymaps, Textures and Mapmodels

Cube Engine