Ifvar conditions

From EDukeWiki
Revision as of 05:37, 12 January 2021 by Doom64hunter (talk | contribs) (Undo revision 14162 by Doom64hunter (talk) (just had a double brainfart...))
Jump to navigation Jump to search

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.