SQF Syntax: Difference between revisions
m (sqf syntax moved to SQF syntax) |
mNo edit summary |
||
Line 1: | Line 1: | ||
'''SQF syntax''' was introduced in [[Operation Flashpoint: Resistance]] and is the common [[Syntax|syntax]] since [[Armed Assault]]. An alternative syntax is the [[SQS syntax]] (deprecated since Armed Assault). | |||
While [[ | While [[SQS syntax]] is line based, SQF syntax is based on structured expressions. End-of-line has no special meaning - it is considered to be equivalent to space or tab, and is therefore not required, even when ending a statement. | ||
== Rules == | |||
Binding rules: | |||
* Curled braces group code to '''blocks''' | |||
* Commands and blocks are followed by '''semicolons''' | |||
The latter rule tells the game engine where one command ends and the next starts. | |||
Example: | |||
Command 1; | |||
Command 2; | |||
Block | |||
{ | |||
Command 3; | |||
Command 4; | |||
}; | |||
===Operation Flashpoint=== | ===Operation Flashpoint=== |
Revision as of 14:40, 21 December 2006
SQF syntax was introduced in Operation Flashpoint: Resistance and is the common syntax since Armed Assault. An alternative syntax is the SQS syntax (deprecated since Armed Assault).
While SQS syntax is line based, SQF syntax is based on structured expressions. End-of-line has no special meaning - it is considered to be equivalent to space or tab, and is therefore not required, even when ending a statement.
Rules
Binding rules:
- Curled braces group code to blocks
- Commands and blocks are followed by semicolons
The latter rule tells the game engine where one command ends and the next starts.
Example:
Command 1; Command 2; Block { Command 3; Command 4; };
Operation Flashpoint
SQF syntax was introduced for the first time with the call command in Operation Flashpoint. Usage was limited to execution of functions.
Armed Assault
With the release of Armed Assault, the SQS syntax for scripting was deprecated. SQF syntax is expected to be used for both scripts and functions.
SQS syntax is compiled line-by-line as it is executed. SQF files must be compiled ahead of time and are thus more efficient at time of execution. SQF scripts are compiled and executed with either the execVM command or manually via compile and spawn. Since scripts run parallel with each other, you must use scriptDone if you wish to have a calling script wait for a called script to finish.
Diagram of Scripts Running in Parallel
Diagram of Scripts Running in Parallel using waitUntil and scriptDone to pause execution
Language Constructs
Main language contructs used in functions are:
- if..then..else
- while..do
- since ArmA: for ... from ... to ... step
- since ArmA: switch ... do
- Curled braces { }
- Multiple commands (including assigment commands) are delimited with a semicolon.
Notes
Due to line-based nature of Sqs scripts it is not possible to create multiline string constants in them.
To overcome this limitation you can store multiline in separate SQF function files and load them using loadFile or preprocessFile (the second uses C-like preprocessor with // or /* */ comments and #define macros).