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.