Expressions

From ADRIFT 5 Manual Wiki
Revision as of 12:43, 7 August 2013 by Saabie (Talk | contribs) (fixed quotes)

Jump to: navigation, search

Expressions are used to calculate integer values or produce strings of text that can then be stored in Variables or Properties using Actions, or used in comparison operations in Restrictions.

An expression can also be embedded into the middle of text in a text box by placing it between the symbols <# and #>

When the text is displayed on the screen the expression will be evaluated and the result inserted into the text.

IconWarning.pngIn the current version of Adrift (5.0.21) it is usually not possible to mix the General Functions with math/string functions in the same expression. If you do need a mixed expression then create extra Variables to hold temporary values and separate the different function types into separate actions. The final action then uses these temporary values to calculate the result. The same temporary variables can then be reused in the next equation.

Integer Expressions

In an action a value can be calculated by an integer expression and the result stored in a 'number' variable, an element of an array variable, or an integer property of a character, object or location. The basic mathematical functions +,-,*,/ can be used to calculate a value, using integer constants, properties, variables, and the reference %number%.

  • Note that expressions are evaluated left-to-right so you will need to use parentheses if you want multiplication to be evaluate before addition, or if you are using boolean and/or operations on the result of a comparison.

An integer expression can also be compared with an integer variable or property in a restriction, to determine if they are equal or one is greater than or less than the other value.

x mod y Returns the modulus of x and y, i.e. the remainder when x is divided by y. 11 mod 4 = 3

  • NOTE: The divide operator '/' performs a round-to-nearest-integer integer divide. If you need the truncated integer part of the division then first subtract 0.5 times the number being divided by, eg. (%IntVar%-50)/100
  • Parentheses can be used to control the order of evaluation, eg. (17+4)*(9-6)
  • Variable names must be delimited with '%' symbols, eg. %Score%
  • Array variables use square brackets to enclose the index value, eg. %ArrayVar1[3]%
  • Integer properties are accessed using either Item functions or the %PropertyValue[Object16,Property2]% function.

A number of mathematical functions can also be used, including:

  • min(x,y) Returns the minimum of value x and y
  • max(x,y) Returns the maximum of value x and y
  • either(x,y) Randomly returns either x or y
  • rand(x,y) Selects a random value between x and y
  • abs(x) Returns the absolute value of x( the magnitude regardless of sign), i.e. abs(-4) = 4
  • If(test,x,y) If "test" evaluates true, returns x, else returns y Where "test" is a=b, a==b, a<b, a<=b, a>b, a>=b, a<>b, a!=b. Conditions can be ANDed using "and", "&" or "&&" or ORed using "or", "|", "||", eg. IF(%variable1%=1,%variable2%+1,RAND(5,7))
Always use parentheses to ensure that comparison operations occur before AND/OR, eg. IF((%var1%=3) AND (%Var2=4),10,20)

String Expressions

In an action a line of text can be calculated using a string expression and the result stored in a 'text' variable, an element of an array variable, or a text property of a character, object or location. A string expression can also be compared with a text variable or property in a restriction, to determine if they contain exactly thesame text or not.

String constants are delimited with the quote character, eg. "Some text". The '&' operator concatenates two strings together, eg. "Some text"&"ures" becomes "Some textures". Any text based property, variable, element of array variable, or the reference %text% can be used in a string expression.

The following string functions are available:

  • UCase(text) Converts <text> to all upper case
  • LCase(text) Converts <text> to all lower case
  • PCase(text) Converts <text> to proper case, i.e. a capitalises the first letter of each word, with the rest in lower case
  • Left(text, length) Returns the <length> leftmost characters of <text>
  • Right(text, length) Returns the <length> rightmost characters of <text>
  • Mid(text, start, length) returns <length> characters of <text>, starting at <start>
  • Either(text1, text2) randomly returns either <text1> or <text2>
  • OneOf(text1, text2, text3, text4) This function can take any number of parameters, and will return one of the parameters randomly. For example, you could embed the function into a piece of text like so:
The top card is the Queen of <# OneOf("club", "spade", "diamond", "heart") #>s.
  • Replace(SourceText, FindText, ReplaceText) This takes three parameters - the first is the piece of text to be altered, the second is the text to find, and the third is the text to replace the found text with. So for example:
Replace("one two three", "two", "TWO") would return "one TWO three".

Complex Expressions

An expression can be partly an integer expression and partly a string expression. For example an integer expression can be used to calculate the index of a text variable, and the result of that used in a string expression.

The following functions can be used in mixed expressions:

  • Len(text) Returns the length of <text>
  • Val(text) Converts <text> to a number (or zero if it can't match)
  • Str(x) Converts an integer value x to text form. Negative numbers are preceeded with "-" and positive numbers with a space.
  • instr(text, search) Returns the position of the first occurance of <search> within <text> eg. instr(“hello”,”e”) = 2
Note that this is not case sensitive, so instr("hello","E") will also return 2.
This function returns zero if <search> does not exist within <text>.


<<< User FunctionsMain PageIntermediate Tutorials - "How_do_I...?" >>>