# User:Serc

## Basic Config File

ATTENTION! This is far from being valuable information for anyone but contributors.

## Syntax

Classes could be compared to folders. There is a folder for every object in ArmA. In every folder there are files which we will call attributes. A class definition with an attribute will look like this: class name { attribute = value; }; 

There could also be an array of attributes. class name { attribute = value; attributeArray[] = {value1,value2,value3}; };

There can't be two same classnames in a config. For example class test { attribute = value; }; class test { attribute = value; }; 

will NOT work! Same goes for two definitions of an attribute in one class. class test { attribute = value; attribute = value; };

Will not work!

## Inheritance

With inheritance you can create a dependency of a object to a parent object. This saves you a lot of typing and makes it easier to maintain. A parent class is usually a generalisation. A Stryker for example is an APC and an APC is a ground vehicle. We can inherit from another class by adding : className to our class. But the class needs to be present in the config. Like here: class parentClass { attribute = value; }; class childClass : parentClass { anotherAttribue = anotherValue; };

If it is not present, we can reference it. Note the missing {}. class parentClass; class childClass : parentClass { additionalAttribute = value; };

Attributes from parent classes can easily be redefined (which is different from overwritten). class parentClass { parentAttribute = value; }; class childClass : parentClass { parentAttribute = newValue; }; 

## Commenting

### Line Comment

A line comment is initiated by // and lasts until the end of the line. Comments are ignored at runtime, so there can be anything in there, including valid code which should not be used.

//i am a comment

notCommentedAttribute = notCommentedValue; // commented

// commentedAttribute = commentedValue


### Block Comment

A block comment is initiated by /* and lasts until the next */. It can comment out multiple lines or less than a line. /* i an a comment block and it works over multiple lines until its over */

notCommentedAttribute = /* commentedValue */ notCommentedValue;

## Formatting

The layout and format is a matter of taste. The best formatting is the formatting which suits you best. It is advisable to make it as easily readable as possible by using a lot of whitespaces like linebreaks and indents. The examples 1 and 2 use a lot of whitespace but are easily readable while example 3 is remarkably shorter and much less readable. Especially with multiple attributes this gets confusing.

### Example 1

class name { attribute = value; }; 

### Example 2

class name { attribute = value; };

### Example 3

class name {attribute1 = value;};

## Preprocessor Commands

Preprocessor commands are processed before the config has been used.

### define

The command define allows you to use variables in a config. Syntax:

#define variableName value


Usage: #define BASE_COLOR {0,0,0,0} class button { backgroundColor[] = BASE_COLOR; };

### include

This command merges another file into the file with this command. Allowed formats are .h and .hpp. Syntax:

#include "path\to\file.hpp";


## Example Config

 class cfgPatches { class PBONAME { requiredVersion = 1.0; // requires ArmA2 version 1.0 }; }; class cfgVehicles { class SoldierWB; // a basic soldier class in ArmA class someNewSoldier : SoldierWB { displayName = "Rambo"; }; };