Variables are used to store and manipulate information: numbers, strings, time, etc. In this scripting language, all variables are global, i.e. they can be accessed and modified everywhere in the script. There are 10 types of variables, each type is characterised by a prefix, followed by one ore more letters. After the first letter, numbers and underscore _ may be used. Each type, except the list, vector and matrix types, has a default set (you do not need to declare this set) which has the prefix and one letter from a to z. In addition to that, the you can declare any number of variables of each type. The types are:
numeric variables - represent both integers (whole numbers) and real numbers
Prefix % Initial value: 0 Default set: %a, %b, ... %z Valid custom names: %red, %small_nose, %c5 |
string variables - represent strings
Prefix $ Initial value: empty string. Default set: $a, $b, ... $z Valid custom names: $backdrop, $b1, $simple_av3 |
date-time variables - They represent both dates and time of the day
Prefix ! Initial value: date and time the script starts running Default set: !a, !b, ... !z Valid custom names: !my_bithday, !s, !arrived |
location variables - They represent coordinates in AW, as 20.5n 50.3e 10a 90°, and they may also indicate a world
Prefix @ Initial value: 0n 0w 0a 0°. The degree symbol ° may be omitted Default set: @a, @b, ... @z Valid custom names: @my_place, @s1 |
person variables - complex location variables, which can be 'cloned' by direct assignment to another person variable. They contain fields for name of an individual person (citizen, tourist or bot), location, world, universe, session number, citizen number, last chatline, and more
Prefix & Initial value: empty, coordinates as location variables Default set: &a to &z Valid custom names: &Speaker_1, &jimmy, &b3 |
object variables - complex location variables
prefix ~ Initial value: empty, coordinates as location variables Default set: ~a to ~z Valid custom names: ~Chair_3, ~floor, ~b3 |
string lists - customisable string lists, which can be accessed using an index number or a name-value pair. You may load and save them to file
Prefix /s_ Default set: none Initial value: empty (no strings) Valid names: /s_Players, /s_menu_1 |
time-out lists - customisable string lists, holding a name-value pair, which can automatically time out. The name entry is unique - duplicates are not allowed - and works as an index 'number'. The value entry can hold any string. You can specify a time-out value (a date-time value), or set this value to zero to disable timing out. Default time-out value is 60 seconds
Prefix /t_ Default set: none Initial value: empty (no strings) Valid names: /t_InRegion, /t_Out_3 |
packer variables - represent variables
Prefix ^ Initial value: nil. Default set: ^a, ^b, ... ^z Valid custom names: ^FirstList, ^b1, ^simple_av3 |
vector variables - introduced in version 3.416, have 3 elements: x, y, z
Prefix /v_ Default set: none Initial value: empty (all elements set to 0.0) Valid names: /v_vecR, /v_myVector_A |
matrix variables - introduced in version 3.416, have 16 elements, organised in 4 rows, the last row representing translations.
Prefix /m_ Default set: none Initial value: identity matrix Valid names: /v_the_Matrix, /v_Smith_200 |
The default set is implicitely declared, and may not be re-declared. All other are custom variables and must be declared before being used. The usual place to declare variables is at the beginning of the script. The declaration consists of the keyword var followed by a comma separated list of variables:
var %small_nose, %c5, $backdrop, $b1, $simple_av3 var %red, @my_place, @s1, !change_backdrop |
It is legal to use the same name for variables of different types: %hello and $hello may co-exist. Since variables are not case-sensitive, %a is the same as %A.
In the variable declaration, you can initialise some of the variable types if you wish: numeric, string and location variables are in this category. String initialisation here is restricted: the string may not contain commas, and double-quotes will be treated as any other character, leading and trailing spaces will be removed.
var %small_nose = 5.39, %c5 = 7, $backdrop, $b1, $simple_av3 = mickey mouse var %red, @my_place = 23s 5w 0.1a 230 :mars, @s1 |
This practice is not recommended, except for initialising numerals, because there are some inconsistencies in the notation. It is better to intialise the variables after declaring them.
var %small_nose, %c5, $backdrop, $b1, $simple_av3 var %red, @my_place, @s1 %small_nose = 5.39 %c5 = 7 $simple_av3 = mickey mouse @my_place = 23s 5w 0.1a 230 mars |
Variables can be assigned values in a variety of ways. Here we will show the direct assignment. Elsewhere we will see assignments as a result of an operation.
Syntax for numbers: %a = x, where x can either be a numeric variable %b or a numeric literal value, a date-time variable !b or a string variable $b. In the case of a date-time variable, the date-time will be stored in the Delphi date-time format, as a 32-bit float. Examples:
var %boing, %lala, %datetime, !thismoment, %buzz # notice $a is not declared # it belongs to the default set %boing = -5.3 %lala = %boing %datetime = !thismoment $a = "3" %buzz = $a |
See also Numeric variables and operations.
Syntax for strings: $a = x, where x can either be a string variable $b or a string literal of the SDF type, a one-byte character in the form #xxx where xxx represents a number from 0 to 255 (example: #13 for carriage return), a numeral %b (integer), or a variable of the location family @b, &b or ~b (location will be stored without the world). Any string literals containing commas, double-quotes, trailing or leading spaces should be surrounded by double-quotes. Within such a string, double-quotes which are part of the string must be doubled. It is good practise to surround all literal strings with double quotes. In fact, it is very likely that strings without double-quotes will be banished shortly, I haven't yet made up my mind about this.. Examples:
var $pipo, $pepe, $first_planet var $mercurius, $merc, $CR, $LF $pipo = " His name was ""The Bumble Bee""" $pepe = $pipo $first_planet = mercury $mercurius = "mercury" $merc = """mercury""" $a = 3.5 $a = "3.5" $CR = #13 $LF = #10 # store an integer number in a string # if %b is 2.1, $a will have '2' $a = %b # store a location (no world) in a string $a = @b $a = &p $a = ~m # results in $a containing a string like # '25.003n 6.000e 5.00a 270.0°' |
Variable $pipo will be assigned the value His name was "The Bumble Bee", with one leading space.
Variables $first_planet and $mercurius will both contain the string mercury, whereas $merc will have the string "mercury"
See also String variables and operations.
Syntax for location: @a = x, where x can either be a variable of the location family @b, &b or ~b (includes world), a string variable $a or literal containing coordinates usual in AW for teleporting (except for altitude). Altitudes are in metres (not in AW units), coordinates n, s, w, e are in AW units and rotation (or yaw) is in degrees. The degree simbol ° may be omitted. Any values omitted will be set to zero. You may also specify a world name at the end, preceeded by a colon, or as from xelagot version 3.0, you may omit the colon. Double-quotes " surrounding the literal are not allowed. Examples:
var @Loc1, @Loc2, @Loc3, @Loc4, @Loc5 # a full coordinate specification, no world specified @loc1 = 50n 300w -0.20a 45.0° @loc1 = 50n 300w -0.20a 45° # note that in AW, this would be written as # 50n 300w -0.0a 45.0 # because altitudes are expressed in decametres # and only one decimal place is allowed :( # this next one sets the world as well to "aw" @loc2 = 703.002s 25.2e 7.13a 12.5 :aw # as from xelagot version 3.0, this is also valid (no colon needed) @loc2 = 703.002s 25.2e 7.13a 12.5 aw # @loc3 will be equal to @loc2, including the world @loc3 = @loc2 # or to the position and world of these variables @loc3 = &person @loc3 = ~thing # loc4 will be at GZ, zero altitude, facing North @loc4 = 0 # loc5 will be at zero altitude facing North @loc5 = 200e 7003w # not valid @loc5 = "200e 7003w" # but this is ok $a = "200e 7003w" @loc5 = $a |
See also Location variables and operations
Syntax for date-time: !a = !b. See Date and time variables and operations.
Syntax for person: &a = &b. See Person variables and operations.
Syntax for object: ~a = ~b. See Object variables and operations.
Syntax for vector variables: see Vector variables and operations.
Syntax for matrix variables: see Matrix variables and operations.
Syntax for packer variables: see Using packer variables....