# Expressions

Expressions are sequences of literals, variables and operators which resolve to a single value when evaluated. Examples of expressions include:

Expressions can be used as arguments when setting variables, when raising events and for creating conditions.

## Literals

Literal values are hard-coded values in an expression.

Type | Unreal Type | Example | Notes |
---|---|---|---|

Integer | int32 | `5` |
Whole numbers between -2,147,483,648 and 2,147,483,647. |

Float | float | `12.5` |
Using a decimal point creates single-precision floats. Do not use '`f` ' suffix |

Boolean | bool | `true` |
Literals can be `true` , `True` , `false` or `False` |

Text | FText | `"Hello World"` |
Text is enclosed in double-quotes, may be localised (in set lines only) |

Name | FName | ``SomeName`` |
Names are enclosed in backticks |

Gender | ETextGender | `feminine` |
Options are `masculine` , `feminine` or `neuter` |

## Variables

You can reference the value of a variable by enclosing it in curly braces (`{}`

),
for example

Variables are ** case insensitive**. See Variables for more details.

## Operators

A limited set of operators are supported in SUDS. The list below is presented in order of operator precedence; meaning that unless overridden by parentheses, expressions are resolved by performing the operators in this list in the order they are listed.

Operator Name | Symbols | Supported Types | Type | Notes |
---|---|---|---|---|

Not | `!` `not` |
Boolean | Unary | Turns true into false and vice versa |

Multiply | `*` |
Integer, Float | Binary | Result is float if any argument is float, otherwise integer |

Divide | `\` |
Integer, Float | Binary | Result is float if any argument is float, otherwise integer |

Add | `+` |
Integer, Float | Binary | Result is float if any argument is float, otherwise integer |

Subtract | `-` |
Integer, Float | Binary | Result is float if any argument is float, otherwise integer |

Less Than | `<` |
Integer, Float | Binary | Result is boolean, arguments must be comparable |

Less Than Or Equal | `<=` |
Integer, Float | Binary | Result is boolean, arguments must be comparable |

Greater Than | `>` |
Integer, Float | Binary | Result is boolean, arguments must be comparable |

Greater Than Or Equal | `>=` |
Integer, Float | Binary | Result is boolean, arguments must be comparable |

Equal | `=` `==` |
Any | Binary | Result is boolean, arguments must be comparable |

Not Equal | `!=` `<>` |
Any | Binary | Result is boolean, arguments must be comparable |

And | `&&` `and` |
Boolean | Binary | Result is boolean, arguments must be boolean |

Or | `\|\|` `or` |
Boolean | Binary | Result is boolean, arguments must be boolean |

Yes, you can use a single (

`=`

) or double-equals (`==`

) as a comparison operator; SUDS is a simple language and assignment is via set so this is not ambiguous.

### Parentheses

You can alter or make operator ordering more clear by adding parentheses (`()`

)
to your expressions. For example, this expression will yield a result
of 30:

Because the default is to resolve the multiply first, then the add. You can change that by doing this:

Which would yield a result of 16 instead.