The CBOT language is very close in structure and syntax to C++ and Java. It has been adapted for the specific
purposes of Colobot, and for an efficient pedagogical approach.
This language is made up of instructions (see below), blocks, functions, classes, variables, arrays, expressions and conditions.
Instructions[]
In the legacy versions of the program editor, an instruction in the CBOT language is always displayed on an orange background. If an instruction doesn't have an orange background, this means that it has been misspelled. Instruction names are always written in lower case.
In Gold Edition the program editor changes the text color of a syntax, whereas before the syntax would be highlighted with a color representative of the type.
Types in the CBOT language[]
The type of a variable appears with a green background or highlight.
int |
float |
bool |
string |
point |
object |
void |
Constants[]
Constants, like categories, are displayed with a red background or highlight.
Instructions in the CBOT language[]
Instructions will be displayed with a blue background or highlight.
extern | Indicate the main function |
if | Choice structure |
else if | Consequence of if and else syntax, alternative if |
else | Alternative choice structure |
for | Loop structure |
while | Control structure |
do | Control structure |
break | Exit from a loop |
continue | Continues the loop |
return | Exit from a function |
sizeof | Size of an array |
do ... while[]
You can have do ... while loops
.
do { // things } while (stuff());
Operators in the CBOT language[]
Operators, like instructions, will be displayed with a blue background or highlight.
+ | addition |
- | subtraction |
* | multiplication |
/ | division |
% | modulus (only for int type) |
or | Boolean or with short-circuiting |
and | Boolean and with short-circuiting |
not | Boolean not |
== | Equal |
!= | Not equal |
> | Greater than |
< | Less than |
>= | Greater than or equal to |
<= | Less than or equal to |
? : | The ternary operator . |
Specific instructions for bots[]
These instructions will appear with an amber background or highlight.
radar | Object detection |
search | Object detection |
direction | Calculates a rotation angle |
distance | Calculates a distance |
distance2d | Calculates a distance |
wait | Waits |
move | Moves forward or backward |
turn | Turns |
goto | Goes to a given position |
motor | Direct motor control |
jet | Direct jet engine control |
message | Displays a message |
retobject | Returns an object from array |
errmode | Error treatment control |
abstime | Returns the absolute time |
ipf | Sets execution speed |
pendown | Begin leaving a trail behind the bot |
penup | Stop leaving a trail behind the bot |
penwidth | Change the trail's width |
pencolor | Change the trail's height |
Instructions about topology[]
space | Calculates a free space |
topo | Returns the altitude of a point |
flatground | Returns radius of a flat area |
Instructions specific to some bots[]
grab | Picks up an object |
drop | Puts down an object |
sniff | Sounds the subsoil |
thump | Overturns alien insects |
recycle | Recycles a derelict object |
shield | Extends or withdraws the shield |
fire | Fires the cannon |
aim | Vertical angle of the cannon |
build | Constructs a building |
Specific instructions for exchange posts[]
receive | Receives information |
send | Sends new information |
testinfo | Tests if information exists |
deleteinfo | Deletes existing information |
Specific instructions for classes[]
class | Class declararion |
public | Declares a public function |
private | Declares a private class member |
static | Declares a static class member |
synchronized | Prevents simultaneous execution |
new | Creates a new instance |
this | Reference to the current instance |
extends | Extends a class |
super | Grants access to the parent class |
Specific instructions for strings[]
strlen | Gets string length |
strleft | Extracts left part |
strright | Extracts right part |
strmid | Extracts center part |
strfind | Finds a substring |
strval | Converts string to number |
strupper | Converts to upper case |
strlower | Converts to lower case |
Mathematical Functions[]
Like instructions, the mathematical functions will be shown with an amber background or highlight.
abs(value) | absolute value of an argument |
sin(angle) | sine |
cos(angle) | cosine |
tan(angle) | tangent |
asin(value) | arcsine |
acos(value) | arccosine |
atan(value) | arctangent |
sqrt(value) | square root |
pow(x, y) | x to the power y () |
rand() | random number in range between 0 and 1 |
Specific instructions for files[]
Like instructions for bots, file instructions will appear with an amber background or highlight.
open | Opens a file |
close | Closes a file |
writeln | Writes line to a file |
readln | Reads line from a file |
eof | Tests if end of file |
deletefile | Deletes a file |
Tricks and notes[]
See what happens when you try these.[]
Some functions to mess around with and see what they do (if they even work):
produce - Create a bot, building, or object. cmdline - Seems similar to Python's sys.argv. Used by aliens, but probably useless for player-made robots. Called with a single int. See colobot/data/ai/lady01.txt for an example. ismovie - Detects if a cutscene is playing. repeat - Repeats code, does not currently work. drive - (?)
Object Properties[]
All objects have at least some of the following properties:
- object.category - this is probably so you can do stuff like
target.category == AlienAnt
- object.position - position in x/y of the object
- object.orientation - presumably yaw, all angles are in degrees.
- object.pitch
- object.roll
- object.energyLevel - the amount of energy left in the battery, from 1 to 0. Float. May work only on batteries. For robots try robot.energyCell.energyLevel
- object.shieldLevel
- object.temperature - temperature of the jet engine. 0 is cool, 1 is overheated.
- object.altitude - height above the ground. Same as (object.position.z - topo(object.position)) .
- object.lifeTime - time since creation of the object. Float. In seconds.
- object.energyCell - the object in a robot's battery holder, or none if there's nothing there.
- object.load - the entity that the object is carrying, if it's a grabber or wasp.
- object.dead - whether the object is dead/dying or not (bool).
- object.busy - test if an object is busy.
- object.factory - instruct a bot factory to create a new bot
- object.research - Instructs a research center to perform a research program.
- object.takeoff - Instructs the spaceship to take off.
Robot Attributes[]
- You can get the thing a grabber is holding with
this.load
. It'll probably benull
if there's nothing being held. - You can get the entity in the battery slot with
this.energyCell
.
Context Assignment[]
It's possible to have a variable assignment inside of another context, like in C. For example:
extern void object::Main() { object target; while ((target = radar()) != null) { // do things } }
Note the second parentheses. This example is the equivalent of running:
extern void object::Main() { object target = radar(); while (target != null) { // do things target = radar(); } }
Limitations[]
You can't use array literals. This won't work:
object enemy = radar({AlienAnt, AlienSpider});
Instead, you need to do:
object[] enemyClasses = {AlienAnt, AlienSpider}; object enemy = radar(enemyClasses);
There's no polymorphism in CBOT, so functions need to be redefined for every type that you want to use them on. For example:
float addOne(float num) { return num + 1; } float addOne(int num) { return num + 1; }
Notes[]
- Attempting to cancel a build() function by stopping the program will cause the titanium cube to count as being used, but the physical item will still persist in the world, unable to be interacted with or destroyed in any way.
- Entering the produce(); instruction will never show a colored background in the legacy versions, and will not be represented with a colored font in Colobot: Gold Edition (as of 0.1.12-alpha).
See also[]
Types and categories.