# Specification

## Format

Each action:

* begins with it's identifier followed by a colon (`:`)
* arguments follow, which must be separated using a comma (`,`)
* the last argument is then terminated with a semicolon (`;`), indicating the end of the action

To increase readibility, it is allowed to put additional spaces between `:` and the first argument, between each two arguments (argument and `,`) and also between the last argument and `;`. **Newlines may follow after each `;`.**

In summary, here is an example action:

```
TYPE: argument1 , argument2 ;
```

## Set of actions

In ChatGames, you're able to specify a set of actions, not just one on each occasion. An example of that would be directly from the config, which first plays a sound and then spawns a firework (with power of 3, `STAR` effect, random colors, flickering and trail):

```yaml
# Run always:
always: >
  sound: ENTITY_VILLAGER_YES;
  firework: 3, STAR, random, random, yes, yes;
```

You can omit the last semicolon.

{% hint style="info" %}
Action sets can also be written in one line, however, usage of `'` and `"` inside one-line action sets is limited. That's why this "expanded" format displayed in all examples is recommended.
{% endhint %}

## Arguments

All actions have strictly defined arguments, which can be:

* String: if not surrounded by `'` or `"`, ends at the nearest argument terminator: `,` or `;`. That means, if your string does not contain a terminator, you can omit the quoting. If indicated by the comments, placeholders are available. Examples: `"Hello, Steve!"`, `Hey!`, `"You are {name}"`.
* Boolean: `true`, `yes`, `false` or `no`. You can also type `random` instead to generate a random boolean. Examples: `true`, `no`.
* Integer: a whole integer (non-decimal), or `random` to generate a random integer. Examples: `5`, `120`.
* Double: a decimal or whole number, or `random` to generate a random number. Examples: `1.25`, `4`.
* Enum: a constant, usually sound or effect name. You can also use `random` to pick random one.
* Color: a color from the color list, `#` followed by 1-6 hexadecimal digits (RGB), or `random` to generate a random color. Examples: `BLUE`, `#123FFF`.

**You can omit optional arguments. If you do so, the default value will be used.**
