Arx scripting language: Difference between revisions
mNo edit summary |
m (→Labels) |
||
Line 54: | Line 54: | ||
The two characters <code>>></code> followed directly by a name define a label. These are skipped when encountered during normal execution but can serve as the target to jump to for a {{Command|goto}} or {{Command|gosub}} command. Execution of the next command after {{Command|gosub}} can be resumed using the {{Command|return}} command | The two characters <code>>></code> followed directly by a name define a label. These are skipped when encountered during normal execution but can serve as the target to jump to for a {{Command|goto}} or {{Command|gosub}} command. Execution of the next command after {{Command|gosub}} can be resumed using the {{Command|return}} command | ||
Arx Libertatis ignores labels inside [#Comments|comments]] while Arx Fatalis 1.21 will happily jump to them. | Arx Libertatis ignores labels inside [[#Comments|comments]] while Arx Fatalis 1.21 will happily jump to them. | ||
=== Commands as parameters === | === Commands as parameters === |
Revision as of 02:44, 16 April 2020
This article describes the scripting language used in Arx Fatalis and Arx Libertatis.
Syntax
Events
- Main article: Script:Events.
Variables
- Main article: Script:Variables.
Arx scripts know three basic data types: int
, Template:Real and Template:Text. 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.
Char | Byte | Scope | Type |
---|---|---|---|
# |
0x23 |
global | int
|
& |
0x26 |
global | Template:Real |
$ |
0x24 |
global | Template:Text |
§ |
0xA7 |
entity | int
|
@ |
0x40 |
entity | Template:Real |
£ |
0xA3 |
entity | Template: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.
Commands
- Main article: Script:Commands.
Comments
Comments start with //
and go until the end of the line. Because scripts are not properly parsed, //
in unquoted parameters will be treated as a comment.
Control flow
- Main article: Category:Script control flow.
Execution of the current event is terminated with the accept
or refuse
commands. For entity instance scripts, refuse
ends event execution completely while accept
allows execution to continue in the entity class script.
Blocks
The if
, else
, random
, ifvisible
and ifexistinternal
commands will skip the next block under certain conditions. A block is either a series of commands on the same line {
followed by all commands until the next matching }
. If the next command after a skipped block is else
, that command will be skipped as well and the following block (which would normally be skipped by else
) will be executed.
Labels
The two characters >>
followed directly by a name define a label. These are skipped when encountered during normal execution but can serve as the target to jump to for a goto
or gosub
command. Execution of the next command after gosub
can be resumed using the return
command
Arx Libertatis ignores labels inside comments while Arx Fatalis 1.21 will happily jump to them.
Commands as parameters
- Main article: Script:Commands#Other commands as parameters.
Some commands take another command as their last parameter. For such commands all following commands on the same line will be skipped during normal execution. Then after some action started by the command is completed these commands will be executed using the special executeline
event.
Search script files
mkdir assets cd assets arxunpak ~/.local/share/arx/{data,loc,data2,sfx,speech}.pak grep -rP -ia 's_*p_*e_*c_*i_*a_*l_*f_*x' graph/obj3d/interactive/