This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
set [2013/12/17 20:03] l created |
set [2014/07/15 23:11] l [Setter operators] |
||
---|---|---|---|
Line 8: | Line 8: | ||
(Joe Dever, //Flight from the Dark//) | (Joe Dever, //Flight from the Dark//) | ||
- | You can keep track of the number of meals that the protagonist carries with the ''<<[[set]]>>'' macro, like so: | + | You can keep track of the number of meals that the protagonist carries with the [[<<set>>]] macro, like so: |
<code> | <code> | ||
Line 28: | Line 28: | ||
====Setter operators ==== | ====Setter operators ==== | ||
- | The ''to'' and ''-='' are special operators called a **setter operator** - while [[expression]]s may contain comparison operators like ''+'' or ''not'', setter operators are commands to modify the values of variables. The ''-='' operator lowers the variable on the left by the value on the right. There is also a ''+='' operator that does the opposite. | + | The ''to'' and ''-='' are special operators called **setter operators** - while [[expression]]s may contain comparison operators like ''+'' or ''not'', setter operators are commands to modify the values of variables. The ''-='' operator lowers the variable on the left by the value on the right. There is also a ''+='' operator that does the opposite. |
- | + | ||
- | ====Setter operators==== | + | |
The most useful setter operators are as follows: | The most useful setter operators are as follows: | ||
Line 40: | Line 38: | ||
| *= | Multiplies the variable on the left by the number on the right. ''$var *= 2'' is shorthand for ''$var to $var * 2'' | ''$shields *= 2'' | | | *= | Multiplies the variable on the left by the number on the right. ''$var *= 2'' is shorthand for ''$var to $var * 2'' | ''$shields *= 2'' | | ||
| /= | Divides the variable on the left by the number on the right. ''$var /= 2'' is shorthand for ''$var to $var / 2'' | ''$coins /= 2'' | | | /= | Divides the variable on the left by the number on the right. ''$var /= 2'' is shorthand for ''$var to $var / 2'' | ''$coins /= 2'' | | ||
+ | |||
+ | ====Multiple operations in one <<set>> ==== | ||
+ | |||
+ | When you have multiple <<set>> macro tags next to one another, you can replace them with a shorthand that uses only one <<set>>. Simply take the operations in each instance, and join them together using either commas or semicolons. | ||
+ | For instance, these three macro tags: | ||
+ | <code><<set $pants = "large">> | ||
+ | <<set $shoes = "huge">> | ||
+ | <<set $spats = "classy">></code> | ||
+ | ...can be changed to just this: | ||
+ | <code><<set $pants = "large"; $shoes = "huge"; $spats = "classy">></code> | ||
+ | ====A note about <<set>> and links==== | ||
+ | |||
+ | It is easy to assume that the placement of links in a passage has some bearing on what the game's variable state will be once you click it: | ||
+ | <code> | ||
+ | /% The following code is ineffectual %/ | ||
+ | <<set $lamp to "red">> | ||
+ | [[The lamp is red]] | ||
+ | <<set $lamp to "blue">> | ||
+ | [[The lamp is blue]] | ||
+ | </code> | ||
+ | But this is erroneous! All of these [[<<set>>]] macros are run as soon as the passage is displayed, in order. Clicking the "The lamp is red" link won't cause the <<set $lamp to "blue">> tag to not have happened. | ||
+ | |||
+ | To achieve the desired effect in the above passage, you should use [[link|setter links]]: | ||
+ | <code> | ||
+ | [[The lamp is red][$lamp = "red"]] | ||
+ | [[The lamp is blue][$lamp = "blue"]] | ||
+ | </code> |