This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
if [2013/12/16 23:28] l |
if [2017/10/09 20:39] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <- [[remember|Remembering Things With Variables]] --------- [[nobr|Removing Line Breaks]]-> | ||
+ | |||
=====<<if>>===== | =====<<if>>===== | ||
Line 13: | Line 15: | ||
>%%<<%%if //expression//%%>>%% //Text// %%<<%%else if //expression//%%>>%% //Text// ... %%<<%%endif%%>>%% | >%%<<%%if //expression//%%>>%% //Text// %%<<%%else if //expression//%%>>%% //Text// ... %%<<%%endif%%>>%% | ||
- | //condition// is an [[expression]] that can evaluate to true or false. //Text// is any amount of passage text that you wish to display only if the condition is //true//. <<endif>> is a macro tag indicating the end of the <<if>> macro invocation. | + | //expression// is an [[expression]] that can evaluate to true or false. //Text// is any amount of passage text that you wish to display only if the condition is //true//. <<endif>> is a macro tag indicating the end of the <<if>> macro invocation. |
+ | |||
+ | Note that the //Text// can contain any Twine code, including an inner <<if>> invocation: | ||
+ | |||
+ | <<if $body is "wounded">>You are <<if $blood <= 5>>about to die<<else>>bleeding<<endif>>. Seek help!<<endif>> | ||
====Motivating example==== | ====Motivating example==== | ||
Line 44: | Line 50: | ||
</code> | </code> | ||
- | ====Invalid usage==== | ||
- | |||
- | You should take care when writing <<if>> macros that you write correct expressions, and that you remember what the "and" and "or" keywords are capable of. | ||
- | |||
- | <code> | ||
- | <<if $health > 2 and < 4>> | ||
- | </code> | ||
- | This is invalid because the ''>'' and ''<'' operators (and indeed, all such operators) require a distinct value to be on both sides of it. In a sense, it is internally interpreted as ''<<if ($health > 2) and ( < 4)>>'', which is obviously nonsensical. So, you must rewrite this as ''<<if $health > 2 and $health < 4>>''. | ||
- | |||
- | <code> | ||
- | <<if $name is "Perone" or "Pavone">> | ||
- | </code> | ||
- | This is also invalid, for a different reason: it will be interpreted as ''<<if ($name is "Perone") or ("Pavone")>>'' - which is to say, it is true if $name is "Perone", or if the string "Pavone" is not false. This, of course, means that it's always true - an undesirable outcome. You must rewrite it as ''<<if $name is "Perone" or $name is "Pavone">>''. | ||
====A note about line breaks==== | ====A note about line breaks==== | ||
Line 106: | Line 99: | ||
(Note: if you prefer, you can also write "else if" as "elseif".) | (Note: if you prefer, you can also write "else if" as "elseif".) | ||
else if | else if | ||
+ | |||
+ | <- [[remember|Remembering Things With Variables]] --------- [[nobr|Removing Line Breaks]]-> | ||
+ |