# # Data Types

Variables come in different types, playing by different rules.

## # Booleans (True or False values)

A boolean value is `true` or `false`.

`is_on_fire = true` or `weapon_held = false`.

The `not` or `!` operator inverts a boolean between true and false. `not true` is `false`. `is_toggled = not is_toggled` would switch between true and false.

You can combine booleans, described below.

### # Variable Comparison

You can compare any variables for equality, which returns a boolean value.

• `==` means "are equal?" `2 == 3` is `false`.
• `!=` means "are not equal?" `2 != 3` is `true`. (Remember `!` means the same as `not`, so `!=` means 'not equal')

People sometimes compare booleans with `true` or `false`. That's silly. `is_active == true` means the same thing as `is_active`. `is_active == false` means the same as `not is_active`.

Numbers have more operators, `>`, `>=`, `<`, and `<=`, described below.

`if` statements use variable comparison extensively.

### # Logical Operators

You can combine booleans with logical operators `and` and `or`.

``````can_use_fireball = fireball_ready == state_cat != SC_HITSTUN
bomb_should_explode = fuse_timer <= 0 or should_die
``````

You can technically use `0` and `1` as `false` and `true` respectively. Don't. It makes the intention of the code much less clear, because the reader must guess whether the value is a boolean or number. If a value is true or false, use `true` and `false`.

## # Reals (Numbers)

Most variables hold numbers, such as speed or percent or x position.

You can also compare numbers by their relative size.

• `>` - 'is greater than?'
• `>=` - 'is greater than or equal to?
• `<` - 'is less than?',
• `<=` - 'is less than or equal to?'

Numbers can use math operators `+`, `-`, `*` and `/`.

When increasing or decreasing a variable, you can use `+=`, `-=`, `*=` and `/=` as a shortcut. `x += 1` increases x 1, the same as `x = x+1`.

`my_var++` or `my_var--` are shorthand for `my_var+=1` and `my_var-=1`.

### # Integers

All numbers are reals. Integers are a subset of reals with no decimal value. `1`, `-100`, `4140` are integers, while `2.5` is not.

Rivals expects some variables to be integers, such as `x` and `y` positions. If you ever need to convert a real to an integer, you can use rounding functions (opens new window) like `round`, `floor` and `ceil`.

GML Reals Official docs (opens new window)

## # Strings (text)

Strings are text. Rivals doesn't need a lot of text processing, but they're used when using `print` or displaying text as part of a HUD.

String value are anything between quotes, either single `'...'` or double `"..."`.

You can add strings together with `+`. `"a" + "b" == "ab"`.

Official docs (opens new window)