anachronox-sdk/docs/apecmds.html
2002-01-21 00:00:00 +00:00

704 lines
52 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<title>APE COMMANDS</title>
</head>
<FONT FACE="Tahoma">
<body bgcolor=black text=lightgrey>
<p> <font size=7 style="Times New Roman" color=#ff0000>APE COMMANDS</font></p>
<p><font size="3" color="#FFFFFF">Before you start reading about #windows and #switches, lets get a few terms (and APE-script formats) straight:</font></p>
<p><font size="5" color="#FFFF00">DATA FORMATS</font></p>
<p><font color="#FFFFFF">&lt;bankentrynumber&gt;</font></p>
<p><font size="3" color="#FFFFFF">A number between 1 and X, a colon, and another number between 0 and
9999. These are evaluated literally as numbers by the APE compiler.
<bankentryexpression>
&nbsp;</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">&lt;bankentryexpression&gt;</font></p>
<p><font size="3" color="#FFFFFF">
The same as the above, but in a string format. This allows variables to be used inside it, like:</font></p>
<p><font size="3" color="#FFFFFF">&nbsp;&nbsp;&nbsp;&nbsp; </font><font size="3" color="#FFFFFF">10:110$whichnum$</font></p>
<p><font size="3" color="#FFFFFF">(where $whichnum$ is the string-expansion-of-the-variable-value for the numeric variable “whichnum”.) Say whichnum is equal to 5. If this is in a GOTO statement, it will
wind up at runtime as:
GOTO 10:1105
<commandblock>
&nbsp;</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">&lt;commandblock&gt;</font></p>
<p><font size="3" color="#FFFFFF">
Either a single command, or a set of commands surrounded by
braces ("curly brackets").</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">&lt;consolecommandline&gt;</font></p>
<p><font size="3" color="#FFFFFF">Anything you can type in Quake's console.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">&lt;expression&gt;</font></p>
<p><font size="3" color="#FFFFFF">An expression is a value or comparison:</font></p>
<p><font size="3" color="#FFFFFF">&lt;variable&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
true if value non-zero</font></p>
<p><font size="3" color="#FFFFFF">&lt;variable&gt; > <variable>&lt;variable&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
true if greater than</font></p>
<p><font size="3" color="#FFFFFF">&lt;variable&gt; &lt; <variable>&lt;variable&gt;&nbsp;&nbsp;&nbsp;&nbsp;
<variable>&nbsp; true if less than</font></p>
<p><font size="3" color="#FFFFFF">&lt;variable&gt; >= <variable>&lt;variable&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
true if greater than or equal to</font></p>
<p><font size="3" color="#FFFFFF">&lt;variable&gt; &lt;= <variable>&lt;variable&gt;
<variable>&nbsp;&nbsp;&nbsp; <variable> true if less than or equal to</font></p>
<p><font size="3" color="#FFFFFF">&lt;variable&gt; != <variable>&lt;variable&gt;
<variable>&nbsp;&nbsp;&nbsp; <variable> true if not equal to</font></p>
<p><font size="3" color="#FFFFFF">You can combine any of these simple values or comparisons for a
more complex expression, using parentheses, and logical operators.</font></p>
<p><font size="3" color="#FFFFFF"><variable>&lt;expression&gt;
&& <variable>&lt;expression2&gt;</font></p>
<p><font size="3" color="#FFFFFF"><variable>&lt;expression&gt;
|| <variable>&lt;expression2&gt;</font></p>
<p><font size="3" color="#FFFFFF"><variable></font><font face="Courier New" size="3" color="#FFFFFF">&lt;expression&gt;</font><font face="Courier New" size="3" color="#FFFFFF">
^^</font> <font size="3" color="#FFFFFF"><variable>&lt;expression2&gt;</font></p>
<p><font size="3" color="#FFFFFF">(<expression><variable>&lt;expression&gt; &&
<variable>&lt;expression2&gt;<expression2>) || <variable>&lt;expression3&gt;<expression3>)</font></p>
<p><font face=size="3" color="#FFFFFF">&& means logical "and" (both expressions must be true)</font></p>
<p><font size="3" color="#FFFFFF">|| means logical "or" (at least one of the expressions must be true)</font></p>
<p><font size="3" color="#FFFFFF">&nbsp;^^ means logical "exclusive-or" (either the first or the second is true, but not both)</font></p>
<p><font size="3" color="#FFFFFF">Of course, you may use these in any combination, and group them with parentheses as shown.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">&lt;string expression&gt;</font></p>
<p><font size="3" color="#FFFFFF">A series of text characters, usually inside quotation marks. You can print APE
variable values inside a <stringexpression>string expression by enclosing them in dollar signs:</font></p>
<p>&nbsp;&nbsp;&nbsp;<font size="3" color="#FFFFFF"> body "X = $playerX$ Y = $playerY$ Item = $I[0]$"</font></p>
<p>&nbsp;&nbsp;&nbsp;<font size="3" color="#FFFFFF"> Note the array must be concretely indexed--you can't have dollar signs
inside dollar signs.</font></p>
<p><font size="3" color="#FFFFFF">You can use the following character commands:</font></p>
<p>&nbsp;&nbsp;&nbsp;<font size="3" color="#FFFFFF"> \n Print a newline character (go to the start of next line)</font></p>
<p>&nbsp;&nbsp;&nbsp;<font size="3" color="#FFFFFF"> \\ Print a backslash.</font></p>
<p>&nbsp;&nbsp;&nbsp;<font size="3" color="#FFFFFF"> \" Print a double quote.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">&lt;variable&gt;</font></p>
<p><font size="3" color="#FFFFFF">A simple variable name, which can be made of letters, numbers, and
underline characters (though the first character must always be a
letter). Stylistically, variable names are usually found in one of two formats: interCaps, and underscore_word_separation. Note, however, that variable names in APE are NOT case-sensitive - that is, the variables “interCaps” and “InTeRcApS” are one and the
same.</font></p>
<p>&nbsp;</p>
<p><font size="5" color="#FFFF00">APE commands (#window)</font></p>
<p>&nbsp;</p>
<p><font size="3" color="#FFFFFF">The #window entry type is used to define an APE “window”. In APE, a window is used for displaying text or images (typically game dialogue) over a sustained period of time. Accordingly, it only allows commands that are useful in describing that windows appearance (including font, graphics, geometry, etc.) and triggering events that happen upon its opening and closing. Note that windows can also be very useful as “sustained thinking objects” (see thinkswitch, below), even if they have no outward appearance (font, graphics, etc.).</font></p>
<p><font size="3" color="#FFFFFF">Windows do not possess very much in the way of logical operations and flow branching; these tasks are left to the much-better-suited #switch entry type (see below).</font></p>
<p><font size="3" color="#FFFFFF">Windows can generally be as large as they want (in terms of command-content, etc). However it is important to note that they are not sequential in their command execution; that is, window command-elements are executed in a fixed order (for instance, the sole “goto” command is always executed last) regardless of the order in which they were defined in the #window.
=================================================================== </font><font color="#FFFF00" size="4">
COMMANDS</font></p>
<p><font color="#FFFFFF" size="3" >if (&lt;expression&gt;)
&lt;commandblock&gt;</font></p>
<p><font size="3" color="#FFFFFF">Command block, in a window, can only be one of the following
statements:
title&nbsp;&nbsp; body&nbsp;&nbsp; style&nbsp;&nbsp; font&nbsp;&nbsp; choice&nbsp;&nbsp;
sound</font></p>
<p><font size="3" color="#FFFFFF">This allows contextual presentation of the window data.
Note that, in a #window, “else” is never allowed.</font></p>
<p><font size="3" color="#FFFFFF">goto &lt;bankentryexpression&gt;</font></p>
<p><font size="3" color="#FFFFFF">Go to the switch or window specified by <bankentryexpression> when
this window becomes closed.</font> <font face="Courier New" size="3" color="#FFFFFF">Each window may therefore have only one goto statement in it.</font></p>
<p><font size="3" color="#FFFFFF">BankEntryExpression is usually of the form bbbb:eeee, where
bbbb is a number from 1 to ____, and eeee is a number 0 to 9999.</font></p>
<p><font size="3" color="#FFFFFF">It is called an expression, because you can do things like this:</font></p>
<p>&nbsp;&nbsp;&nbsp;<font face="Courier New" size="3" color="#FFFFFF"> goto 10:110$choicenum$</font></p>
<p><font size="3" color="#FFFFFF">…where $choicenum$ is the string-expansion-of-the-variable-value of the
APE variable “choicenum”. So, if choicenum = 5 then the statement
Becomes “goto 10:1105”.</font></p>
<p>&nbsp;</p>
<p><font size="3" color="#FFFFFF">[set] <variable>&lt;variable&gt; =
&lt;expression&gt;</font></p>
<p><font size="3" color="#FFFFFF">Set a variable to the result of an expression's evaluation. Set is
actually superfluous, but you can type it if you want. Note that
if <variable> is followed by a single $ sign, it is considered to be
a “string variable” in which case <expression> should itself be a
string of some kind. (For instance, [set] mystring$ = “hello, world”.)</font></p>
<p>&nbsp;</p>
<p><font size="3" color="#FFFFFF">unset &lt;variable&gt;</font></p>
<p><font size="3" color="#FFFFFF">Set a variable to zero. Variables equaling zero are removed from
memory, so this is a good way to clean up. Likewise with string variables,
which get a default (deallocated) value of “”.</font></p>
<p>&nbsp;</p>
<p><font size="3" color="#FFFFFF">title "<stringexpression>&lt;stringexpression&gt;"</font></p>
<p><font size="3" color="#FFFFFF">Title the window with text. The title of a window is printed first, and highlighted. You do not have to have a title for a window. Multiple “title”
commands are allowed in a given window, and these are all appended
together at run-time to display a single, composite window title.</font></p>
<p>&nbsp;</p>
<p><font size="3" color="#FFFFFF">body "<stringexpression>&lt;stringexpression&gt;"</font></p>
<p><font size="3" color="#FFFFFF">Add text to the body of a window. Multiple “body” commands are allowed
in a given window, and these are all appended together at run-time to display
a single, composite window text-body.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">xyprint "<stringexpression>&lt;stringexpression&gt;"
&lt;xloc&gt; &lt;yloc&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Print the <stringexpression> "<stringexpression>&lt;stringexpression&gt;"
at that location in the window. The
location corresponds to the upper-left pixel of the text, not the
baseline. Note that <xloc>&lt;xloc&gt; and &lt;yloc&gt;<yloc> are window-relative coordinates,
which means 0, 0 is at the upper-left corner of the window. Multiple xyprints
per window are allowed.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">startconsole "<consolecommandline>&lt;consolecommandline&gt;"</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Execute the listed console command line before the window is
presented. The command line can have multiple console commands separated
by semi-colons. There may only be one “startconsole” command per window.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">finishconsole "<consolecommandline>&lt;consolecommandline&gt;"</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Execute the listed console command line after the window is
terminated. The command line can have multiple console commands separated
by semi-colons. There may only be one “finishconsole” command per window.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">style "<windowstyle>&lt;windowstyle&gt;"</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">style "NULL"</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Make the window border of type <windowstyle>. See later docs for
format of data.
For no border, use style "NULL".</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">font "<fontname>&lt;fontname&gt;"</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Use the proportional font of name <fontname>. Fonts should be in the
Anoxdata\Fonts directory, in the correct format, and saved as a .PCX.
(Index 255 color is used as the transparent color.) If you can't figure it
out from the PCXs there, it's 256 x 256, 256 color, and each character
must fit within a 16 x 16 character tile, starting with ASCII 0 (non-printable
characters are usually ones used by the system for special stuff, like
the bar drawn in the console). Tiles are arranged by ASCII character
value, so the 65th tile (four rows down and one column over) should be
a 16x16 picture of the character A. (Actually this is just exactly like the
Quake font format, but nicely proportional.) In the future, 32-bit RGBA
Targa images will also be allowed as proportional fonts.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">xpos &lt;xposition&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">The left side of the window-interior should be at <xposition>. The border
is drawn OUTSIDE of the location of the window. See pos.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">ypos &lt;yposition&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF"><yposition>The top side of the window-interior should be at <yposition>. The border
is drawn OUTSIDE of the location of the window. See pos.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">width &lt;windowwidth&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Set width of window to (duh)
&lt;windowwidth&gt;<windowwidth>. This is the actual
width of the inside of the window frame (in pixels). See size.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">height &lt;windowheight&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF"><windowheight>Set width of window to (doy)
&lt;windowheight&gt;<windowheight>. This is the actual
height of the inside of the window frame (in pixels). See size.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">maxheight <maxwheight>
&lt;maxwheight&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Set the maximum height the window will automatically expand to
<maxwheight>&lt;maxwheight&gt;.</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">pos &lt;xloc&gt;<xpos>,&lt;yloc&gt;<ypos>
&nbsp;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">
Set the X,Y position of the upper left corner of the inside of the
windowframe (if there is one) to <xpos>&lt;xloc&gt;<xpos>,&lt;yloc&gt;<ypos>
<ypos>. This area
is also know as the Content Area. &lt;xloc&gt; and &lt;yloc&gt;<ypos> are
given in screen-pixel-coordinates.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">size <width>&lt;xloc&gt;<xpos>,&lt;yloc&gt;<ypos>
<height>
&nbsp;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">
Set the width and height of the window's Content area at the same
time.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">image <imagepathname> <xexpression>&lt;imagepathname&gt;
&lt;xexpression&gt;,&lt;yexpression&gt;,<yexpression>&lt;xsize&gt;,&lt;ysize&gt;&nbsp;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">
Draw the image file at the given X,Y position, optionally scaled to xsize
and ysize. The file can be a
BMP, PCX, or TGA. If no path is given, the path "anoxdata\gameflow"
is assumed, but don't put it there or you suck.
BMPs are opaque, PCXs have transparency (index #255), and TGAs
have translucency (8-bit alpha channel).</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">background "<imagepathname>&lt;imagepathname&gt;" [,TILE] [,STRETCH]</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Use the image as the background of the window. It will stretch
the graphic unless you specify TILE, which, of course, doesn't
work yet. STRETCH is what it always does, so Heaven knows
why it's a frickin' reserved word. (F you! -squirrel)</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">flags &lt;flagindex&gt;<flagindex>,TRUE (or FALSE)</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Set APE flags to true or false.
Right now, you can only use this with one flag...which escapes my mind at the
moment. Squirrel? (passive2d) - This flag prevents a 2d window from being closed with a click.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">choice &quot;&lt;choicetextexpression&gt;&quot;
&lt;bankentrynumber&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Add the text <choicetextexpression>&lt;choicetextexpression&gt;
to a bulleted list of choices
after the title and body. If this choice is clicked on, then execute
the switch or window <bankentrynumber>. I do not believe you
can do anything funny with the bank and entry numbers.
(Not sure if this is true… -squirbel)
The bullet character in the font is character 10, and the highlighted
bullet is character 12 (zero-relative).</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">sound <soundfilepathname>
&lt;soundfilepathname&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">
Play the specified sound file when the window is opened.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">startswitch <bankentrynumber>
&lt;bankentrynumber&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">Before the window is presented, execute this switch.&nbsp;</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">
thinkswitch <bankentrynumber>
&lt;bankentrynumber&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">
Before the first time the window is presented, execute this switch,
and execute it every server frame the window is present. This is
extremely powerful, and is the basis for almost all APE-based games.</font></p>
<p>&nbsp;</p>
<p><font face="Courier New" size="3" color="#FFFFFF">finishswitch <bankentrynumber>
&lt;bankentrynumber&gt;</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">
Execute this switch when the window is terminated. (Used for
cleaning up variables and such.)</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF">=============================================================================</font></p>
<p><font face="Courier New" size="5" color="#FFFF00">APE commands (#switch)</font></p>
<p><font face="Courier New" size="3" color="#FFFFFF">A switch is a code block, executed instantaneously. You can do just about
anything, except draw stuff to the window. Switches are limited to approximately 30 commands each, for code-efficiency reasons. Here are the commands you can use.</font></p>
<p><font size="3" color="#FFFF00">COMMANDS</font></p>
<p><font color="#FFFFFF" size="3">console [consolecommandline]</font></p>
<p><font color="#FFFFFF" size="3">Like startconsole, but this command is
pushed at the moment</font> <font color="#FFFFFF" size="3">this statement is
executed. Try to make sure there isnt a</font></p>
<p><font color="#FFFFFF" size="3">“better way” of doing something before
resorting to using</font> <font color="#FFFFFF" size="3">the
already-overcrowded console buffer.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">extern [command] [arguments]</font></p>
<p><font color="#FFFFFF" size="3">Use a command defined in another module. It
is responsible</font> <font color="#FFFFFF" size="3">for the format of the
arguments. This is typically used to</font></p>
<p><font color="#FFFFFF" size="3">expose functions from such modules as AI,
Music, and Battle</font> <font color="#FFFFFF" size="3">to the APE language.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">gosub [bankentryexpression]</font></p>
<p><font color="#FFFFFF" size="3">Go to the switch or window at [bankentryexpression],</font>
<font color="#FFFFFF" size="3">then come back here and keep going.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">goto [bankentryexpression]</font></p>
<p><font color="#FFFFFF" size="3">Go to the switch or window at [bankentryexpression]...and
DON'T COME BACK! Ya here me!</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">if ([expression]) [commandblock]</font></p>
<p><font color="#FFFFFF" size="3">else if [commandblock]</font></p>
<p><font color="#FFFFFF" size="3">else [commandblock]</font></p>
<p><font color="#FFFFFF" size="3">If expression is true, then execute [commandblock].</font></p>
<p><font color="#FFFFFF" size="3">If it is false and there is an else after
it, execute</font> <font color="#FFFFFF" size="3">the command block after the
else. You can keep checking cases by</font></p>
<p><font color="#FFFFFF" size="3">having if, then an else if, then else if,
and so on. An else at the</font> <font color="#FFFFFF" size="3">end with no if
will terminate the big ol' if statement.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">set</font></p>
<p><font color="#FFFFFF" size="3">Same as in #window.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">unset</font></p>
<p><font color="#FFFFFF" size="3">Same as in #window.</font></p>
<p>&nbsp;</p>
<p><font color="#FFFFFF" size="3">while ([expression]) [commandblock]</font></p>
<p><font color="#FFFFFF" size="3">While [expression] is true, execute the code
in</font> <font color="#FFFFFF" size="3">the command block. Usually, the code
will do something and</font></p>
<p><font color="#FFFFFF" size="3">increment a counter, and the complex
expression is waiting</font> <font color="#FFFFFF" size="3">for that counter
to reach a certain value. Alternately, the</font> </p>
<p><font color="#FFFFFF" size="3">code will keep checking something, and set a
flag when that</font> <font color="#FFFFFF" size="3">something comes about.</font></p>
<p><font color="#FFFFFF" size="3">A complex expression is simply anything you
can also put in</font> <font color="#FFFFFF" size="3">an if statement.</font>&nbsp;
<font color="#FFFFFF" size="3">And, of course, sound SHOULD be okay in a
switch too--if Squirrel ever does it. (F you! -squirgel) (F ya back -Tomb)</font></p>
<p>&nbsp;</p>
<p><font color="#FFFF00" size="5">ALGEBRAIC FUNCTIONS &amp; PSEUDOVARIABLES</font></p>
<p><font color="#FFFFFF" size="3">(usable wherever an algebraic expression is
allowed)</font></p>
<p><font color="#FFFFFF" size="3">func_mod[number,modval] (integer division
remainder)</font></p>
<p><font color="#FFFFFF" size="3">func_div[number,divby] (integer division,
rounded down)</font></p>
<p><font color="#FFFFFF" size="3">func_ceil[number,divby] (round up)</font></p>
<p><font color="#FFFFFF" size="3">func_floor[number,divby] (round down)</font></p>
<p><font color="#FFFFFF" size="3">func_trunc[number,divby] (same as func_floor)</font></p>
<p><font color="#FFFFFF" size="3">func_round[number,divby] (round to nearest
int)</font></p>
<p><font color="#FFFFFF" size="3">func_drand[low,high] (random integer between
LOW and HIGH, inclusive)</font></p>
<p><font color="#FFFFFF" size="3">func_frand[] (random float from 0.00f to
1.00f)</font></p>
<p><font color="#FFFFFF" size="3">func_rcos[radians] (cosine, in radians)</font></p>
<p><font color="#FFFFFF" size="3">func_dcos[degrees] (cosine, in degrees)</font></p>
<p><font color="#FFFFFF" size="3">func_rsin[radians]</font></p>
<p><font color="#FFFFFF" size="3">func_dsin[degrees]</font></p>
<p><font color="#FFFFFF" size="3">func_rtan[radians]</font></p>
<p><font color="#FFFFFF" size="3">func_dtan[degrees]</font></p>
<p><font color="#FFFFFF" size="3">func_ratan2[y, x] (arctangent of y,x, in
radians)</font></p>
<p><font color="#FFFFFF" size="3">func_datan2[y, x] (arctangent of y,x, in
degrees)</font></p>
<p><font color="#FFFFFF" size="3">func_abs[number] (absolute value)</font></p>
<p><font color="#FFFFFF" size="3">func_inventory[itemname] (the amount of the
named item in the party inventory - NOT YET INTERFACED TO NOXGAME!)</font></p>
<p><font color="#FFFFFF" size="3">func_playerstats[charname,stat] (the
stat-value of the specified stat for the specified player-character - NOT YET
INTERFACED TO NOXGAME!)</font></p>
<p><font color="#FFFFFF" size="3">func_charinparty[charname] (3=party leader,
2=present in party, 1=joined but not present, 0=never joined, 0.5=retired, or some dumb shit like that.)</font></p>
<p><font color="#FFFFFF" size="3">func_gamestate[] (returns a different value
based on whether we're in combat, stats, shop, etc.)</font></p>
<p><font color="#FFFFFF" size="3">func_cvar[cvarname] (returns the float-value
of the named console variable)</font></p>
<p><font color="#FFFFFF" size="3">func_pow[num,power] (returns the value when
x is raised to the y power)</font></p>
<p><font color="#FFFFFF" size="3">func_fileexists[filepathname] (returns
nonzero if the named file exists in the default APE/gameflow path)</font></p>
<p><font color="#FFFFFF" size="3">func_gametime (returns the number of
milliseconds since the game began (ie: final fantasy, etc.))</font></p>
<p><font color="#FFFFFF" size="3">func_realtime (returns the system time -
milliseconds since midnight, Jan 1, 1970)</font></p>
<p><font color="#FFFFFF" size="3">func_maptime (returns the number of
milliseconds since the map began)</font></p>
<p><font color="#FFFFFF" size="3">func_timer (high-precision millisecond
timer, wraps once per hour)</font></p>
<p><font color="#FFFFFF" size="3">func_mousex (x screen coordinate of mouse
cursor (2d/3d - it's all the same) 0 is left side of screen</font></p>
<p><font color="#FFFFFF" size="3">func_mousey (y screen coordinate of mouse
cursor (2d/3d - it's all the same) 0 is top of screen</font></p>
<p><font color="#FFFFFF" size="3">func_atof[variable] (text converted to a float number)</font></p>
<p><font color="#FFFFFF" size="3">func_cursorentity (The edict number of the last entity you clicked on.)</font></p>
<p><font color="#FFFFFF" size="3">func_lastbattledamage (The amount of damage dealt on the last attack in battle.)</font></p>
<p><font color="#FFFFFF" size="3">func_lastattacker$ (The targetname of the last attacker in battle.)</font></p>
<p><font color="#FFFFFF" size="3">func_lastdefender$ (The targetname of the last defender in battle.)</font></p>
<p><font color="#FFFFFF" size="3">func_LastBattleButtonNumber (The number of the last battle icon clicked.)</font></p>
<p><font color="#FFFFFF" size="3">func_LastBattleButtonPlayer (???)</font></p>
<p><font color="#FFFFFF" size="3">func_LastBattleButtonTime (The time when a battle icon was last clicked.)</font></p>
<p><font color="#FFFFFF" size="3">random (kind of obsolete, but still okay -
has a random integer value from 0 to 99)</font></p>
<p><font color="#FFFFFF" size="3">kidz (1 if &quot;kidz mode&quot; (censored
language, etc.), 0 if adult mode)</font></p>
<font SIZE="2">
<p>&nbsp;</p>
</font>
<p><font color="#FFFFFF" size="3">STRING PSEUDOVARIABLES (this will be
changing as soon as strings are finished -squirrel)</font></p>
<p><font color="#FFFFFF" size="3">partyleadername (the string-name of the
partyleader - I'll probably replace this with &quot;partymembername[0]&quot;,
etc.)</font></p>
<p><font color="#FFFFFF" size="3">mapname (the string-name of the current map)</font></p>
<p><font color="#FFFFFF" size="3">username (the anachronox
player-user-login-name, or the windows username)</font></p>
<font SIZE="2">
<p>&nbsp;</p>
</font>
<pre><font face="Fixedsys">
<font color=yellow>setvar_flexible</font> <font color=cyan>&lt;</font>varname<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
This extern sets the varname you specified as a varaible with the value that you specified.
Varname can be either the literal name of the new variable or a string. Value can be a literal number or a variable.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>getvar_flexible</font> <font color=cyan>&lt;</font>varname<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return variable<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
This extern looks up the variable name specified and returns the value of it in the variable you specify.
The varname can be either the literal name of the variable or a string.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>checkgamestate</font> <font color=cyan>&lt;</font>varname<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
This extern returns a 1 for normal walking around gamestate, or a 0 for other gamestates.
</font></blockquote>
<!------------------ JOSH please FOR THE LOVE OF GOD don't fuck up this formatting... -------------------->
<!------------------ JOSH please FOR THE LOVE OF GOD don't fuck up this formatting... -------------------->
<!------------------ JOSH please FOR THE LOVE OF GOD don't fuck up this formatting... -------------------->
<!------------------ JOSH please FOR THE LOVE OF GOD don't fuck up this formatting... -------------------->
<hr>
<font face="Arial,sans-serif">
<p><font size="5" color="#FFFF00">AI/ENTITY EXTERN COMMANDS</font></p>
<pre><font face="Fixedsys">
<font color=yellow>AI_TalkStop</font> <font color=cyan>&lt;</font>targetname/sequence<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Force the entity to stop talking or "hanging out" after talking.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_AddWaypoint</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>x<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>z<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Add a waypoint to the entity's waypoint queue. The entity will visit them in the order they are added to the queue.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_SnapMove</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Turn off interpolation for one frame. Use this when you want to "teleport" and entity somewhere else.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_FindEntity</font> <font color=cyan>&lt;</font>return value (handlevar)<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Finds an entity in the map that has a matching targetname or sequence and sets handlevar to the edict number.
The return value is -1 if no entity could be found.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_Distance3d</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar A<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar B<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Returns the distance in 3d pixels between entity A and entity B.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_DistanceSquared3d</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar A<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar B<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Returns the <i>squared </i>distance in 3d pixels between entity A and entity B. This should be used for
distance comparisons where efficiency matters, because the function doesn't have to do a square root to
find the actual distance in pixels.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_Distance2d</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar A<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar B<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Returns the distance between entity A and entity B in the X/Y plane, ignoring the Z values.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_GetEdictNumber</font> <font color=cyan>&lt;</font>targetname/sequence/character (boots,pal...)<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value (handlevar)<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Does the same thing as <code><font color=yellow face="Fixedsys">AI_GrabEntity</font></code>,
but doesn't actually grab the entity. In other words, gives you a handle for the entity without affecting
the entity in any way. BEWARE: make sure you know what you are doing when using this, as an entity that you
previously got a handle for could be a different entity now...
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_GetPlayerLocation</font> <font color=cyan>&lt;</font>returned x<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>returned y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>returned z<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Gets the x,y,z location of the player.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_SpawnEntity</font> <font color=cyan>&lt;</font>return value (handlevar)<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>classname<font color=cyan>&gt;</font> <font color=cyan>[</font>targetname<font color=cyan>]</font> <font color=cyan>[</font>sequence<font color=cyan>]</font> <font color=cyan>[</font>targetname of path_corner to spawn at<font color=cyan>]</font>
</font></pre><blockquote><font size="2">
Spawns a new entity with the given classname, optionally a targetname and sequence, and optionally at exact location
of another specified entity (usually a path_corner).
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_DestroyEntity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Completely remove the entity from the world and destroy the handle. No, you don't have to call
<code><font color=yellow face="Fixedsys">AI_ReleaseEntity</font></code> after this.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>entkey</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>epair<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Add edicts to entities spawned with APE, (ex: extern entkey door_handle "wsequence" "55:5555")
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_GrabEntity</font> <font color=cyan>&lt;</font>targetname/sequence<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value (handlevar)<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Tries to find an entity in the world with a matching targetname or sequence. If there is one, the entity is
frozen and stops what it's doing so that it can execute any future commands you will issue from APE. To put
the entity back to normal, you must call <code><font color=yellow face="Fixedsys">AI_ReleaseEntity</font></code>.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_ReleaseEntity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Lets the entity go back to what it was doing before. BEWARE! Do not use a handlevar for an entity that you
have already released unless you are positive that it's still valid.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>Ent_GetClosestToPoint</font> <font color=cyan>&lt;</font>X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>Z<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Get the entity closest to any X Y Z coordinates. GetClosestToPoint will ignore all "func_wall" and "func_areaportal" entities, as well as anything with a non-alpha first character in classname.
Returns (-1) if there was nothing found. There is no radius limit. Even if point is at one side of the universe and the only entity is at the other side of the universe, it will find it.
Also, when looking for bmodels (triggers, doors, etc), it finds the center point of the entity and uses that to determine distance. So, if you have ONE entity consisting of two brushes that
are far apart, the center point will be somewhere between the two brushes and probably not anywhere near either of them... just something to be aware of.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>Ent_GetSpecificClosestToPoint</font> <font color=cyan>&lt;</font>classname<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>Z<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Get an entity of a specific classname closest to any X Y Z coordinates. So for example if you wanted to grab a door, the class name would be "func_door".
Returns (-1) if there was nothing found. There is no radius limit. Even if point is at one side of the universe and the only entity is at the other side of the universe, it will find it.
Also, when looking for bmodels (triggers, doors, etc), it finds the center point of the entity and uses that to determine distance. So, if you have ONE entity consisting of two brushes that
are far apart, the center point will be somewhere between the two brushes and probably not anywhere near either of them... just something to be aware of.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_Wait</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>duration in whole seconds or gamevar with value<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Tells the entity to stop right where it is and wait for some number of seconds. If you tell it to wait -1 seconds,
it will stay there forever.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_WaitAndFace</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>duration in whole seconds or gamevar with value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence of ent to face<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Same as <code><font color=yellow face="Fixedsys">AI_Wait</font></code>, but the entity will also face the other entity
that you specify.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_SeekAndTouch</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence of destination<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Tells the entity to walk toward the specified entity until their bounding boxes are touching.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_SeekAndFace</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence of target<font color=cyan>&gt;</font> <font color=cyan>[</font>targetname/sequence of ent to face<font color=cyan>]</font>
</font></pre><blockquote><font size="2">
Tells the entity to walk to a specific entity (usually a path_corner), then face another entity. If you don't specify
another entity to face, it will face the same direction as the target entity (the path_corner).
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_Seek</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence of target ent<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Tells the entity to walk to a specific entity (usually a path_corner).
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_SetCompletionCallback</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>sequence number to call<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
When the entity is done with whatever command you last gave it, it will invoke the sequence you specify here.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_FollowLoose</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence of leader<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>x offset<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>y offset<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>z offset<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Don't use it.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_FollowRigid_Stop</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Force an entity to stop following it's leader, if any.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_FollowRigid</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname/sequence of leader<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>distance along trail to follow by<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Make an entity follow a leader, FF8 style.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_Path</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname of path_corner to start at<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Make an entity start walking a path, given a path_corner to start on.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_DeSolifity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Make an entity non-solid. Nothing can touch it and it can go through walls.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_GetForward</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Z<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Get the unit vector that points in the entity's forward direction.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_SpeedMoveTo</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>speed<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>destination X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>destination Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>destination Z<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Magically float the entity to the desired location, moving at a specific speed.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_TimeMoveTo</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>time in seconds<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>destination X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>destination Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>destination Z<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Magically float the entity to the desired location, arriving in a specific number of seconds.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_WaypointPath</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>targetname of first path_corner in sequence<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
The entity will basically start at the path_corner you give it, then walk the entire path to the end,
then go back to whatever it was doing before. BEWARE! Make sure the path doesn't loop!
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_AvoidWorld</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>"true" or "false"<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Toggle whether the entity should try to avoid the world or not.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_AvoidEnts</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>"true" or "false"<font color=cyan>&gt;</font>
</font></pre><blockquote><font size="2">
Toggle wether the entity should try to avoid other entities or not.
</font></blockquote>
<pre><font face="Fixedsys">
<font color=yellow>AI_GetXYZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Z<font color=cyan>&gt;</font>
<font color=yellow>AI_GetX</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetY</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetXYZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new X value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new Y value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new Z value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetX</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetY</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetVelocityXYZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new X value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new Y value<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>new Z value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetVelocityX</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetVelocityY</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetVelocityZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetVelocityXYZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Z<font color=cyan>&gt;</font>
<font color=yellow>AI_GetVelocityX</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetVelocityY</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetVelocityZ</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_ZeroVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font>
<font color=yellow>AI_SetYawVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetPitchVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetRollVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetYawVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetPitchVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetRollVelocity</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetScale</font> <font color=cyan>&lt;</font>handle<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value Z<font color=cyan>&gt;</font>
<font color=yellow>AI_SetScale</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value X<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value Y<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value Z<font color=cyan>&gt;</font>
<font color=yellow>AI_SetYaw</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetPitch</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_SetRoll</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetYaw</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetPitch</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
<font color=yellow>AI_GetRoll</font> <font color=cyan>&lt;</font>handlevar<font color=cyan>&gt;</font> <font color=cyan>&lt;</font>return value<font color=cyan>&gt;</font>
</font>
</font>
</pre>
</font>
</font>
</body>
</html>