Ifvar conditions
if<conditional> <gamevar> <constant|gamevar> <then_branch> [else <else_branch>]
ifvar<conditional> <gamevar> <constant> <then_branch> [else <else_branch>]
ifvarvar<conditional> <gamevar> <gamevar> <then_branch> [else <else_branch>]
Ifvar conditions are if conditions that apply to gamevars.
Gamevar conditionals in CON can take only 2 arguments at a time, the first always being the variable being compared against the second operand. The second operand can be a constant, a label or another variable.
If the comparison returns true, the game will execute the code in the <then_branch>. If false, the <else_branch> may be executed if present, otherwise the block is skipped.
The branches may consist of a single command, or if multiple commands need to be executed, a block of code enclosed in curly braces ("{" and "}"). For performance reasons, do not use curly braces for single commands.
To negate a conditional (e.g. you want to compute a nand) place a nullop inside the <then> branch, and put the code to be executed inside the <else> branch.
See also: Else
Chaining if statements
To check for more than a single condition, the if statements will need to be chained.
If done without curly braces, this acts in much the same way as && does in C/C++ syntax. Namely, an else branch that follows the if chain will be executed if any of the preceeding if conditionals returns false.
Example
definequote 100 Hello World
set temp 0
ife temp 1
ife temp 0
{
nullop
}
else
{
// will be executed if either of the above conditionals returns false
quote 100
}
This may be counterintuitive, as C/C++ and other programming languages only associate the else statement to a single if, usually the one in the same context, which is not the case in CON.
Types of ifvar conditions
| Conditional | C/C++ | Math | Description | |
|---|---|---|---|---|
| e | == | = | equal to | |
| n | != | ≠ | not equal to | |
| g | > | > | greater than | |
| ge | >= | ≥ | greater or equals | |
| a | unsigned greater than (both operands) | |||
| ae | unsigned greater or equal (both operands) | |||
| l | < | < | less than | |
| le | <= | ≤ | less or equal | |
| b | unsigned less than (both operands) | |||
| be | unsigned less or equal (both operands) | |||
| and | & | bitwise AND | ||
| or | | | bitwise OR | ||
| xor | ^ | bitwise XOR | ||
| both | && | logical AND: both are non-zero | ||
| either | || | logical OR: either are non-zero |
Commands with an additional "var" suffix take gamevars rather than constants or defined labels for their inputs. As an alternate short form, "varvar" can be dropped from these commands; for example ife serves an an alias for ifvarvare.