Script:Variables

From Arx Libertatis Wiki
Jump to: navigation, search

This page describes variables in the Arx scripting language.

Variable types

Arx scripts know three basic data types:

int 32-bit signed integer
real 32-bit IEEE 754 floating-point number
text arbitrary-length string

Variables can be either global (shared between all entities) or entity-specific. There are also special system variables than can only be read. The variable type is defined by the first character of the variable name. Non-ASCII characters are encoded as ISO-8859-15.

Char Byte Scope Type
# 0x23 global int
& 0x26 global real
$ 0x24 global text
§ 0xA7 entity int
@ 0x40 entity real
£ 0xA3 entity text
^ 0x5E system (mixed)

While variables in Arx scripts are typed, there are no type restrictions for where variables are used: the types are converted automatically.

System variables

System variables don't always have the value type in the name. Some return results specific to the calling object, others are global. Some system variable prefixes (denoted with a * in the following table) work as functions with the remainder used as the parameters.

Name Type Description Used
^$param1 text event parameter 1
^$param2 text event parameter 2
^$param3 text event parameter 3
^&param1 real event parameter 1
^&param2 real event parameter 2
^&param3 real event parameter 3
^#param1 int event parameter 1
^#param2 int event parameter 2
^#param3 int event parameter 3
^#timer1 int duration of the caller's timer #1 has been runing, in milliseconds (or 0 if the timer is stopped)
^#timer2 int duration of the caller's timer #2 has been runing, in milliseconds (or 0 if the timer is stopped)
^#timer3 int duration of the caller's timer #3 has been runing, in milliseconds (or 0 if the timer is stopped)
^#timer4 int duration of the caller's timer #4 has been runing, in milliseconds (or 0 if the timer is stopped)
^$objontop text ID of the entity above the caller (or "none")
^&playerdist real distance between the caller and the player
^#playerdist int distance between the caller and the player
^gore int 0 for low-violence versions, 1 for normal versions (Arx Libertatis always reports 1)
^gamedays int in-game time since the start of the playthough, in days (in 10-days before AL 1.2)
^gamehours int in-game time since the start of the playthough, in hours
^gameminutes int in-game time since the start of the playthough, in minutes
^gameseconds int in-game time since the start of the playthough, in seconds
^amount int number of items in the stack if the caller is an item (stack), 0 otherwise
^arxdays int in-game time since the start of the playthough, in in-universe days
^arxhours int in-game time since the start of the playthough, in in-universe hours
^arxminutes int in-game time since the start of the playthough, in in-universe minutes
^arxseconds int in-game time since the start of the playthough, in in-universe seconds
^arxtime_hours int time of the day, in in-universe hours (1-12, 0 at the start of the game)
^arxtime_minutes int time of the day, in in-universe minutes (1-60, 0 at the start of the game)
^arxtime_seconds int time of the day, in in-universe seconds (1-60, 0 at the start of the game)
^realdist_* real portal-based walking distance between the caller and the entity with the given ID
^repairprice_* real cost in gold for the caller to repair the item with the given id (-1.f if not an item)
^rnd_* real random number between 0 and the given max (to be determined if inclusive/exclusive)
^rune_* int 0 if the player *doesn't* have the given rune, and unspecified non-zero value otherwise
^inzone_* int 1 if the caller is in the area with the given ID, 0 otherwise
^player_zone text ID of the zone the player is in, "none" if in no zone
^ininitpos int 1 if the caller is exactly at it's initial position, 0 otherwise
^inplayerinventory int 1 if the caller is in the player inventory, 0 otherwise
^possess_* int 1 ifthe given item is in the player inventory or equipped by the player, 0 otherwise
^behavior text current behavior of the caller NPC1
^sender text ID of the entity that sent the current event
^scale real scale of the caller, in percent
^speaking int 1 if the caller is currently speaking, 0 otherwise
^me text ID of the caller
^life real current health value of the caller NPC
^maxlife real maximum health value of the caller NPC1
^player_life real the player's current full life (at the start of the frame?)
^player_maxlife real the player's maximum life
^player_hunger real the player's hunger value
^mana real current mana value of the caller NPC
^maxmana real maximum mana value of the caller NPC
^myspell_* int 1 if the caller is casting a spell with the given name, 0 otherwise
^playerspell_* int 1 if the player is casting a spell with the given name (or for "invisibility" if invisibility > 0.3)
^playercasting int 1 if the player is casting a life_drain, harm, fire/ice_field, (mass_)lightning_strike spell
^durability real current durability value of the caller
^maxdurability real maximum durability value of the caller
^last_spawned text ID of the last entity spawned by a script
^dist_* real distance between the caller and the entity with the given ID, 99999999999.0 on error
^demo int 1 if using the demo data (as indicated by the PAK
^price real price in gold of the caller Item
^poisoned real the poisoned value of the caller NPC
^player_poison real the player's poisoned value
^poisonous real the poisonous value of the caller Item
^player_gold real amount of gold carried by the player
^player_attribute_* real player attribute (strength, dexterity, constitution, mind), incl. modifiers
^player_skill_* real player skill, incl. modifiers
^npcinsight text ID of the first NPC seen by the caller, or "none"
^target text ID of the caller's current target, or "none"
^focal real the current camera's focal value
^fighting int 1 if the player is in combat mode, 0 otherwise

System variables marked as unused may be removed in a future version of Arx Libertatis.

In-universe time

In-universe time runs 6 times faster than real time and has only 12 hours per day. Since these variables are not actually used and NPCs use quest progress instead of time for their day/night cycle this can be considered non-canonical. There is also an unused arx_bell entity class that simulates a day/night cycle with 60 seconds per in-universe day plus 60 seconds per in-universe night.